Regras de firewall gerenciadas pelo usuário para serviços de LoadBalancer do GKE


Esta página descreve como desativar as regras de firewall da VPC de permissão de entrada que o GKE cria para os serviços de LoadBalancer.

Desativar essas regras de firewall criadas automaticamente para serviços do LoadBalancer pode ser útil nas seguintes situações:

Para desativar as regras de firewall criadas automaticamente para serviços de LoadBalancer, é necessário especificar a flag --disable-l4-lb-firewall-reconciliation ao criar ou atualizar um cluster. A flag --disable-l4-lb-firewall-reconciliation não afeta outras regras de firewall da VPC criadas automaticamente, como aquelas que facilitam a comunicação entre nós ou que permitem verificações de integridade para seus serviços.

Requisitos

  • Para usar regras de firewall gerenciadas pelo usuário para serviços LoadBalancer, seus clusters do GKE precisam usar a versão 1.31.3-gke.105600 ou mais recente.

Limitações

O GKE oferece suporte à desativação da criação automática de regras de firewall para estes tipos de serviços do LoadBalancer:

Não é possível desativar a criação automática de regras de firewall para estes tipos de serviços do LoadBalancer:

  • Serviços LoadBalancer internos que não usam a subconfiguração do GKE
  • Serviços LoadBalancer externos com base em pool de destino

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Estratégias para gerenciamento manual de regras de firewall

Antes de desativar a criação automática de regras de firewall da VPC para serviços de LoadBalancer no cluster do GKE, trabalhe com um administrador de segurança para desenvolver uma estratégia de configuração manual de regras de firewall.

  1. Decida qual tipo de política de firewall usar: hierárquica, de rede global ou regional. Para saber como criar uma política de firewall, consulte:

    Você também pode usar regras de firewall da VPC, que não usam nenhuma política.

  2. As regras de firewall criadas manualmente precisam ser de permissão de entrada, porque a regra de firewall de negação de entrada implícita proíbe o tráfego de entrada. Quando você desativa a criação automática de regras de firewall da VPC, o tráfego de entrada não chega aos seus nós, a menos que você tenha criado regras de firewall de permissão de entrada que correspondam ao tráfego dos seus serviços de LoadBalancer.

    Dependendo dos parâmetros da regra de firewall, uma única regra de permissão de entrada pode ser aplicada a um ou mais serviços LoadBalancer. Para cada regra de firewall de permissão de entrada criada, defina os seguintes parâmetros:

    • Parâmetro de destino: verifique se a regra de firewall inclui pelo menos todos os nós do cluster que contêm os serviços LoadBalancer. Os destinos com suporte dependem do tipo de política de firewall em que uma regra está localizada ou se você está usando uma regra de firewall da VPC. Para saber mais sobre o parâmetro de destino de uma regra em uma política de firewall, consulte Destinos.

    • Protocolos e portas: inclua todos os protocolos e portas de destino usados pelos serviços LoadBalancer aos quais a regra de firewall precisa ser aplicada.

    • Parâmetro de destino: é possível usar uma das seguintes estratégias para o parâmetro de destino:

      • Inclua os endereços IP de todos os serviços LoadBalancer aos quais a regra de firewall precisa ser aplicada no parâmetro de destino. Para encontrar o endereço IP de um serviço LoadBalancer, use o seguinte comando:
         kubectl get svc LOADBALANCER_NAME \
            -n NAMESPACE_NAME \
            -o jsonpath='{.status.loadBalancer.ingress[0].ip}
      
    • Parâmetro de origem: especifique as origens (por exemplo, endereços IP) usadas pelos clientes que precisam se conectar aos serviços do balanceador de carga a que a regra de firewall precisa ser aplicada.

    Para saber como criar regras de firewall, consulte:

  3. Para garantir que as regras de firewall criadas manualmente estejam funcionando corretamente, execute um teste de conectividade do Network Intelligence Center (NIC). Ao executar o teste de conectividade:

    • Defina o destino como o endereço IP do serviço LoadBalancer.
    • Defina a origem como o endereço IP do cliente.

    Para mais informações, consulte Resolver problemas de conexão.

