Requisitos de rede

Neste documento, descrevemos os requisitos de rede para instalar e operar o GKE em Bare Metal.

Requisitos de rede externa

O GKE em Bare Metal requer uma conexão de Internet para fins operacionais. O GKE em Bare Metal recupera componentes de cluster do Container Registry, e o cluster é registrado com o Connect.

É possível se conectar ao Google usando a Internet pública por HTTPS, uma rede privada virtual (VPN) ou uma conexão de Interconexão dedicada.

Se as máquinas que você está usando para a estação de trabalho de administrador e os nós do cluster usam um servidor proxy para acessar a Internet, o servidor proxy precisa permitir algumas conexões específicas. Para saber mais detalhes, consulte a seção de pré-requisitos de Instalar por trás de um proxy.

Requisitos de rede interna

O GKE em Bare Metal pode funcionar com a conectividade da camada 2 ou da camada 3 entre os nós do cluster. Os nós do balanceador de carga podem ser os nós do plano de controle ou um conjunto dedicado de nós. Saiba mais em Como escolher e configurar balanceadores de carga.

Quando você usa o balanceador de carga de camada 2 em pacote com MetalLB (spec.loadBalancer.mode: bundled e spec.loadBalancer.type: layer2), os nós do balanceador de carga exigem a adjacência da camada 2. O requisito de adjacência da camada 2 se aplica se você executa o balanceador de carga em nós do plano de controle ou em um conjunto dedicado de nós de balanceamento de carga. O balanceamento de carga em pacote com o BGP é compatível com o protocolo da camada 3. Portanto, a adjacência estrita da camada 2 não é necessária.

Os requisitos para máquinas do balanceador de carga são:

  • Para o balanceamento de carga em pacote da camada 2, todos os balanceadores de carga de um determinado cluster estão no mesmo domínio da camada 2. Os nós do plano de controle também precisam estar no mesmo domínio da camada 2.
  • Para o balanceamento de carga da camada 2 em pacote, todos os endereços IP virtuais (VIPs) precisam estar na sub-rede da máquina do balanceador de carga e ser roteáveis para o gateway da sub-rede.
  • Os usuários são responsáveis por permitir o tráfego do balanceador de carga de entrada.

Redes de pods

O GKE em Bare Metal nas versões 1.7.0 e posteriores permitem configurar até 250 pods por nó. O Kubernetes atribui um bloco de roteamento entre domínios sem classe (CIDR, na sigla em inglês) para cada nó. Assim, cada pod tem um endereço IP exclusivo. O tamanho do bloco CIDR corresponde ao número máximo de Pods por nó. A tabela a seguir lista o tamanho do bloco CIDR que o Kubernetes atribui a cada nó com base no máximo de pods configurados por nó:

Número máximo de pods por nó Bloco de CIDR por nó Número de endereços IP
32 /26 64
33 – 64 /25 128
65 – 128 /24 256
129 - 250 /23 512

A execução de 250 pods por nó exige que o Kubernetes reserve um bloco CIDR /23 para cada nó. Supondo que seu cluster use o valor padrão de /16 para o campo clusterNetwork.pods.cidrBlocks, seu cluster tem um limite de (2(23-16))=128 nós. Se você pretende expandir o cluster além desse limite, aumente o valor de clusterNetwork.pods.cidrBlocks ou reduza o valor de nodeConfig.podDensity.maxPodsPerNode. Esse método apresentou algumas desvantagens.

Implantação de cluster de usuário único com alta disponibilidade

O diagrama a seguir ilustra alguns dos principais conceitos de rede para GDCV para Bare Metal em uma configuração de rede possível.

Configuração de rede típica do GKE em Bare Metal

Considere as seguintes informações para atender aos requisitos de rede:

  • Os nós do plano de controle executam os balanceadores de carga. Todos têm conectividade de Camada 2, enquanto outras conexões, inclusive nós de trabalho, exigem apenas conectividade de Camada 3.
  • Os arquivos de configuração definem endereços IP para pools de nós de trabalho. Os arquivos de configuração também definem VIPs para as seguintes finalidades:
    • Serviços
    • Entrada
    • Acesso do plano de controle pela API Kubernetes
  • Você precisa de uma conexão com o Google Cloud.

Uso da porta

Nesta seção, mostramos como as portas UDP e TCP são usadas nos nós do balanceador de carga e de cluster.

Nós do plano de controle

ProtocoloDireçãoIntervalo de portasFinalidadeUsada por
UDPEntrada6081Encapsulamento GENEVESó para mim
TCPEntrada22Provisionamento e atualizações de nós de cluster de administradorEstação de trabalho do administrador
TCPEntrada6444Servidor da API KubernetesTudo
TCPEntrada2.379 a 2.381API do servidor etcdkube-apiserver e etcd
TCPEntrada2.382 a 2.384API do cliente do servidor etcd-eventskube-apiserver e etcd-events
TCPEntrada10250API kubeletPlano próprio e de controle
TCPEntrada10251kube-schedulerSó para mim
TCPEntrada10252kube-controller-managerSó para mim
TCPEntrada10256Verificação de integridade do nóTudo
TCPAmbos4240Verificação de integridade da CNITudo

Nós de trabalho

