このページでは、指定された Pod ネットワークにのみ適用されるマルチネットワークのネットワーク ポリシーを構成して、クラスタ内のネットワーク セキュリティとトラフィック制御を強化する方法について説明します。これらのマルチネットワーク ネットワーク ポリシーは、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 を使用してクラスタを作成します。
- ノードプールと Pod ネットワークを作成します。
- Pod ネットワークを参照します。
- ワークロードで使用される同じ Pod ネットワークを参照するネットワーク ポリシーを作成して適用します。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
ネットワーク ポリシーを作成する
ワークロードと同じ Pod ネットワークにルールを適用するネットワーク ポリシーを作成するには、ネットワーク ポリシー定義で特定の Pod ネットワークを参照します。
選択した上り(内向き)トラフィック ルールと、ラベルやその他のセレクタに基づくターゲット 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"
sample-ingress-network-policy1.yaml
マニフェストを適用します。kubectl apply -f sample-ingress-network-policy1.yaml
ラベルやその他のセレクタに基づいて選択した下り(外向き)トラフィック ルールとターゲット 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
sample-egress-network-policy2.yaml
マニフェストを適用します。kubectl apply -f sample-egress-network-policy2.yaml
マルチネットワーク ネットワーク ポリシーのトラブルシューティング
ネットワーク ポリシーに問題がある場合(特定の Pod ネットワークに適用されているかどうかを問わず)は、次のコマンドを実行して問題を診断し、トラブルシューティングを行うことができます。
kubectl get networkpolicy
: すべてのネットワーク ポリシー オブジェクトとそれらに関する情報を一覧表示します。iptables-save
: 特定ノードのすべての IP アドレス テーブル チェーンを取得して一覧表示します。このコマンドは、ノードで root として実行する必要があります。cilium bpf policy get <endpoint-id>
: 各エンドポイントのポリシーマップから許可された IP アドレスを取得して一覧表示します。cilium policy selectors
: ID と、それらを選択した関連ポリシーを出力します。cilium identity list
: ID から IP アドレスへのマッピングを示します。