Nutzerverwaltete Firewallregeln für GKE-LoadBalancer-Dienste


Auf dieser Seite wird beschrieben, wie Sie die VPC-Firewallregeln für eingehenden Traffic deaktivieren, die GKE für LoadBalancer-Dienste erstellt.

Das Deaktivieren dieser automatisch erstellten Firewallregeln für LoadBalancer-Dienste kann in den folgenden Situationen nützlich sein:

Wenn Sie automatisch erstellte Firewallregeln für LoadBalancer-Dienste deaktivieren möchten, müssen Sie beim Erstellen oder Aktualisieren eines Clusters das Flag --disable-l4-lb-firewall-reconciliation angeben. Das Flag --disable-l4-lb-firewall-reconciliation wirkt sich nicht auf andere automatisch erstellte VPC-Firewallregeln aus, z. B. auf Regeln, die die Kommunikation zwischen Knoten ermöglichen oder Systemdiagnosen für Ihre Dienste zulassen.

Voraussetzungen

  • Wenn Sie von Nutzern verwaltete Firewallregeln für LoadBalancer-Dienste verwenden möchten, müssen Ihre GKE-Cluster die Version 1.31.3-gke.105600 oder höher verwenden.

Beschränkungen

In GKE kann das automatische Erstellen von Firewallregeln für die folgenden Arten von LoadBalancer-Diensten deaktiviert werden:

Das automatische Erstellen von Firewallregeln für die folgenden Arten von LoadBalancer-Diensten kann nicht deaktiviert werden:

  • Interne LoadBalancer-Dienste, die keine GKE-Teilmengeneinstellung verwenden
  • Zielpoolbasierte externe LoadBalancer-Dienste

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit gcloud components update ab.

Strategien für die manuelle Verwaltung von Firewallregeln

Bevor Sie das automatische Erstellen von VPC-Firewallregeln für LoadBalancer-Dienste in Ihrem GKE-Cluster deaktivieren, sollten Sie mit einem Sicherheitsadministrator eine Strategie für die manuelle Konfiguration von Firewallregeln entwickeln.

  1. Entscheiden Sie, welchen Typ von Firewallrichtlinie Sie verwenden möchten: eine hierarchische Firewallrichtlinie, eine globale Netzwerk-Firewallrichtlinie oder eine regionale Netzwerk-Firewallrichtlinie. Eine Anleitung zum Erstellen einer Firewallrichtlinie finden Sie hier:

    Sie können auch VPC-Firewallregeln verwenden, für die keine Richtlinie erforderlich ist.

  2. Ihre manuell erstellten Firewallregeln müssen Regeln zum Zulassen von eingehendem Traffic sein, da die implizierte Firewallregel zum Ablehnen von eingehendem Traffic eingehenden Traffic verhindert. Wenn Sie das automatische Erstellen von VPC-Firewallregeln deaktiviert haben, erreicht eingehender Traffic Ihre Knoten nur, wenn Sie Firewallregeln zum Zulassen von eingehendem Traffic erstellt haben, die mit dem Traffic für Ihre LoadBalancer-Dienste übereinstimmen.

    Abhängig von den Parametern der Firewallregel kann eine einzelne Firewallregel zum Zulassen von eingehendem Traffic auf einen oder mehrere Load Balancer-Dienste angewendet werden. Legen Sie für jede Firewallregel zum Zulassen von eingehendem Traffic die folgenden Parameter fest:

    • Zielparameter: Die Firewallregel muss mindestens alle Knoten des Clusters enthalten, der die LoadBalancer-Dienste enthält. Unterstützte Ziele hängen davon ab, in welcher Art von Firewallrichtlinie sich eine Regel befindet oder ob Sie eine VPC-Firewallregel verwenden. Informationen zum Zielparameter einer Regel in einer Firewallrichtlinie finden Sie unter Ziele.

    • Protokolle und Ports: Geben Sie alle Protokolle und Zielports an, die von den LoadBalancer-Diensten verwendet werden, auf die die Firewallregel angewendet werden muss.

    • Zielparameter: Sie können eine der folgenden Strategien für den Zielparameter verwenden:

      • Fügen Sie die IP-Adressen aller LoadBalancer-Dienste, auf die die Firewallregel angewendet werden soll, in den Zielparameter ein. Verwenden Sie den folgenden Befehl, um die IP-Adresse eines LoadBalancer-Dienstes zu ermitteln:
         kubectl get svc LOADBALANCER_NAME \
            -n NAMESPACE_NAME \
            -o jsonpath='{.status.loadBalancer.ingress[0].ip}
      
    • Quellparameter: Geben Sie die Quellen (z. B. IP-Adressen) an, die von Clients verwendet werden, die eine Verbindung zu den Load Balancer-Diensten herstellen müssen, auf die die Firewallregel angewendet werden soll.

    Eine Anleitung zum Erstellen von Firewallregeln finden Sie hier:

  3. Damit Ihre manuell erstellten Firewallregeln ordnungsgemäß funktionieren, führen Sie einen Verbindungstest im Network Intelligence Center (NIC) aus. Beim Ausführen des Konnektivitätstests gilt Folgendes:

    • Legen Sie das Ziel auf die IP-Adresse des LoadBalancer-Dienstes fest.
    • Legen Sie die Quelle auf die IP-Adresse des Clients fest.

    Weitere Informationen finden Sie unter Verbindungsprobleme beheben.

