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

Alibaba Cloud Service Mesh:エグレストラフィック管理

最終更新日:Jul 11, 2026

Service Mesh (ASM) Ambient モードでは、メッシュ内のサービスのアウトバウンドトラフィックを 2 つのレベルで管理できます。1 つは ServiceEntry と Waypoint を使用したサービスごとのきめ細かい制御、もう 1 つは EgressPolicy を使用したグローバルなポリシー適用です。

方法の選択

方法

ユースケース

制御の粒度

一般的な用途

ServiceEntry + Waypoint

特定の外部サービスに対して、ルーティング、可観測性、またはアクセス制御を設定します。

単一の外部サービス

TLS 終端、リクエスト認可、トラフィック監査

EgressPolicy

メッシュからのすべてのアウトバウンドトラフィックに許可または拒否ポリシーを適用します。

グローバル (名前空間または CIDR ブロック別)

内部 CIDR ブロックへのアクセスをブロックするか、特定の名前空間からのトラフィックを許可します。

注意 両方の方法を併用できます。メッシュは ServiceEntry で宣言された外部サービスを既知の宛先として扱うため、EgressPolicy はそのトラフィックに影響を与えません。EgressPolicy は、メッシュ内の既知の Service または Workload に一致しないトラフィックにのみ適用されます。
重要 EgressPolicy を使用するには、バージョン 1.29 以降の ASM インスタンスが必要です。

前提条件

  • Ambient モードが有効になっている ASM インスタンスを作成済みであること。

  • ASM インスタンスにクラスターを追加済みであること。

  • アウトバウンドトラフィックを管理する名前空間で Ambient モードを有効にしていること。

  • egress プロキシをデプロイするための egress-gateway 名前空間を作成しました。


方法 1: ServiceEntry と Waypoint

ServiceEntry を使用して外部サービスをメッシュ内の既知の宛先として宣言し、Waypoint プロキシを使用してそのトラフィックにルーティング、可観測性、またはアクセス制御を適用します。

  1. エグレス Waypoint のデプロイ

    エグレストラフィック専用の Waypoint プロキシを作成します。このプロキシは、外部サービスにアクセスするメッシュ内のサービスにとって、統一された出口点として機能します:

    kubectl apply -n egress-gateway -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: egress-waypoint
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - name: mesh
        port: 15008
        protocol: HBONE
    EOF

    Waypoint が準備できていることを確認します:

    kubectl get pods -n egress-gateway -l gateway.istio.io/managed=istio.io-mesh-controller

    期待される出力では、ポッドのステータスは Running です:

    NAME                                 READY   STATUS    RESTARTS   AGE
    egress-waypoint-xxxxxxxxx-xxxxx      1/1     Running   0          30s
  2. ServiceEntry の作成

    httpbin.org を例に、ServiceEntry を作成してこの外部サービスをメッシュ内の既知の宛先として宣言し、前の手順でデプロイされた Waypoint にバインドします:

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
      name: httpbin
      namespace: egress-gateway
      labels:
        istio.io/use-waypoint: egress-waypoint
    spec:
      hosts:
      - httpbin.org
      location: MESH_EXTERNAL
      ports:
      - number: 80
        name: http
        protocol: HTTP
      - number: 443
        name: https
        protocol: HTTPS
      resolution: DNS
    注意
    istio.io/use-waypoint: egress-waypoint ラベルは、この ServiceEntry のトラフィックを指定された Waypoint プロキシにルーティングします。
    resolution: DNS は、メッシュが DNS 解決によって外部サービスの実際の IP アドレスを取得することを示します。
    kubectl apply -f httpbin-serviceentry.yaml
  3. (オプション) アクセスポリシーの設定

    AuthorizationPolicy を使用して、この外部サービスにアクセスできるサービスを制限します:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allow-frontend-to-httpbin
      namespace: egress-gateway
    spec:
      targetRefs:
      - kind: ServiceEntry
        group: networking.istio.io
        name: httpbin
      action: ALLOW
      rules:
      - from:
        - source:
            namespaces: ["default"]
        to:
        - operation:
            methods: ["GET"]
            paths: ["/get", "/headers"]
    kubectl apply -f httpbin-authz.yaml
    このポリシーにより、default 名前空間のサービスは、GET メソッドを使用して httpbin.org/get パスと /headers パスにアクセスできます。
  4. 結果の検証

    default 名前空間の Pod からリクエストを送信して、トラフィックが Waypoint プロキシを通過することを確認します:

    kubectl exec -n default deploy/test-pod -- curl -sI http://httpbin.org/headers

    HTTP 200 レスポンスが期待されます。

    Waypoint のアクセスログをチェックして、リクエストが記録されたことを確認します:

    kubectl logs -n egress-gateway -l gateway.istio.io/managed=istio.io-mesh-controller --tail=20

    ログには、httpbin.org へのリクエストのレコードとして、ソース名前空間、リクエストパス、およびレスポンスステータスコードが含まれていることが想定されます。

    認可されていない名前空間からリクエストを送信し、アクセスが拒否されることを確認します:

    kubectl exec -n other-ns deploy/test-pod -- curl -sI http://httpbin.org/headers

    RBAC: access denied というレスポンスが返され、AuthorizationPolicy が適用されていることが示されます。


