Regole firewall gestite dall'utente per i servizi LoadBalancer di GKE


Questa pagina descrive come disattivare le regole firewall VPC per l'autorizzazione in entrata create da GKE per i servizi LoadBalancer.

La disattivazione di queste regole firewall create automaticamente per i servizi LoadBalancer può essere utile nelle seguenti situazioni:

Per disattivare le regole firewall create automaticamente per i servizi LoadBalancer, devi specificare il flag --disable-l4-lb-firewall-reconciliation quando crei o aggiorni un cluster. Il flag --disable-l4-lb-firewall-reconciliation non influisce su altre regole firewall VPC create automaticamente, ad esempio quelle che facilitano la comunicazione tra i nodi o quelle che consentono i controlli di integrità per i tuoi servizi.

Requisiti

  • Per utilizzare le regole firewall gestite dall'utente per i servizi LoadBalancer, i cluster GKE devono utilizzare la versione 1.31.3-gke.105600 o successiva.

Limitazioni

GKE supporta la disattivazione della creazione automatica delle regole firewall per questi tipi di servizi LoadBalancer:

Non puoi disattivare la creazione automatica delle regole firewall per questi tipi di servizi LoadBalancer:

  • Servizi LoadBalancer interni che non utilizzano il sottoinsieme GKE
  • Servizi LoadBalancer esterni basati su pool di destinazione

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.

Strategie per la gestione manuale delle regole firewall

Prima di disattivare la creazione automatica delle regole firewall VPC per i servizi LoadBalancer nel tuo cluster GKE, collabora con un amministratore della sicurezza per sviluppare una strategia per configurare manualmente le regole firewall.

  1. Decidi quale tipo di criterio firewall utilizzare: un criterio firewall gerarchico, un criterio firewall di rete globale o un criterio firewall di rete regionale. Per la procedura per creare un criterio firewall, consulta:

    Puoi anche utilizzare le regole firewall VPC, che non utilizzano alcun criterio.

  2. Le regole firewall create manualmente devono essere regole di autorizzazione in entrata perché la regola firewall di negazione implicita in entrata vieta il traffico in entrata. Se hai disattivato la creazione automatica delle regole firewall VPC, il traffico in entrata non raggiungerà i tuoi nodi, a meno che tu non abbia creato regole firewall di autorizzazione in entrata che corrispondano al traffico per i tuoi servizi LoadBalancer.

    A seconda dei parametri della regola firewall, una singola regola firewall di autorizzazione in entrata può essere applicata a uno o più servizi LoadBalancer. Per ogni regola firewall di autorizzazione in entrata che crei, definisci i seguenti parametri:

    • Parametro Target: assicurati che la regola del firewall includa almeno tutti i nodi del cluster che contengono i servizi LoadBalancer. I target supportati dipendono dal tipo di criterio firewall in cui si trova una regola o se utilizzi una regola firewall VPC. Per informazioni sul parametro target di una regola in un criterio firewall, consulta Target.

    • Protocolli e porte: includi tutti i protocolli e le porte di destinazione utilizzati dai servizi LoadBalancer a cui deve essere applicata la regola firewall.

    • Parametro destinazione: puoi utilizzare una delle seguenti strategie per il parametro destinazione:

      • Includi gli indirizzi IP di tutti i servizi LoadBalancer a cui deve essere applicata la regola del firewall nel parametro di destinazione. Per trovare l'indirizzo IP di un servizio LoadBalancer, utilizza il seguente comando:
         kubectl get svc LOADBALANCER_NAME \
            -n NAMESPACE_NAME \
            -o jsonpath='{.status.loadBalancer.ingress[0].ip}
      
    • Parametro di origine: specifica le origini (ad esempio gli indirizzi IP) utilizzate dai client che devono connettersi ai servizi di bilanciamento del carico a cui deve essere applicata la regola del firewall.

    Per la procedura per creare regole firewall, consulta:

  3. Per assicurarti che le regole firewall create manualmente funzionino correttamente, esegui un test di connettività del Network Intelligence Center (NIC). Quando esegui il test di connettività:

    • Imposta la destinazione sull'indirizzo IP del servizio LoadBalancer.
    • Imposta l'origine sull'indirizzo IP del client.

    Per ulteriori informazioni, vedi Risolvere i problemi di connettività.