Erstellung von VPC-Firewallregeln für Ihre LoadBalancer-Dienste deaktivieren

In diesem Abschnitt wird beschrieben, wie Sie das automatische Erstellen von VPC-Firewallregeln für LoadBalancer-Dienste deaktivieren.

Neuen GKE-Cluster erstellen, bei dem das Erstellen von VPC-Firewallregeln deaktiviert ist

  1. Wenn Sie die automatisch erstellten VPC-Firewallregeln für LoadBalancer-Dienste in einem neu erstellten Cluster deaktivieren möchten, erstellen Sie den Cluster mit dem Flag --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
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME ist der Name des neuen Clusters.
    • VERSION: die GKE-Version.
  2. Erstellen Sie einen externen oder internen LoadBalancer-Dienst:

  3. Prüfen Sie, ob GKE keine Firewallregel zum Zulassen von eingehendem Traffic für den LoadBalancer-Dienst erstellt. Automatisch erstellte Firewallregeln zum Zulassen von eingehendem Traffic haben Namen im folgenden Format: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].

    Mit dem folgenden Befehl wird eine Liste von Firewallregeln zurückgegeben, die k8s2 enthalten:

    gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
    

    In der Antwort sollte nur die Firewallregel für die Systemdiagnose im Format k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw zurückgegeben werden, wenn der Parameter externalTrafficPolicy auf Local festgelegt ist. Dabei wird der TCP-Port verwendet, der durch den Parameter spec.healthCheckNodePort definiert ist. Wenn nicht angegeben, weist die Kubernetes-Steuerungsebene einen Systemdiagnoseport aus dem Knotenportbereich zu.

    k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw  default  INGRESS  1000  tcp:30868  False
    

    Wenn der Parameter externalTrafficPolicy auf Cluster gesetzt ist, wird stattdessen die folgende Firewallregel für die Systemdiagnose zurückgegeben.

    k8s2-rkdld6go-l4-shared-hc-fw  default  INGRESS  1000  tcp:10256  False
    

    Weitere Informationen zu generierten Firewallregeln für GKE-Dienste finden Sie unter Automatisch erstellte Firewallregeln.

Vorhandenen GKE-Cluster aktualisieren, um das Erstellen von VPC-Firewallregeln zu deaktivieren

