Service Mesh (ASM) は、アプリケーションのセキュリティ、可観測性、信頼性を確保するための、柔軟かつ効率的なエグレストラフィック管理ソリューションを提供します。このトピックでは、ASM のエグレストラフィック管理機能と、ASM エグレスゲートウェイを使用するメリットについて説明します。
豊富なエグレストラフィック管理機能
ASM は、トラフィックルーティング、可観測性、セキュリティに関連するレイヤー 7 のエグレストラフィックを管理するための豊富な機能を提供します。必要に応じて機能を構成できます。
アプリケーションが HTTPS リクエストを直接開始する場合、対応するサイドカープロキシは HTTPS リクエストを通常の TLS トラフィックとしてのみ処理でき、ASM のレイヤー 7 機能は有効になりません。したがって、アプリケーションから送信されるリクエストが HTTP プレーンテキストリクエストであることを確認してください。ASM は、HTTP リクエストを外部サービスに直接転送するか、設定に基づいて HTTP リクエストを HTTPS リクエストに自動的に変換してから外部サービスに送信します。
トラフィックルーティング
クラスター外の HTTP サービスにアクセスするには、サービスメッシュに対応するサービスエントリを構成します。これにより、エグレス トラフィックミラーリングや比率に基づくエグレス トラフィックルーティングなど、仮想サービスの高度な機能を使用できます。HTTPS プロトコルを使用するサービスにアクセスする場合は、DestinationRule も構成する必要があります。トラフィックルーティング機能には、ASM エグレスゲートウェイは必要ありません。
出力トラフィックの監視
プレーンテキストリクエストの場合、追加の構成なしで、ログ、メトリック、トレース分析を使用してエグレストラフィックを監視できます。リクエストトラフィックを暗号化する必要がある場合は、サービスエントリと DestinationRule を構成するだけで済みます。アプリケーションがプレーンテキストリクエストを開始すると、サイドカーはトラフィックを転送する前に自動的に暗号化します。これにより、メッシュの完全な可観測性機能を利用できます。この機能には、ASM エグレスゲートウェイは必要ありません。
エグレストラフィックの認証/権限付与
ASM は、エグレストラフィックに対する堅牢な認証および権限付与機能も提供します。ASM では、エグレストラフィックの JSON Web トークン (JWT) の検証や、レイヤー 7 またはレイヤー 4 のリクエストメタデータに基づいて特定のクライアントからのアクセスを制限するなど、高度なセキュリティ機能を実装できます。これらの機能には、ASM エグレスゲートウェイが必要です。詳細については、「エグレストラフィックのセキュリティモデル」をご参照ください。
出力トラフィックのセキュリティモデル
純粋な TCP トラフィック (非 HTTP および非 TLS トラフィック) の場合、ネイティブの Kubernetes ネットワークポリシーを使用してセキュリティを強化できます。
デフォルトアクション
デフォルトアクションは ALLOW_ANY で、サイドカープロキシが出力トラフィックに制限を課さないことを示します。この場合、出力トラフィックの動作は完全に制御されません。セキュリティレベルは最も低くなります。
REGISTRY_ONLY
REGISTRY_ONLY を有効にすると、アプリケーションはサービスエントリを使用して登録されたサービスにのみアクセスできます。
アプリケーションオーナーはアプリケーションの Pod 構成を変更する権限を持っているため、複数の方法でエグレストラフィックをサイドカープロキシからバイパスさせることができます。リクエストがサイドカープロキシをバイパスすると、REGISTRY_ONLY のアクセス制限は無効になり、アプリケーションは制限なく外部サービスにアクセスできるようになります。したがって、REGISTRY_ONLY は有効なセキュリティポリシーとは見なされません。
さらに、このソリューションは、指定された名前空間のワークロードに対して外部サービスへのアクセスを制限することしかできず、特定のワークロードに対してきめ細かい制御を提供することはできません。
REGISTRY_ONLY と出力ゲートウェイ
エグレスゲートウェイは、理想的なセキュリティ境界として機能します。独立した Deployment として、エグレスゲートウェイはメッシュ管理者によって完全に制御されます。アプリケーションオーナーは、エグレスゲートウェイやそのセキュリティポリシーを直接制御することはできません。
さらに、エグレスゲートウェイがデプロイされているノードのみが外部サービスにアクセスでき、他のノードはアクセスできないようにする必要があります。アプリケーション Pod は直接インターネットにアクセスできません。外部サービスにトラフィックを正常に送信するには、アプリケーションオーナーは、アプリケーションのエグレストラフィックがサイドカープロキシによって処理され、その後エグレスゲートウェイに転送されることを必ず確認する必要があります。
トラフィックが出力ゲートウェイに透過的に転送された後:
出力ゲートウェイで承認ポリシーを設定してきめ細かい承認を実装するか、カスタム承認 を実装できます。
アクセスするサービスが HTTPS サービスの場合、出力ゲートウェイで HTTP から HTTPS へのアップグレードを設定できます。出力ゲートウェイは HTTPS 接続を自動的に管理します。ワークロード全体で HTTPS 接続を多重化してパフォーマンスを向上させることができます。
Cloud Firewall との併用
Cloud Firewall を使用して VPC または NAT Gateway のアウトバウンドトラフィックを厳密に制限する場合、ASM エグレスゲートウェイの Pod に固定的で予測可能な IP アドレス範囲を割り当て、その IP アドレス範囲をファイアウォールポリシーのホワイトリストに追加する必要があります。
これを実現するには、エグレスゲートウェイ Pod が独立した専用の IP アドレスセグメントを使用するようにします。Alibaba Cloud ACK クラスターでは、次の 2 つの方法のいずれかを使用できます:
Terway Container Network Interface (CNI) を使用して Pod に固定 IP アドレスを割り当てる (推奨)。
ご利用の ACK クラスターが Terway ネットワークモードを使用している場合、そのネイティブ機能を使用してエグレスゲートウェイ Pod に固定 IP アドレスを割り当て、独立した vSwitch とセキュリティグループに関連付けることができます。これは最も直接的で簡潔なソリューションです。詳細については、「Pod に固定 IP アドレス、独立した vSwitch、およびセキュリティグループを構成する」をご参照ください。
ホストネットワーク (HostNetwork) を使用して Pod に間接的に固定 IP アドレスを割り当てる。
最初の方法を使用できない場合は、次の手順に従って、ノードの IP アドレスをエグレスゲートウェイ Pod に間接的に割り当てることができます:
専用ノードプールの作成:エグレスゲートウェイ専用のノードプールを作成します。このノードプールの IP アドレス範囲が、クラスター内の他のアプリケーション Pod の IP アドレス範囲と重複しないようにしてください。詳細については、「ノードプールの作成と管理」をご参照ください。
ノードの Taint の追加:このノードプール内のすべてのノードに Taint を追加して、他の Pod がそれらにスケジュールされないようにします。
エグレスゲートウェイの構成:エグレスゲートウェイの Deployment 構成を次のように変更します:
ホストネットワークモードを有効にする (
hostNetwork: true)。専用ノードプールの Taint に一致するように、対応する Toleration を追加します。
Pod がこの専用ノードプールにスケジュールされるようにアフィニティを構成します。
これらの構成が完了すると、エグレスゲートウェイ Pod はそのノードの IP アドレスをエグレス IP アドレスとして使用します。その後、専用ノードプールの IP アドレスセグメントを Cloud Firewall のホワイトリストに追加できます。
参照
ASM によって提供される出力トラフィックポリシーを使用して、出力ゲートウェイを使用してクラスター外のサービスにアクセスするためのトラフィックルールをすばやく設定できます。詳細については、出力トラフィックポリシーを使用した出力トラフィックの管理 をご参照ください。