Disattivare la creazione di regole firewall VPC per i servizi LoadBalancer

Questa sezione descrive i passaggi per disattivare la creazione automatica delle regole firewall VPC per i servizi LoadBalancer.

Creare un nuovo cluster GKE con la creazione di regole firewall VPC disattivata

  1. Per disattivare le regole firewall VPC create automaticamente per i servizi LoadBalancer in un cluster appena creato, crea il cluster con il flag --disable-l4-lb-firewall-reconciliation:

    gcloud

    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
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del nuovo cluster.
    • VERSION: la versione di GKE.

    Terraform

    Per creare un cluster con la creazione di regole firewall VPC disabilitata utilizzando Terraform, consulta il seguente esempio:

    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. Crea un servizio LoadBalancer esterno o interno:

  3. Verifica che GKE non crei una regola firewall di autorizzazione in entrata per il servizio LoadBalancer. Le regole firewall di autorizzazione in entrata create automaticamente hanno nomi del seguente tipo: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].

    Il seguente comando non restituisce nulla:

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

Aggiorna un cluster GKE esistente per disattivare la creazione di regole firewall VPC

Prima di disattivare la creazione delle regole firewall VPC, tieni presente quanto segue sull'aggiornamento di un cluster esistente:

  • Quando aggiorni un cluster esistente per disattivare la creazione delle regole firewall VPC, GKE non elimina le regole firewall esistenti create automaticamente per i servizi LoadBalancer.
  • GKE interrompe l'aggiornamento delle regole esistenti e non ne creerà di nuove per i nuovi servizi LoadBalancer.
  • Per riattivare la creazione delle regole firewall VPC, puoi utilizzare il flag --enable-l4-lb-firewall-reconciliation con il comando gcloud_name container clusters update.

Per disattivare la creazione automatica delle regole firewall in un cluster esistente:

  1. Aggiorna il cluster per disattivare la creazione e la gestione automatica delle regole firewall per i servizi LoadBalancer:

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

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del nuovo cluster.
    • VERSION: la versione di GKE.
  2. Crea un servizio LoadBalancer esterno o interno:

  3. Verifica che GKE non crei una regola firewall di autorizzazione in entrata per il servizio LoadBalancer. Le regole firewall in entrata consentite create automaticamente hanno nomi del seguente tipo: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].

    Il seguente comando non restituisce nulla:

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

Risolvere i problemi di connettività

I seguenti esempi illustrano come utilizzare i test di connettività di Network Intelligence Center per verificare la connettività a un cluster LoadBalancer Service:

  • Network Intelligence Center:

    1. Nella console Google Cloud, vai a Network Intelligence Center e avvia un nuovo test di connettività.
    2. Dal menu a discesa, scegli Qualsiasi indirizzo IP pubblico esterno come origine e seleziona il bilanciatore del carico dalla destinazione.
    3. Esegui di nuovo il test di connettività.
  • L'interfaccia a riga di comando gcloud:

    Il seguente comando di esempio crea ed esegue un test con l'indirizzo IP pubblico della tua workstation locale come origine e l'indirizzo IP esterno del bilanciatore del carico esterno come destinazione:

    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
    

    Sostituisci quanto segue:

    • TEST_NAME: un nome per il test di connettività.
    • SOURCE_IP_ADDRESS: l'indirizzo IP del sistema che deve collegarsi al servizio LoadBalancer esterno. Ad esempio
    • LOADBALANCER_NAME: il nome del servizio LoadBalancer esterno.
    • PROJECT_ID: l'ID del progetto che contiene la rete VPC del cluster. Se il cluster utilizza una rete VPC condivisa, utilizza l'ID progetto del progetto host.
    • NETWORK_NAME: il nome della rete VPC del tuo cluster.

    Controlla i risultati del test:

    gcloud network-management connectivity-tests describe TEST_NAME
    

Passaggi successivi