Beachten Sie vor dem Deaktivieren der Erstellung von VPC-Firewallregeln die folgenden Punkte zum Aktualisieren eines vorhandenen Clusters:

  • Wenn Sie einen vorhandenen Cluster aktualisieren, um das Erstellen von VPC-Firewallregeln zu deaktivieren, löscht GKE keine vorhandenen Firewallregeln, die automatisch für Ihre LoadBalancer-Dienste erstellt wurden.
  • GKE aktualisiert die vorhandenen Regeln nicht mehr und erstellt keine neuen Regeln für die neuen LoadBalancer-Dienste.
  • Wenn Sie das Erstellen von VPC-Firewallregeln wieder aktivieren möchten, können Sie das Flag --enable-l4-lb-firewall-reconciliation mit dem Befehl gcloud_name container clusters update verwenden.

So deaktivieren Sie die automatische Erstellung von Firewallregeln für einen vorhandenen Cluster:

  1. Aktualisieren Sie den Cluster, um das automatische Erstellen und Verwalten von Firewallregeln für LoadBalancer-Dienste zu deaktivieren:

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

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME ist der Name des neuen Clusters.
    • VERSION: die GKE-Version.
  2. Erstellen Sie einen externen oder internen LoadBalancer-Dienst:

  3. Prüfen Sie, ob GKE keine Firewallregel zum Zulassen von eingehendem Traffic für den LoadBalancer-Dienst erstellt. Automatisch erstellte Firewallregeln zum Zulassen von eingehendem Traffic haben Namen im folgenden Format: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].

    Mit dem folgenden Befehl wird eine Liste von Firewallregeln zurückgegeben, die k8s2 enthalten:

    gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
    

    In der Antwort sollte nur die Firewallregel für die Systemdiagnose im Format k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw zurückgegeben werden, wenn der Parameter externalTrafficPolicy auf Local festgelegt ist. Dabei wird der TCP-Port verwendet, der durch den Parameter spec.healthCheckNodePort definiert ist. Wenn nicht angegeben, weist die Kubernetes-Steuerungsebene einen Systemdiagnoseport aus dem Knotenportbereich zu.

    k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw  default  INGRESS  1000  tcp:30868  False
    

    Wenn der Parameter externalTrafficPolicy auf Cluster gesetzt ist, wird stattdessen die folgende Firewallregel für die Systemdiagnose zurückgegeben.

    k8s2-rkdld6go-l4-shared-hc-fw  default  INGRESS  1000  tcp:10256  False
    

    Weitere Informationen zu generierten Firewallregeln für GKE-Dienste finden Sie unter Automatisch erstellte Firewallregeln.

Verbindungsprobleme beheben

Die folgenden Beispiele veranschaulichen, wie Sie mit Network Intelligence Center-Konnektivitätstests die Verbindung zu einem externen LoadBalancer-Dienst testen:

  • Network Intelligence Center:

    1. Rufen Sie in der Trusted Cloud Console das Network Intelligence Center auf und starten Sie einen neuen Konnektivitätstest.
    2. Wählen Sie im Drop-down-Menü Beliebige externe öffentliche IP-Adresse als Quelle und Ihren Load Balancer als Ziel aus.
    3. Führen Sie den Konnektivitätstest noch einmal aus.
  • Die gcloud CLI-Befehlszeile:

    Mit dem folgenden Beispielbefehl wird ein Test mit der öffentlichen IP-Adresse Ihrer lokalen Workstation als Quelle und der externen IP-Adresse des externen Load-Balancers als Ziel erstellt und ausgeführt:

    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
    

    Ersetzen Sie Folgendes:

    • TEST_NAME: Ein Name für den Konnektivitätstest.
    • SOURCE_IP_ADDRESS: Die IP-Adresse des Systems, das eine Verbindung zum externen LoadBalancer-Dienst herstellen muss. Beispiel:
    • LOADBALANCER_NAME: Der Name des externen LoadBalancer-Dienstes.
    • PROJECT_ID: Die Projekt-ID des Projekts, das das VPC-Netzwerk des Clusters enthält. Wenn Ihr Cluster ein freigegebene VPC-Netzwerk verwendet, verwenden Sie die Projekt-ID des Hostprojekts.
    • NETWORK_NAME: Der Name des VPC-Netzwerks Ihres Clusters.

    Testergebnisse prüfen:

    gcloud network-management connectivity-tests describe TEST_NAME
    

Nächste Schritte