すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:ACK クラスター向けの MSE クラウドネイティブゲートウェイをエグレスゲートウェイとして設定する

最終更新日:Mar 12, 2026

ACK クラスターのノードにパブリック IP アドレスが割り当てられていない場合でも、特定のワークロードは外部 API やサービスにアクセスする必要があります。すべてのアウトバウンドトラフィックを単一の管理された出口ポイント(エグレスゲートウェイ)経由でルーティングすることで、各 Pod にインターネットアクセスを付与することなく、アクセスの制御、速度制限、およびトラフィックポリシーを一元的に適用できます。

本ガイドでは、Container Service for Kubernetes (ACK) クラスター向けに Microservices Engine (MSE) クラウドネイティブゲートウェイをエグレスゲートウェイとして設定する手順について説明します。コントローラーのインストール、ゲートウェイの作成、外部サービスへのトラフィックルーティング、および設定の検証までを順に解説します。

エグレスゲートウェイを利用するタイミング

  • 選択的なインターネットアクセスが必要な非公開クラスター:ACK クラスターのノードにはパブリック IP アドレスが割り当てられていませんが、特定のワークロードが外部 API やサービスにアクセスする必要があります。アウトバウンドトラフィックを MSE クラウドネイティブゲートウェイ経由でルーティングし、ゲートウェイの vSwitch 上でのみソースネットワークアドレス変換 (SNAT) を有効化します。クラスター全体へのインターネットアクセスは不要です。

  • 集中型のエグレスポリシー適用:すべてのアウトバウンドトラフィックを、速度制限や IP ホワイトリストによる制御が可能な制御されたチョークポイント(制限点)を経由させる必要があります。MSE クラウドネイティブゲートウェイは、アプリケーションポッドの変更を伴わず、レイヤー 7 の HTTP ガバナンス機能を提供します。

メリット

メリット詳細
管理・運用が独立ACK クラスターとは分離したスタンドアロンモードでデプロイされます。クラスターの障害がゲートウェイに影響を及ぼすことはありません。
レイヤー 7 トラフィックガバナンスIP アドレスのブラックリストおよびホワイトリスト、速度制限、負荷分散、トランスポートレイヤーセキュリティ (TLS) オフロード、トラフィックミラーリング、ヘッダー制御など。
最小限の露出クラスター内の各 Pod ではなく、ゲートウェイのみがインターネットアクセスを必要とします(vSwitch 上の SNAT 経由)。

アーキテクチャ

Deployment architecture

MSE クラウドネイティブゲートウェイは、ACK クラスターと外部サービスの間に配置されます。Pod は、ゲートウェイの内部クラシックロードバランサー (CLB) エンドポイントに対してアウトバウンドリクエストを送信します。ゲートウェイは、vSwitch 上で SNAT が有効化された NAT ゲートウェイを経由して、外部宛てのリクエストを転送します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • ACK クラスターまたは ACK Serverless クラスター(クラスター作成時に VPC に対する SNAT の設定 を選択しなかった場合、クラスターはデフォルトでインターネットにアクセスできません)

  • Kubernetes リソース(Services、Ingress)および Alibaba Cloud リソース(MSE ゲートウェイ、NAT ゲートウェイ)を作成する権限

MSE Ingress コントローラーのインストール

ACK または ACK Serverless クラスターに MSE Ingress コントローラーをインストールします。既存のクラスターへのインストールも、クラスター作成時におけるインストールも可能です。

手順については、「MSE Ingress コントローラーコンポーネントの管理」の「MSE Ingress コントローラーコンポーネントのインストール」セクションをご参照ください。

MseIngressConfig を使用したゲートウェイの作成

MseIngressConfig は、MSE Ingress コントローラーが提供するカスタムリソース定義 (CRD) です。これを使用して、MSE クラウドネイティブゲートウェイを作成したり、既存のゲートウェイにバインドしたりできます。

本エグレス利用シーンでは、内部向けの CLB インスタンスのみを作成します。

apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: egress-gateway
spec:
  name: egress-gateway
  common:
    instance:
      spec: 2c4g
      replicas: 3
    network:
      vSwitches:
        - "vsw-xxxx" # ゲートウェイにアタッチする vSwitch の ID。実際の vSwitch ID に置き換えてください。
      privateSLBSpec: slb.s2.small

以下のプレースホルダーを実際の値に置き換えてください。

プレースホルダー説明
vsw-xxxxMSE クラウドネイティブゲートウェイにアタッチする vSwitch の IDvsw-bp1a4daz0e2a8xxxx

MseIngressConfig の全オプションについては、「MseIngressConfig の構成」の「クラウドネイティブゲートウェイの作成」セクションをご参照ください。

