このページでは、Google Kubernetes Engine(GKE)Autopilot モードで作成されたクラスタが、Egress NAT ポリシーで IP マスカレードを実行するように構成する方法について説明します。
GKE Standard モードでの IP マスカレードの詳細については、IP マスカレード エージェントを構成するをご覧ください。
概要
GKE Egress NAT ポリシーを使用すると、Autopilot クラスタの IP マスカレードの動作を構成できます。
GKE は、自動的に生成された次の 2 つの Egress NAT ポリシーをサポートします。
- GKE 管理のポリシー。固定のもので、編集できません。
- デフォルト ポリシー。編集可能です。
このページでは、デフォルト ポリシーを編集するか Egress NAT ポリシーを作成して、Egress NAT ポリシーを編集してデプロイする方法について説明します。また、作成された Egress NAT ポリシーを削除する方法についても説明します。
Egress NAT ポリシーの動作の詳細については、Autopilot クラスタのトラフィック マスカレードの動作をご覧ください。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
バージョン 1.23.4-gke.1600 以降または 1.22.7-gke.1500 以降を実行している Autopilot クラスタがあることを確認します。クラスタで GKE Dataplane V2 が有効になっている必要があります。
クラスタでワークロードが実行されていることを確認します。詳細については、リソースをリクエストする方法をご覧ください。
Egress NAT ポリシーのステータスを確認する
クラスタで Egress NAT ポリシーのカスタム リソース定義(CRD)が実行されているかどうかを確認するには、Google Cloud CLI ツールを使用します。
クラスタの認証情報を取得します。
gcloud container clusters get-credentials CLUSTER-NAME
CLUSTER_NAME
はクラスタの名前で置き換えます。Egress NAT ポリシーが実行されているかどうかを確認します。
kubectl get crds egressnatpolicies.networking.gke.io
Egress NAT ポリシーが実行されている場合、出力は次のようになります。
NAME CREATED AT egressnatpolicies.networking.gke.io 2022-03-16T21:05:43Z
作成された Egress NAT ポリシーのリストを取得します。
kubectl get egressnatpolicies
出力は次のようになります。
NAME AGE default 44h gke-bbfa6c0e-1 44h
既存のデフォルト ポリシーを編集する
GKE は、デフォルト ポリシーと GKE 管理のポリシーという 2 つの自動生成された NAT ポリシーをサポートしています。デフォルト ポリシーは編集可能で、マスカレードのないデフォルトの宛先が構成されています。
既存のデフォルト ポリシーを編集するには、次の操作を行います。
クラスタの認証情報を取得します。
gcloud container clusters get-credentials CLUSTER_NAME
CLUSTER_NAME
は、使用するクラスタの名前に置き換えます。デフォルトの Egress NAT ポリシーを編集します。
kubectl edit egressnatpolicies default
NoSNAT アクションの
cidr
属性に CIDR 形式で宛先を追加します(または削除します)。apiVersion: networking.gke.io/v1 kind: EgressNATPolicy metadata: name: default spec: action: NoSNAT destinations: - cidr: 10.0.0.0/8 - cidr: 172.16.0.0/12 - cidr: 192.168.0.0/16 - cidr: 240.0.0.0/4 - cidr: 192.0.2.0/24 - cidr: 198.51.100.0/24 - cidr: 203.0.113.0/24 - cidr: 100.64.0.0/10 - cidr: 198.18.0.0/15 - cidr: 192.0.0.0/24 - cidr: 192.88.99.0/24
これらの宛先にパケットが送信されると、クラスタで IP アドレスの送信元がマスカレードされず、送信元 Pod の IP アドレスが保持されます。
Kubernetes イベントを確認して、編集したデフォルト ポリシーがデプロイされていることを確認します。
kubectl get events
出力は次のようになります。
LAST SEEN TYPE REASON OBJECT MESSAGE 13s Normal EnsuringPolicy egressnatpolicy/default Ensuring IP masquerade config for policy "default"
変更が適用されるまでには、最大で 3 分ほどかかる場合があります。
新しい Egress NAT ポリシーをデプロイする
NoSNAT アクションに新しい宛先を追加するには、次のいずれかの方法を使用します。
- 既存のデフォルト ポリシーを編集する。
- 新しい Egress NAT ポリシーを作成する。
デフォルト ポリシーに含まれない新しい Egress NAT ポリシーを作成するには、次の操作を行います。
次のマニフェストを
egress_nat_policy.yaml
として保存します。kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: POLICY_NAME spec: action: NoSNAT destinations: - cidr: CIDR_1 - cidr: CIDR_2
次のように置き換えます。
POLICY_NAME
: 新しいポリシーの名前。CIDR_1
、CIDR_2
: CIDR 形式の IP アドレス範囲。これらの宛先にパケットが送信されると、クラスタで IP アドレスの送信元がマスカレードされず、送信元 Pod の IP アドレスが保持されます。3 つ以上の CIDR が必要な場合は、destinations
リストに同じ形式でエントリを追加します。
新しいポリシーをデプロイします。
kubectl create -f egress_nat_policy.yaml
Kubernetes イベントを確認して、ポリシーがデプロイされていることを確認します。
kubectl get events
出力は次のようになります。
LAST SEEN TYPE REASON OBJECT MESSAGE 13s Normal EnsuringPolicy egressnatpolicy/mypolicy Ensuring IP masquerade config for policy "mypolicy"
Egress NAT ポリシーを削除する
Egress NAT ポリシーを完全に削除するには、次のコマンドを実行します。
kubectl delete egressnatpolicies POLICY_NAME
POLICY_NAME
は、削除するポリシーの名前に置き換えます。