ProtocoloDireçãoIntervalo de portasFinalidadeUsada por
TCPEntrada22Provisionamento e atualizações de nós de clusters de usuárioNós do cluster de administrador
UDPEntrada6081Encapsulamento GENEVESó para mim
TCPEntrada10250API kubeletPlano próprio e de controle
TCPEntrada10256Verificação de integridade do nóTudo
TCPEntrada30000 - 32767NodePort serviçoSó para mim
TCPAmbos4240Verificação de integridade da CNITudo

Nós do balanceador de carga

ProtocoloDireçãoIntervalo de portasFinalidadeUsada por
TCPEntrada22Provisionamento e atualizações de nós de clusters de usuárioNós do cluster de administrador
UDPEntrada6081Encapsulamento GENEVESó para mim
TCPEntrada443*Gerenciamento de clustersTudo
TCPAmbos4240Verificação de integridade da CNITudo
TCPEntrada7946Verificação de integridade do LB de metalnós do balanceador de carga
UDPEntrada7946Verificação de integridade do LB de metalnós do balanceador de carga
TCPEntrada10256Verificação de integridade do nóTudo

* Essa porta pode ser configurada na configuração do cluster usando o campo controlPlaneLBPort.

Requisitos de porta de vários clusters

Em uma configuração de vários clusters, os clusters adicionados precisam incluir as portas a seguir para se comunicar com o cluster de administrador.

ProtocoloDireçãoIntervalo de portasFinalidadeUsada por
TCPEntrada22Provisionamento e atualizações de nós do clusterTodos os nós
TCPEntrada443*Servidor da API Kubernetes para o cluster adicionadoNós do plano de controle e do balanceador de carga

* Essa porta pode ser configurada na configuração do cluster usando o campo controlPlaneLBPort.

Configurar portas de firewall

Não é necessário desativar o firewall para executar o GKE em Bare Metal no Red Hat Enterprise Linux (RHEL) ou no CentOS. Para usar o firewalld, abra as portas UDP e TCP usadas pelo plano de controle, o worker e o balanceador de carga, conforme descrito em Uso da porta nesta página. As seguintes configurações de exemplo mostram como você pode abrir portas com firewall-cmd, o utilitário de linha de comando do firewalld. Execute os comandos como o usuário raiz.

Configuração de exemplo de nós do plano de controle

O bloco de comandos a seguir mostra um exemplo de como abrir as portas necessárias em servidores que executam nós do plano de controle:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250-10252/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

Substitua PODS_CIDR pelos blocos CIDR reservados para os pods configurados no campo clusterNetwork.pods.cidrBlocks. O bloco CIDR padrão para pods é 192.168.0.0/16.

Configuração de exemplo de nó de trabalho

O bloco de comandos a seguir mostra um exemplo de como abrir as portas necessárias em servidores que executam nós de trabalho:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

Substitua PODS_CIDR pelos blocos CIDR reservados para os pods configurados no campo clusterNetwork.pods.cidrBlocks. O bloco CIDR padrão para pods é 192.168.0.0/16.

Configuração de exemplo de nó do balanceador de carga

O bloco de comandos a seguir mostra um exemplo de como abrir as portas necessárias em servidores que executam nós do balanceador de carga:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=7946/tcp
firewall-cmd --permanent --zone=public --add-port=7946/udp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

Substitua PODS_CIDR pelos blocos CIDR reservados para os pods configurados no campo clusterNetwork.pods.cidrBlocks. O bloco CIDR padrão para pods é 192.168.0.0/16.

Confirmar a configuração da porta

Para verificar a configuração da porta, use as seguintes etapas nos nós do plano de controle, do worker e do balanceador de carga:

  1. Execute o seguinte comando do Network Mapper para ver quais portas estão abertas:

    nmap localhost
    
  2. Execute os seguintes comandos para receber as configurações de firewall:

    firewall-cmd --zone=public --list-all-policies
    firewall-cmd --zone=public --list-ports
    firewall-cmd --zone=public --list-services
    firewall-cmd --zone=k8s-pods --list-all-policies
    firewall-cmd --zone=k8s-pods --list-ports
    firewall-cmd --zone=k8s-pods --list-services
    
  3. Se necessário, execute novamente os comandos das seções anteriores para configurar os nós corretamente. Talvez seja necessário executar os comandos como o usuário raiz.

Problema conhecido de firewall

Ao executar o GKE em Bare Metal com firewalld ativado no CentOS ou no Red Hat Enterprise Linux (RHEL), as alterações no firewalld podem remover as cadeias iptables do Cilium na rede do host. As cadeias iptables são adicionadas pelo pod anetd quando ele é iniciado. A perda das cadeias do iptables do Cilium faz com que o pod no nó perca a conectividade de rede fora do nó.

As mudanças em firewalld que removem as cadeias de iptables incluem, entre outras:

  • Reiniciando firewalld, usando systemctl

  • Como recarregar firewalld com o cliente de linha de comando (firewall-cmd --reload)

Para aplicar mudanças de firewalld sem remover cadeias de iptables, reinicie anetd no nó:

  1. Localize e exclua o pod anetd com os seguintes comandos para reiniciar anetd:

    kubectl get pods -n kube-system kubectl delete pods -n kube-system ANETD_XYZ
    

    Substitua ANETD_XYZ pelo nome do pod anetd.