説明

ゲートウェイの vSwitch にはインターネットアクセス用の SNAT 設定が必要です。外部接続性のテストを行う前に、次のステップで SNAT を構成してください。

ゲートウェイの vSwitch に対する SNAT の構成

クラスター作成時に VPC に対する SNAT の設定 を選択しなかった場合、SNAT エントリを追加するまでゲートウェイはインターネットに到達できません。

  1. まだ NAT ゲートウェイをお持ちでない場合は、まず NAT ゲートウェイを作成します。手順については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。

  2. SNAT エントリを作成します(「ステップ 3:SNAT エントリの作成」)。vSwitch の指定 を選択し、MseIngressConfig リソースで使用した vSwitch ID(前ステップで使用した vsw-xxxx の値と同じ)を追加します。

対象先の ExternalName サービスの作成

Kubernetes の ExternalName 型サービスは、クラスター内 DNS 名を外部ホスト名にマップします。Pod はクラスター内のサービス名を呼び出し、Kubernetes がこれを外部エンドポイントに解決します。後日、外部サービスがクラスター内に移行された場合でも、Service 定義のみを更新すればよく、アプリケーションコードの変更は不要です。

以下の例では、aliyun-svc-externalwww.aliyun.com にマップしています。

apiVersion: v1
kind: Service
metadata:
  name: aliyun-svc-external
  namespace: default
spec:
  externalName: www.aliyun.com
  ports:
    - name: port1
      port: 80
      protocol: TCP
      targetPort: 80
    - name: port2
      port: 443
      protocol: TCP
      targetPort: 443
  type: ExternalName

検証: 次のコマンドを実行し、タイプが ExternalName であり、正しいホスト名が設定されていることを確認します。

kubectl get svc aliyun-svc-external

Ingress ルーティングルールの作成

MSE クラウドネイティブゲートウェイを経由して、ExternalName サービスへトラフィックをルーティングするための Ingress リソースを作成します。

以下を mse-ingress.yaml として保存します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mse-ingress
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: www.aliyun.com  # 外部サービスのドメイン名。
      http:
        paths:
          - backend:
              service:
                name: aliyun-svc-external  # 前ステップで作成した ExternalName サービス。
                port:
                  number: 80
            path: /product/aliware/mse  # ルーティング対象のパス。
            pathType: Prefix

設定を適用します。

kubectl apply -f mse-ingress.yaml

検証: 次のコマンドを実行し、status.loadBalancer.ingress に表示される CLB の IP アドレスを確認します。この IP アドレスはテストで使用しますので、メモしておいてください。

kubectl get ingress mse-ingress -o yaml

HTTPS バックエンドへのルーティング

バックエンドサービスが HTTPS を使用する場合は、バックエンドプロトコルのアノテーションを追加し、ポートを 443 に変更します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS  # HTTPS 経由でバックエンドにルーティング。
  name: mse-ingress
  namespace: default
spec:
  ingressClassName: mse
  rules:
    - host: www.aliyun.com
      http:
        paths:
          - backend:
              service:
                name: aliyun-svc-external
                port:
                  number: 443
            path: /product/aliware/mse
            pathType: Prefix

Pod からのエグレスアクセスのテスト

クラスター内の Pod から、curl コマンドと --resolve フラグを使用して、リクエストをゲートウェイの CLB IP アドレスに直接送信します。

curl http://www.aliyun.com/product/aliware/mse --resolve www.aliyun.com:80:<CLB-IP>

<CLB-IP> を、Ingress リソース出力の status.loadBalancer.ingress から取得した CLB の IP アドレスに置き換えてください。

正常な応答が得られた場合、Pod のアウトバウンドトラフィックが MSE クラウドネイティブゲートウェイを経由して外部サービスにルーティングされていることが確認できます。

その他の考慮事項

  • レイヤー 7 ガバナンスポリシーの適用:エグレスゲートウェイのルーティングルールに、速度制限、IP ホワイトリスト、ヘッダー制御などのポリシーを追加できます。構成の詳細については、「MSE Ingress の高度な使い方」をご参照ください。

  • その他の外部宛先へのルーティング:その他の外部エンドポイントをゲートウェイ経由でルーティングするために、追加の ExternalName サービスおよび Ingress ルールを追加できます。

  • ゲートウェイ経由のエグレスの強制:Kubernetes のネットワークポリシーを追加して、Pod からの直接的なアウトバウンドトラフィックをブロックし、すべてのエグレストラフィックをゲートウェイ経由で流すように強制できます。ネットワークポリシーを適用しない場合、Pod はネットワーク接続が可能であればゲートウェイをバイパスして外部サービスに直接アクセスすることがあります。