マルチネットワーク ネットワーク ポリシーを設定する


このページでは、指定された Pod ネットワークにのみ適用されるマルチネットワーク ネットワーク ポリシーを構成して、Pod レベルで Pod と Service 間のトラフィック フローを制御する方法について説明します。

クラスタ管理者として、Pod レベルのファイアウォール ルールを使用して Pod と Service 間のトラフィック フローを制御するマルチネットワーク ネットワーク ポリシーを構成できます。クラスタ内のネットワーク セキュリティとトラフィック制御を強化できます。

マルチネットワーク ネットワーク ポリシーの仕組みについては、Pod ネットワークでのネットワーク ポリシーの仕組みをご覧ください。

要件

マルチネットワーク ネットワーク ポリシーを使用するには、次の要件を考慮してください。

  • Google Cloud CLI バージョン 459 以降が必要です。
  • 次のいずれかのバージョンを実行している GKE クラスタが必要です。
    • 1.28.5-gke.1293000 以降
    • 1.29.0-gke.1484000 以降
  • クラスタで GKE Dataplane V2 を使用する必要があります。

制限事項

FQDN ネットワーク ポリシーと CiliumClusterWide ネットワーク ポリシーはサポートされていません。複数のネットワークに接続されている Pod で FQDN ネットワーク ポリシーと CiliumClusterWide ネットワーク ポリシーを使用する場合、ポリシーはポリシーが適用される接続だけでなく、Pod のすべての接続に影響します。

料金

GKE マルチネットワーク ネットワーク ポリシー機能はプレビューであり、GKE Enterprise が有効になっているプロジェクト内のクラスタでのみサポートされます。Google Kubernetes Engine(GKE)Enterprise エディションの有効化に適用される料金については、GKE Enterprise の料金をご覧ください。

マルチネットワーク ネットワーク ポリシーを構成する

マルチネットワーク ネットワーク ポリシーを使用する手順は次のとおりです。

  1. マルチネットワーク対応の GKE を使用してクラスタを作成します。
  2. ノードプールPod ネットワークを作成します。
  3. Pod ネットワークを参照します
  4. ワークロードで使用される同じ Pod ネットワークを参照するネットワーク ポリシーを作成して適用します。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

ネットワーク ポリシーを作成する

  1. ワークロードと同じ Pod ネットワークにルールを適用するネットワーク ポリシーを作成するには、ネットワーク ポリシー定義で特定の Pod ネットワークを参照します。

  2. 選択した上り(内向き)トラフィック ルールと、ラベルやその他のセレクタに基づくターゲット Pod を定義するには、標準のネットワーク ポリシーを作成します。

    次のサンプル マニフェストを sample-ingress-network-policy1.yaml として保存します。

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: sample-network-policy
      namespace: default
      annotations:
        networking.gke.io/network: blue-pod-network  # GKE-specific annotation for network selection
    spec:
      podSelector:
        matchLabels:
          app: test-app-2  # Selects pods with the label "app: test-app-2"
      policyTypes:
      - Ingress  # Specifies the policy applies only to incoming traffic
      ingress:
      - from:  # Allow incoming traffic only from...
        - podSelector:
            matchLabels:
              app: test-app-1  # ...pods with the label "app: test-app-1"
    
  3. sample-ingress-network-policy1.yaml マニフェストを適用します。

    kubectl apply -f sample-ingress-network-policy1.yaml
    
  4. ラベルやその他のセレクタに基づいて選択した下り(外向き)トラフィック ルールとターゲット Pod を定義するには、標準のネットワーク ポリシーを作成します。

    次のサンプル マニフェストを sample-egress-network-policy2.yaml として保存します。

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: sample-network-policy-2
      namespace: default
      annotations:
        networking.gke.io/network: blue-pod-network  # GKE-specific annotation (optional)
    spec:
      podSelector:
        matchLabels:
          app: test-app-2
      policyTypes:
        - Egress  # Only applies to outgoing traffic
      egress:
        - to:
            - podSelector:
                matchLabels:
                  app: test-app-3
    
  5. sample-egress-network-policy2.yaml マニフェストを適用します。

    kubectl apply -f sample-egress-network-policy2.yaml
    

マルチネットワーク ネットワーク ポリシーのトラブルシューティング

ネットワーク ポリシーに問題がある場合(特定の Pod ネットワークに適用されているかどうかを問わず)は、次のコマンドを実行して問題を診断し、トラブルシューティングを行うことができます。

  1. kubectl get networkpolicy: すべてのネットワーク ポリシー オブジェクトとそれらに関する情報を一覧表示します。
  2. iptables-save: 特定ノードのすべての IP アドレス テーブル チェーンを取得して一覧表示します。このコマンドは、ノードで root として実行する必要があります。
  3. cilium bpf policy get <endpoint-id>: 各エンドポイントのポリシーマップから許可された IP アドレスを取得して一覧表示します。
  4. cilium policy selectors: ID と、それらを選択した関連ポリシーを出力します。
  5. cilium identity list: ID から IP アドレスへのマッピングを示します。

次のステップ