Este guia mostra como configurar a visibilidade intranó num cluster do Google Kubernetes Engine (GKE).
A configuração de visibilidade intranodal configura a rede em cada nó no cluster para que o tráfego enviado de um pod para outro pod seja processado pela rede de nuvem privada virtual (VPC) do cluster, mesmo que os pods estejam no mesmo nó.
A visibilidade intranodal está desativada por predefinição nos clusters padrão e ativada por predefinição nos clusters do Autopilot.
Arquitetura
A visibilidade intranodal garante que os pacotes enviados entre pods são sempre processados pela rede VPC, o que garante que as regras de firewall, as rotas, os registos de fluxo e as configurações de espelhamento de pacotes se aplicam aos pacotes.
Quando um Pod envia um pacote para outro Pod no mesmo nó, o pacote sai do nó e é processado pela rede. Google Cloud Em seguida, o pacote é imediatamente enviado de volta para o mesmo nó e encaminhado para o pod de destino.
A visibilidade intranó implementa o DaemonSet netd
.
Vantagens
A visibilidade intranó oferece as seguintes vantagens:
- Veja registos de fluxo para todo o tráfego entre pods, incluindo o tráfego entre pods no mesmo nó.
- Crie regras de firewall que se apliquem a todo o tráfego entre Pods, incluindo o tráfego entre Pods no mesmo nó.
- Use a duplicação de pacotes para clonar o tráfego, incluindo o tráfego entre pods no mesmo nó, e encaminhá-lo para exame.
Requisitos e limitações
A visibilidade intranó tem os seguintes requisitos e limitações:
- O cluster tem de ter a versão 1.15 ou posterior do GKE.
- A visibilidade intranodal não é suportada com pools de nós do Windows Server.
- Para evitar problemas de conetividade, quando usar a flag
ip-masq-agent
com visibilidade intranode, a sua lista personalizadanonMasqueradeCIDRs
tem de incluir os intervalos de endereços IP de nós e pods do cluster.
Regras de firewall
Quando ativa a visibilidade intranodal, a rede VPC processa todos os pacotes enviados entre Pods, incluindo pacotes enviados entre Pods no mesmo nó. Isto significa que as regras de firewall da VPC e as políticas de firewall hierárquicas aplicam-se de forma consistente à comunicação de pod para pod, independentemente da localização do pod.
Se configurar regras de firewall personalizadas para a comunicação no cluster, avalie cuidadosamente as necessidades de rede do cluster para determinar o conjunto de regras de permissão de saída e entrada. Pode usar testes de conetividade para garantir que o tráfego legítimo não é obstruído. Por exemplo, a comunicação de pod para pod é necessária para o funcionamento da política de rede.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute o comando
gcloud components update
para obter a versão mais recente. As versões anteriores da CLI gcloud podem não suportar a execução dos comandos neste documento.
Ative a visibilidade intranó em um novo cluster
Pode criar um cluster com a visibilidade intranodal ativada através da CLI gcloud ou da Google Cloud consola.
gcloud
Para criar um cluster de nó único com visibilidade intranodal ativada,
use a flag --enable-intra-node-visibility
:
gcloud container clusters create CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-intra-node-visibility
Substitua o seguinte:
CLUSTER_NAME
: o nome do novo cluster.CONTROL_PLANE_LOCATION
: a localização do Compute Engine do plano de controlo do seu cluster. Indique uma região para clusters regionais ou uma zona para clusters zonais.
Consola
Para criar um cluster de nó único com visibilidade intranodal ativada, siga estes passos:
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Clique em add_boxCriar.
Introduza o Nome do cluster.
Na caixa de diálogo Configurar cluster, junto a GKE Standard, clique em Configurar.
Configure o cluster conforme necessário.
No painel de navegação, em Cluster, clique em Rede.
Selecione a caixa de verificação Ativar visibilidade intranó.
Clique em Criar.
Ative a visibilidade intranós num cluster existente
Pode ativar a visibilidade intranós num cluster existente através da CLI gcloud ou da consola Google Cloud .
Quando ativa a visibilidade intranodal para um cluster existente, o GKE reinicia os componentes no plano de controlo e nos nós de trabalho.
gcloud
Para ativar a visibilidade intranodal num cluster existente, use a flag --enable-intra-node-visibility
:
gcloud container clusters update CLUSTER_NAME \
--enable-intra-node-visibility
Substitua CLUSTER_NAME
pelo nome do seu cluster.
Consola
Para ativar a visibilidade intranós num cluster existente, siga os seguintes passos:
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Na lista de clusters, clique no nome do cluster que quer modificar.
Em Rede, clique em edit Editar visibilidade intranó.
Selecione a caixa de verificação Ativar visibilidade intranó.
Clique em Guardar alterações.
Esta alteração requer a recriação dos nós, o que pode causar interrupções nas suas cargas de trabalho em execução. Para ver detalhes acerca desta alteração específica, encontre a linha correspondente na tabela alterações manuais que recriam os nós através de uma estratégia de atualização de nós e respeitam as políticas de manutenção. Para saber mais sobre as atualizações de nós, consulte o artigo Planeamento de interrupções de atualizações de nós.
Desative a visibilidade intranó
Pode desativar a visibilidade intranós num cluster através da CLI gcloud ou da consola Google Cloud .
Quando desativa a visibilidade intranodal para um cluster existente, o GKE reinicia os componentes no plano de controlo e nos nós de trabalho.
gcloud
Para desativar a visibilidade intranodal, use a flag --no-enable-intra-node-visibility
:
gcloud container clusters update CLUSTER_NAME \
--no-enable-intra-node-visibility
Substitua CLUSTER_NAME
pelo nome do seu cluster.
Consola
Para desativar a visibilidade intranó, siga estes passos:
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Na lista de clusters, clique no nome do cluster que quer modificar.
Em Rede, clique em edit Editar visibilidade intranodal.
Desmarque a caixa de verificação Ativar visibilidade intranós.
Clique em Guardar alterações.
Esta alteração requer a recriação dos nós, o que pode causar interrupções nas suas cargas de trabalho em execução. Para ver detalhes acerca desta alteração específica, encontre a linha correspondente na tabela alterações manuais que recriam os nós através de uma estratégia de atualização de nós e respeitam as políticas de manutenção. Para saber mais sobre as atualizações de nós, consulte o artigo Planeamento de interrupções de atualizações de nós.
Exercício: valide a visibilidade intranó
Este exercício mostra os passos necessários para ativar a visibilidade intranodal e confirmar que está a funcionar para o seu cluster.
Neste exercício, vai realizar os seguintes passos:
- Ative os registos de fluxo para a sub-rede predefinida na região
us-central1
. - Crie um cluster de nó único com a visibilidade intranodal ativada na zona
us-central1-a
. - Crie dois pods no seu cluster.
- Envie um pedido HTTP de um pod para outro pod.
- Veja a entrada do registo de fluxo para o pedido de pod a pod.
Ative os registos de fluxo
Ative os registos de fluxo para a sub-rede predefinida:
gcloud compute networks subnets update default \ --region=us-central1 \ --enable-flow-logs
Verifique se a sub-rede predefinida tem registos de fluxo ativados:
gcloud compute networks subnets describe default \ --region=us-central1
O resultado mostra que os registos de fluxo estão ativados, semelhante ao seguinte:
... enableFlowLogs: true ...
Crie um cluster
Crie um cluster de nó único com a visibilidade intranodal ativada:
gcloud container clusters create flow-log-test \ --location=us-central1-a \ --num-nodes=1 \ --enable-intra-node-visibility
Obtenha as credenciais do seu cluster:
gcloud container clusters get-credentials flow-log-test \ --location=us-central1-a
Crie dois Pods
Crie um grupo.
Guarde o seguinte manifesto num ficheiro com o nome
pod-1.yaml
:apiVersion: v1 kind: Pod metadata: name: pod-1 spec: containers: - name: container-1 image: google/cloud-sdk:slim command: - sh - -c - while true; do sleep 30; done
Aplique o manifesto ao cluster:
kubectl apply -f pod-1.yaml
Crie um segundo Pod.
Guarde o seguinte manifesto num ficheiro com o nome
pod-2.yaml
:apiVersion: v1 kind: Pod metadata: name: pod-2 spec: containers: - name: container-2 image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
Aplique o manifesto ao cluster:
kubectl apply -f pod-2.yaml
Veja os agrupamentos:
kubectl get pod pod-1 pod-2 --output wide
A saída mostra os endereços IP dos seus pods, semelhantes aos seguintes:
NAME READY STATUS RESTARTS AGE IP ... pod-1 1/1 Running 0 1d 10.52.0.13 ... pod-2 1/1 Running 0 1d 10.52.0.14 ...
Tome nota dos endereços IP de
pod-1
epod-2
.
Envie uma solicitação
Obtenha um shell para o contentor em
pod-1
:kubectl exec -it pod-1 -- sh
Na shell, envie um pedido para
pod-2
:curl -s POD_2_IP_ADDRESS:8080
Substitua
POD_2_IP_ADDRESS
pelo endereço IP depod-2
.A saída mostra a resposta do contentor em execução em
pod-2
.Hello, world! Version: 2.0.0 Hostname: pod-2
Escreva exit para sair da shell e regressar ao ambiente de linha de comandos principal.
Veja entradas do registo de fluxo
Para ver uma entrada do registo de fluxo, use o seguinte comando:
gcloud logging read \
'logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND jsonPayload.connection.src_ip="POD_1_IP_ADDRESS" AND jsonPayload.connection.dest_ip="POD_2_IP_ADDRESS"'
Substitua o seguinte:
PROJECT_ID
: o ID do seu projeto.POD_1_IP_ADDRESS
: o endereço IP depod-1
.POD_2_IP_ADDRESS
: o endereço IP depod-2
.
O resultado mostra uma entrada do registo de fluxo para um pedido de pod-1
para pod-2
. Neste exemplo, pod-1
tem o endereço IP 10.56.0.13
e pod-2
tem o endereço IP 10.56.0.14
.
...
jsonPayload:
bytes_sent: '0'
connection:
dest_ip: 10.56.0.14
dest_port: 8080
protocol: 6
src_ip: 10.56.0.13
src_port: 35414
...
Limpar
Para evitar incorrer em cobranças indesejadas na sua conta, siga os passos abaixo para remover os recursos que criou:
Elimine o cluster:
gcloud container clusters delete -q flow-log-test
Desative os registos de fluxo para a sub-rede predefinida:
gcloud compute networks subnets update default --no-enable-flow-logs
O que se segue?
- Saiba como controlar a comunicação entre os pods e os serviços do cluster criando uma política de rede do cluster.
- Saiba mais sobre as vantagens dos clusters nativos da VPC.