GKE LoadBalancer Service のユーザー管理ファイアウォール ルール


このページでは、GKE が LoadBalancer Service 用に作成する上り(内向き)許可の VPC ファイアウォール ルールを無効にする方法について説明します。

LoadBalancer Service の自動作成されたファイアウォール ルールを無効にすると、次のような場合に役立ちます。

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 ファイアウォール ルールの自動作成を無効にする前に、セキュリティ管理者と連携して、ファイアウォール ルールを手動で構成するための戦略を策定します。

  1. 使用するファイアウォール ポリシーのタイプ(階層型ファイアウォール ポリシー、グローバル ネットワーク ファイアウォール ポリシー、リージョン ネットワーク ファイアウォール ポリシー)を決定します。ファイアウォール ポリシーを作成する手順については、以下をご覧ください。

    ポリシーを使用しない VPC ファイアウォール ルールを使用することもできます。

  2. 暗黙の上り(内向き)拒否ファイアウォール ルールは受信トラフィックを禁止するため、手動で作成するファイアウォール ルールは上り(内向き)許可ルールにする必要があります。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}
      
    • ソース パラメータ: ファイアウォール ルールを適用する必要があるロードバランサ サービスに接続する必要があるクライアントが使用する送信元(IP アドレスなど)を指定します。

    ファイアウォール ルールを作成する手順については、以下をご覧ください。

  3. 手動で作成したファイアウォール ルールが正しく機能していることを確認するには、Network Intelligence Center(NIC)接続テストを実行します。接続テストを実行する際は、次の点に注意してください。

    • 宛先を LoadBalancer Service の IP アドレスに設定します。
    • 送信元をクライアントの IP アドレスに設定します。

    詳細については、接続の問題のトラブルシューティングをご覧ください。

LoadBalancer Service の VPC ファイアウォール ルールの作成を無効にする

このセクションでは、LoadBalancer Service の VPC ファイアウォール ルールの自動作成を無効にする手順について説明します。

VPC ファイアウォール ルールの作成を無効にして新しい GKE クラスタを作成する

  1. 新しく作成されたクラスタで 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
    }
    
  2. 外部または内部 LoadBalancer Service を作成します。

  3. 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 フラグを使用します。

既存のクラスタでファイアウォール ルールの自動作成を無効にするには:

  1. クラスタを更新して、LoadBalancer Service のファイアウォール ルールの自動作成と管理を無効にします。

    gcloud container clusters update CLUSTER_NAME \
    --disable-l4-lb-firewall-reconciliation \
    --cluster-version=supported_version
    

    次のように置き換えます。

    • CLUSTER_NAME: 新しいクラスタの名前。
    • VERSION: GKE バージョン。
  2. 外部または内部 LoadBalancer Service を作成します。

  3. 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:

    1. Google Cloud コンソールで、Network Intelligence Center に移動し、新しい接続テストを開始します。
    2. プルダウン メニューで、ソースとして [任意の外部パブリック IP アドレス] を選択し、宛先からロードバランサを選択します。
    3. 接続テストを再実行します。
  • 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
    

次のステップ