このページでは、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
フラグは、ノード間の通信を容易にするルールや、Service のヘルスチェックを許可するルールなど、自動作成される他の 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 に適用できます。作成する上り(内向き)許可ファイアウォール ルールごとに、次のパラメータを定義します。
ターゲット パラメータ: ファイアウォール ルールに、少なくとも LoadBalancer Service を含むクラスタのすべてのノードが含まれていることを確認します。サポートされるターゲットは、ルールが配置されているファイアウォール ポリシーのタイプ、または VPC ファイアウォール ルールを使用しているかどうかによって異なります。ファイアウォール ポリシーのルールのターゲット パラメータについては、ターゲットをご覧ください。
プロトコルとポート: ファイアウォール ルールを適用する必要がある LoadBalancer Service で使用されるすべてのプロトコルと宛先ポートを含めます。
宛先パラメータ: 宛先パラメータには、次のいずれかの方法を使用できます。
- ファイアウォール ルールを適用する必要があるすべての LoadBalancer Service の IP アドレスを destination パラメータに含めます。LoadBalancer Service の IP アドレスを確認するには、次のコマンドを使用します。
kubectl get svc LOADBALANCER_NAME \ -n NAMESPACE_NAME \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}
- リンク先パラメータを省略することもできます。destination パラメータを省略すると、target パラメータによって宛先が暗黙的に定義されます。詳細については、上り(内向き)ルールのターゲットと IP アドレスをご覧ください。
ソース パラメータ: ファイアウォール ルールを適用する必要があるロードバランサ サービスに接続する必要があるクライアントが使用する送信元(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
フラグを使用してクラスタを作成します。gcloud
Autopilot:
gcloud container clusters create-auto CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=VERSION
標準:
gcloud container clusters create CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --enable-l4-ilb-subsetting \ --cluster-version=VERSION
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。VERSION
: GKE バージョン。
Terraform
Terraform を使用して VPC ファイアウォール ルールの作成を無効にしてクラスタを作成するには、次の例を参照してください。
resource "google_container_cluster" "primary" { provider = google-beta name = CLUSTER_NAME location = ZONE enable-l4-ilb-subsetting = true disable_l4_lb_firewall_reconciliation = true }
外部または内部 LoadBalancer Service を作成します。
GKE が LoadBalancer Service の上り(内向き)許可ファイアウォール ルールを作成していないことを確認します。(自動作成された上り(内向き)許可ファイアウォール ルールの名前は
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
という形式です)。次のコマンドは何も返しません。
gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
既存の 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]
という形式です)。次のコマンドは何も返しません。
gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
接続に関する問題のトラブルシューティング
次の例は、Network Intelligence Center 接続テストを使用して、外部 LoadBalancer Service:cluster への接続をテストする方法を示しています。
Network Intelligence Center:
- Google Cloud コンソールで、Network Intelligence Center に移動し、新しい接続テストを開始します。
- プルダウン メニューで、ソースとして [任意の外部パブリック IP アドレス] を選択し、宛先からロードバランサを選択します。
- 接続テストを再実行します。
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 のパラメータをご覧ください。
- Google Cloudのその他の事前入力されるファイアウォール ルールについて学習する。
- 共有 VPC を使用するプロジェクトにファイアウォール ルールを作成する方法について学習する。