このページでは、GKE が LoadBalancer Service 用に作成する上り(内向き)許可 VPC ファイアウォール ルールを無効にする方法について説明します。
LoadBalancer Service に対して自動的に作成されたファイアウォール ルールを無効にすると、次のような状況で役立ちます。
- 2 つ以上の GKE クラスタに複数の LoadBalancer Service がある場合は、ファイアウォール ルールを自分で管理する方が効率的です。たとえば、GKE が LoadBalancer Service ごとに一意のファイアウォール ルールを作成する代わりに、手動で作成したファイアウォール ルールで複数の LoadBalancerService の上り(内向き)トラフィックを許可できます。
- VPC ファイアウォール ルールの代わりに、階層型ファイアウォール ポリシー、グローバル ネットワーク ファイアウォール ポリシー、またはリージョン ネットワーク ファイアウォール ポリシーを使用できます。これらのファイアウォール ポリシーのルールは、追加のアクション、より柔軟なターゲット、位置情報、脅威インテリジェンス、アドレス グループ、FQDN などの機能をサポートしています。
LoadBalancer Service の自動的に作成されたファイアウォール ルールを無効にするには、クラスタの作成時または更新時に --disable-l4-lb-firewall-reconciliation
フラグを指定する必要があります。--disable-l4-lb-firewall-reconciliation
フラグは、ノード間の通信を促進するルールや、サービスのヘルスチェックを許可するルールなど、自動的に作成された他の VPC ファイアウォール ルールには影響しません。
要件
- LoadBalancer Service のユーザー管理ファイアウォール ルールを使用するには、GKE クラスタでバージョン 1.31.3-gke.105600 以降を使用する必要があります。
制限事項
GKE は、次のタイプの LoadBalancer Service のファイアウォール ルールの自動作成を無効にすることをサポートしています。
次のタイプの LoadBalancer Service のファイアウォール ルールの自動作成を無効にすることはできません。
- GKE のサブセット化を使用しない内部 LoadBalancer Service
- ターゲット プールベースの外部 LoadBalancer Service
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
ファイアウォール ルールを手動で管理するための戦略
GKE クラスタで LoadBalancer Service の VPC ファイアウォール ルールの自動作成を無効にする前に、セキュリティ管理者に相談して、ファイアウォール ルールを手動で構成する戦略を立ててください。
使用するファイアウォール ポリシーのタイプ(階層型ファイアウォール ポリシー、グローバル ネットワーク ファイアウォール ポリシー、リージョン ネットワーク ファイアウォール ポリシー)を決定します。ファイアウォール ポリシーを作成する手順については、以下をご覧ください。
ポリシーを使用しない VPC ファイアウォール ルールを使用することもできます。
暗黙の上り(内向き)拒否ファイアウォール ルールによって受信トラフィックが禁止されるため、手動で作成したファイアウォール ルールは上り(内向き)許可ルールである必要があります。VPC ファイアウォール ルールの自動作成を無効にすると、LoadBalancer Service のトラフィックに一致する上り(内向き)許可ファイアウォール ルールを作成しない限り、受信トラフィックはノードに到達しません。
ファイアウォール ルールのパラメータによっては、1 つの上り(内向き)許可ファイアウォール ルールを 1 つ以上の LoadBalancer Service に適用できます。作成する上り(内向き)許可ファイアウォール ルールごとに、次のパラメータを定義します。
target パラメータ: ファイアウォール ルールに、少なくとも LoadBalancer Service を含むクラスタのすべてのノードが含まれていることを確認します。サポートされるターゲットは、ルールが配置されているファイアウォール ポリシーのタイプ、または VPC ファイアウォール ルールを使用しているかどうかによって異なります。ファイアウォール ポリシーのルールの target パラメータについては、ターゲットをご覧ください。
プロトコルとポート: ファイアウォール ルールを適用する必要がある LoadBalancer Service で使用されるすべてのプロトコルと宛先ポートを含めます。
destination パラメータ: destination パラメータには、次のいずれかの方法を使用できます。
- ファイアウォール ルールを適用する必要があるすべての LoadBalancer Service の IP アドレスを destination パラメータに含めます。LoadBalancer Service の IP アドレスを確認するには、次のコマンドを使用します。
kubectl get svc LOADBALANCER_NAME \ -n NAMESPACE_NAME \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}
- destination パラメータは省略できます。destination パラメータが省略されている場合、target パラメータは宛先を暗黙的に定義します。詳細については、上り(内向き)ルールのターゲットと IP アドレスをご覧ください。
source パラメータ: ファイアウォール ルールを適用する必要があるロードバランサ サービスに接続する必要があるクライアントが使用するソース(IP アドレスなど)を指定します。
ファイアウォール ルールを作成する手順については、以下をご覧ください。
手動で作成したファイアウォール ルールが正しく機能していることを確認するには、Network Intelligence Center(NIC)接続テストを実行します。接続テストを実行する場合:
- 宛先を LoadBalancer Service の IP アドレスに設定します。
- ソースをクライアントの IP アドレスに設定します。
詳細については、接続の問題のトラブルシューティングをご覧ください。
LoadBalancer Service の VPC ファイアウォール ルールの作成を無効にする
このセクションでは、LoadBalancer Service の VPC ファイアウォール ルールの自動作成を無効にする手順について説明します。
VPC ファイアウォール ルールの作成が無効になっている新しい GKE クラスタを作成する
新しく作成したクラスタで LoadBalancer Service の自動的に作成された VPC ファイアウォール ルールを無効にするには、
--disable-l4-lb-firewall-reconciliation
フラグを指定してクラスタを作成します。Autopilot:
gcloud container clusters create-auto CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=VERSION
Standard:
gcloud container clusters create CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --enable-l4-ilb-subsetting \ --cluster-version=VERSION
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。VERSION
: GKE のバージョン。
外部または内部の LoadBalancer Service を作成します。
GKE が LoadBalancer Service の上り(内向き)許可ファイアウォール ルールを作成しないことを確認します。(自動的に作成される上り(内向き)許可ファイアウォール ルールの名前は、
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
という形式になります)。次のコマンドは、
k8s2
を含むファイアウォール ルールのリストを返します。gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
externalTrafficPolicy
パラメータがLocal
に設定されている場合、レスポンスはk8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw
という形式のヘルスチェック ファイアウォール ルールのみを返します。spec.healthCheckNodePort
パラメータで定義された TCP ポートを使用します。指定しない場合、Kubernetes コントロール プレーンがノードポートの範囲からヘルスチェック ポートを割り当てます。k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw default INGRESS 1000 tcp:30868 False
externalTrafficPolicy
パラメータがCluster
に設定されている場合は、代わりに次のヘルスチェック ファイアウォール ルールが返されます。k8s2-rkdld6go-l4-shared-hc-fw default INGRESS 1000 tcp:10256 False
GKE Service 用に生成されたファイアウォール ルールの詳細については、自動的に作成されるファイアウォール ルールをご覧ください。
既存の GKE クラスタを更新して VPC ファイアウォール ルールの作成を無効にする
VPC ファイアウォール ルールの作成を無効にする前に、既存のクラスタの更新に関する次の点に注意してください。
- VPC ファイアウォール ルールの作成を無効にするように既存のクラスタを更新すると、GKE が LoadBalancer Service 用に自動的に作成した既存のファイアウォール ルールは削除されません。
- GKE は既存のルールの更新を停止し、新しい LoadBalancer Service 用の新しいルールを作成しません。
- VPC ファイアウォール ルールの作成を再度有効にするには、
gcloud_name container clusters update
コマンドで--enable-l4-lb-firewall-reconciliation
フラグを使用します。
既存のクラスタでファイアウォール ルールの自動作成を無効にするには:
LoadBalancer Service 用のファイアウォール ルールの自動作成と管理を無効にするようにクラスタを更新します。
gcloud container clusters update CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=supported_version
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。VERSION
: GKE のバージョン。
外部または内部の LoadBalancer Service を作成します。
GKE が LoadBalancer Service の上り(内向き)許可ファイアウォール ルールを作成しないことを確認します。(自動的に作成される上り(内向き)許可ファイアウォール ルールの名前は、
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
という形式になります)。次のコマンドは、
k8s2
を含むファイアウォール ルールのリストを返します。gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
externalTrafficPolicy
パラメータがLocal
に設定されている場合、レスポンスはk8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw
という形式のヘルスチェック ファイアウォール ルールのみを返します。spec.healthCheckNodePort
パラメータで定義された TCP ポートを使用します。指定しない場合、Kubernetes コントロール プレーンがノードポートの範囲からヘルスチェック ポートを割り当てます。k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw default INGRESS 1000 tcp:30868 False
externalTrafficPolicy
パラメータがCluster
に設定されている場合は、代わりに次のヘルスチェック ファイアウォール ルールが返されます。k8s2-rkdld6go-l4-shared-hc-fw default INGRESS 1000 tcp:10256 False
GKE Service 用に生成されたファイアウォール ルールの詳細については、自動的に作成されるファイアウォール ルールをご覧ください。
接続に関する問題のトラブルシューティング
次の例は、Network Intelligence Center の接続テストを使用して、外部 LoadBalancer Service への接続をテストする方法を示しています。
Network Intelligence Center:
- Trusted Cloud コンソールで、Network Intelligence Center に移動して新しい接続テストを開始します。
- プルダウン メニューで、ソースとして [Any external public IP address] を選択し、宛先からロードバランサを選択します。
- 接続テストを再実行します。
gcloud CLI:
次のコマンド例では、ローカル ワークステーションのパブリック IP アドレスをソースとし、外部ロードバランサの外部 IP アドレスを宛先としてテストを作成して実行します。
gcloud network-management connectivity-tests create TEST_NAME \ --source-ip-address=SOURCE_IP_ADDRESS \ --source-network-type=NON_GCP_NETWORK \ --destination-ip-address=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.status.loadBalancer.ingress[0].ip}') \ --destination-port=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.spec.ports[0].targetPort}') \ --destination-network=projects/PROJECT_ID/global/networks/NETWORK_NAME
次のように置き換えます。
TEST_NAME
: 接続テストの名前。SOURCE_IP_ADDRESS
: 外部 LoadBalancer Service に接続する必要があるシステムの IP アドレス。次に例を示します。LOADBALANCER_NAME
: 外部 LoadBalancer Service の名前。PROJECT_ID
: クラスタの VPC ネットワークを含むプロジェクトのプロジェクト ID。クラスタが共有 VPC ネットワークを使用している場合は、ホスト プロジェクトのプロジェクト ID を使用します。NETWORK_NAME
: クラスタの VPC ネットワークの名前。
テスト結果を確認します。
gcloud network-management connectivity-tests describe TEST_NAME
次のステップ
- ファイアウォール ポリシーの詳細を確認する。
- GKE がデフォルトで自動的に作成する上り(内向き)許可 VPC ファイアウォール ルールの概要については、自動的に作成されるファイアウォール ルールをご覧ください。
- LoadBalancer Service のパラメータの説明については、LoadBalancer Service のパラメータをご覧ください。
- Trusted Cloudのその他の事前入力されるファイアウォール ルールについて学習する。
- 共有 VPC を使用するプロジェクトにファイアウォール ルールを作成する方法について学習する。