Desativar a criação de regras de firewall da VPC para seus serviços do LoadBalancer

Esta seção descreve as etapas para desativar a criação automática de regras de firewall da VPC para serviços do LoadBalancer.

Criar um cluster do GKE com a criação de regras de firewall da VPC desativada

  1. Para desativar as regras de firewall da VPC criadas automaticamente para serviços do LoadBalancer em um cluster recém-criado, crie o cluster com a flag --disable-l4-lb-firewall-reconciliation:

    gcloud

    Piloto automático:

    gcloud container clusters create-auto CLUSTER_NAME \
      --disable-l4-lb-firewall-reconciliation \
      --cluster-version=VERSION
    

    Padrão:

    gcloud container clusters create CLUSTER_NAME \
      --disable-l4-lb-firewall-reconciliation \
      --enable-l4-ilb-subsetting \
      --cluster-version=VERSION
    

    Substitua:

    • CLUSTER_NAME: o nome do novo cluster;
    • VERSION: a versão do GKE.

    Terraform

    Para criar um cluster com a criação de regras de firewall da VPC desativada usando o Terraform, consulte o exemplo a seguir:

    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. Crie um serviço LoadBalancer externo ou interno:

  3. Verifique se o GKE não cria uma regra de firewall de permissão de entrada para o serviço LoadBalancer. As regras de firewall de permissão de entrada criadas automaticamente têm nomes do seguinte formato: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].

    O comando a seguir não retorna nada:

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

Atualizar um cluster do GKE para desativar a criação de regras de firewall da VPC

Antes de desativar a criação de regras de firewall da VPC, observe os seguintes pontos sobre a atualização de um cluster existente:

  • Quando você atualiza um cluster para desativar a criação de regras de firewall da VPC, o GKE não exclui as regras de firewall que criou automaticamente para seus serviços do LoadBalancer.
  • O GKE para de atualizar as regras atuais e não cria novas para os novos serviços LoadBalancer.
  • Para reativar a criação de regras de firewall da VPC, use a flag --enable-l4-lb-firewall-reconciliation com o comando gcloud_name container clusters update.

Para desativar a criação automática de regras de firewall em um cluster atual:

  1. Atualize o cluster para desativar a criação e o gerenciamento automáticos de regras de firewall para serviços do LoadBalancer:

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

    Substitua:

    • CLUSTER_NAME: o nome do novo cluster;
    • VERSION: a versão do GKE.
  2. Crie um serviço LoadBalancer externo ou interno:

  3. Verifique se o GKE não cria uma regra de firewall de permissão de entrada para o serviço LoadBalancer. As regras de firewall de permissão de entrada criadas automaticamente têm nomes com o seguinte formato: k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash].

    O comando a seguir não retorna nada:

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

Resolver problemas de conectividade

Os exemplos a seguir ilustram como usar os testes de conectividade do Network Intelligence Center para testar a conectividade com um cluster de Serviço LoadBalancer externo:

  • Network Intelligence Center:

    1. No console do Google Cloud, acesse o Network Intelligence Center e inicie um novo teste de conectividade.
    2. No menu suspenso, escolha Qualquer endereço IP público externo como a origem e selecione o balanceador de carga no destino.
    3. Execute o teste de conectividade novamente.
  • A CLI gcloud:

    O comando de exemplo a seguir cria e executa um teste com o endereço IP público da sua estação de trabalho local como origem e o endereço IP externo do balanceador de carga externo como destino:

    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
    

    Substitua:

    • TEST_NAME: um nome para o teste de conectividade.
    • SOURCE_IP_ADDRESS: o endereço IP do sistema que precisa se conectar ao serviço LoadBalancer externo. Por exemplo:
    • LOADBALANCER_NAME: o nome do serviço de balanceador de carga externo.
    • PROJECT_ID: o ID do projeto que contém a rede VPC do cluster. Se o cluster usar uma rede VPC compartilhada, use o ID do projeto host.
    • NETWORK_NAME: o nome da rede VPC do cluster.

    Confira os resultados do teste:

    gcloud network-management connectivity-tests describe TEST_NAME
    

A seguir