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
.
Implantação de cluster de usuário único com alta disponibilidade
No diagrama a seguir, ilustramos vários conceitos de rede importantes para o GKE em Bare Metal em uma configuração de rede possível.
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
Protocolo | Direção | Intervalo de portas | Finalidade | Usada por |
---|---|---|---|---|
UDP | Entrada | 6081 | Encapsulamento GENEVE | Só para mim |
TCP | Entrada | 22 | Provisionamento e atualizações de nós de cluster de administrador | Estação de trabalho do administrador |
TCP | Entrada | 6444 | Servidor da API Kubernetes | Tudo |
TCP | Entrada | 2379 - 2380 | API do servidor etcd | kube-apiserver e etcd |
TCP | Entrada | 10250 | API kubelet | Plano próprio e de controle |
TCP | Entrada | 10251 | kube-scheduler | Só para mim |
TCP | Entrada | 10252 | kube-controller-manager | Só para mim |
TCP | Entrada | 10256 | Verificação de integridade do nó | Tudo |
TCP | Ambos | 4240 | Verificação de integridade da CNI | Tudo |
Nós de trabalho
Protocolo | Direção | Intervalo de portas | Finalidade | Usada por |
---|---|---|---|---|
TCP | Entrada | 22 | Provisionamento e atualizações de nós de clusters de usuário | Nós do cluster de administrador |
UDP | Entrada | 6081 | Encapsulamento GENEVE | Só para mim |
TCP | Entrada | 10250 | API kubelet | Plano próprio e de controle |
TCP | Entrada | 10256 | Verificação de integridade do nó | Tudo |
TCP | Entrada | 30000 - 32767 | NodePort serviço | Só para mim |
TCP | Ambos | 4240 | Verificação de integridade da CNI | Tudo |
Nós do balanceador de carga
Protocolo | Direção | Intervalo de portas | Finalidade | Usada por |
---|---|---|---|---|
TCP | Entrada | 22 | Provisionamento e atualizações de nós de clusters de usuário | Nós do cluster de administrador |
UDP | Entrada | 6081 | Encapsulamento GENEVE | Só para mim |
TCP | Entrada | 443* | Gerenciamento de clusters | Tudo |
TCP | Ambos | 4240 | Verificação de integridade da CNI | Tudo |
TCP | Entrada | 7946 | Verificação de integridade do LB de metal | nós do balanceador de carga |
UDP | Entrada | 7946 | Verificação de integridade do LB de metal | nós do balanceador de carga |
TCP | Entrada | 10256 | Verificaçã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.
Protocolo | Direção | Intervalo de portas | Finalidade | Usada por |
---|---|---|---|---|
TCP | Entrada | 22 | Provisionamento e atualizações de nós do cluster | Todos os nós |
TCP | Entrada | 443* | Servidor da API Kubernetes para o cluster adicionado | Nó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:
Execute o seguinte comando do Network Mapper para ver quais portas estão abertas:
nmap localhost
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
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.