方法 2: EgressPolicy

EgressPolicy を使用して、メッシュから認識されていないすべてのアウトバウンドトラフィックに許可または拒否ルールを適用します。この方法には、バージョン 1.29 以降の ASM インスタンスが必要です。

EgressPolicy の詳細な手順については、「Ztunnel Configuration Instructions」をご参照ください。次のセクションでは、設定例を示します。

設定例

istio-system 名前空間内の ztunnel-config ConfigMap で EgressPolicy を設定します:

kubectl apply -n istio-system -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
  name: ztunnel-config
data:
  ztunnel-config.yaml: |
    egressPolicies:
    # 指定された名前空間の Pod が外部サービスに直接アクセスすることを許可します
    - namespaces:
      - common-infrastructure
      policy: Passthrough

    # すべての名前空間が内部 CIDR ブロックにアクセスするのを防ぎます
    - matchCidrs:
      - 172.16.0.0/16
      - 2001:0db8::/32
      policy: Deny
EOF
重要 EgressPolicy 機能には、バージョン 1.29 以降の ASM インスタンスが必要です。

検証

default 名前空間の Pod から、拒否された CIDR ブロック内の宛先にリクエストを送信します:

kubectl exec -n default deploy/test-pod -- curl -sI --connect-timeout 5 http://172.16.0.1

接続が拒否されるはずです。これは、Deny ポリシーが適用されていることを示します。


方法の組み合わせ

本番環境では、2 つの方法を組み合わせることを推奨します:

  1. API ゲートウェイやサードパーティの決済サービスなど、きめ細かい管理が必要な外部サービスに対して、ServiceEntry と Waypoint を使用してルーティングとアクセス制御を設定します。これにより、可観測性、認可、TLS 終端などの機能が有効になります。

  2. EgressPolicy をグローバルなフォールバックポリシーとして使用し、メッシュ内のサービスが機密性の高い内部 CIDR ブロックにアクセスするのをブロックし、不正なネットワークアクセスを防ぎます。

EgressPolicy は、ServiceEntry で宣言された外部サービスには影響しません。2 つの方法は競合しません。

注意事項

  • EgressPolicy は、メッシュレベルですべてのアウトバウンドトラフィックを傍受することを保証するものではありません。メッシュから明示的に除外された Workload は、これらのポリシーをバイパスできます。多層防御戦略の一環として Kubernetes NetworkPolicy を使用することを推奨します。

  • EgressPolicy のルール順序が一致の優先度を決定します。最初に一致したルールが適用されます。

  • IP アドレスではなくドメイン名に基づいてグローバル制御を実装するには、ServiceEntry メソッドを使用します。EgressPolicy の matchCidrs フィールドは、宛先 IP アドレスにのみ一致します。