Visibilidade intranós

Nesta página, você aprenderá a configurar a visibilidade intranós em um cluster do Google Kubernetes Engine para que todo o tráfego de rede no cluster seja visto pela rede do Google Cloud Platform. Ou seja, é possível visualizar registros de fluxo de todo o tráfego entre pods, incluindo entre pods que estão no mesmo nó. A visibilidade intranós também permite criar regras de firewall que se aplicam a todo o tráfego entre pods, inclusive pods no mesmo nó.

Quando um pacote é enviado de um pod para outro no mesmo nó, ele é retirado do nó e processado pela rede do GCP. Depois, o pacote é imediatamente enviado de volta ao mesmo nó e encaminhado ao pod de destino.

Atualmente, a visibilidade intranós é desativada por padrão.

A visibilidade intranós está disponível no GKE v1.11.x ou superior.

Considerações

Maior volume de registros

Quando a visibilidade intranós é ativada, o volume de registro de fluxo pode aumentar com mais tráfego sendo capturado pela VPC. Ajuste as definições de geração de registro para gerenciar os custos associados com a geração de registo de fluxo.

Todo o tráfego entre pods está sujeito a firewalls

Todo o tráfego entre pods, incluindo pods implantados no nó de nome, é visível para a VPC quando a visibilidade intranós é ativada. A ativação da visibilidade intranós pode fazer com que o tráfego anteriormente irrestrito fique sujeito a regras de firewall. Avalie seus firewalls de nível de nó para garantir que o tráfego legítimo não está obstruído.

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

Visão geral

Neste tópico, você seguirá as etapas a seguir:

  1. Ativar os registros de fluxo da sub-rede padrão na região us-central1.

  2. Criar um cluster na zona us-central1-a que tenha um nó.

  3. Criar dois pods no cluster.

  4. Enviar uma solicitação HTTP de um pod para o outro.

  5. Ver a entrada do registro de fluxo da solicitação entre pods.

Como ativar registros de fluxo de uma sub-rede

gcloud

Para ativar os registros de fluxo da sub-rede padrão na região us-central1, execute o seguinte:

gcloud compute networks subnets update default --region us-central1 --enable-flow-logs

Verifique se a sub-rede tem registros de fluxo ativados:

gcloud compute networks subnets describe default --region us-central1

A saída mostra que os registros de fluxo estão ativados:

...
enableFlowLogs: true
...
ipCidrRange: 10.128.0.0/20
region: https://www.googleapis.com/compute/v1/projects/abc-712099/regions/us-central1

Console

Siga as etapas a seguir para ativar os registros de fluxo da sub-rede padrão na região us-central1:

  1. Acesse a página de redes VPC do Google Kubernetes Engine no Console do GCP.

    Acessar a página de redes VPC

  2. Na linha us-central1, clique em padrão.

  3. Clique em Editar.

  4. Em Registros de fluxo, selecione Ativado.

  5. Clique em Salvar.

Como criar um cluster

Para criar um cluster que tenha um nó:

gcloud

gcloud container clusters create [CLUSTER_NAME] \
    --zone us-central1-a \
    --num-nodes 1 \
    --enable-intra-node-visibility

Console

  1. Acesse a página "Criar um cluster do Kubernetes" no Console do GCP.

    Acessar a página de clusters do Kubernetes

  2. Em Nome, digite [CLUSTER_NAME].

  3. Em Zona, selecione us-central1-a.

  4. Em Número de nós, insira 1.

  5. Na parte inferior da página, clique em Opções avançadas.

  6. Selecione Ativar visibilidade intranós.

  7. Clique em Criar.

Como receber credenciais para o cluster

Insira este comando para receber as credenciais do novo cluster:

gcloud container clusters get-credentials [CLUSTER_NAME] \
    --zone us-central1-a

As credenciais são salvas no arquivo kubeconfig, que normalmente está em $HOME/.kube/config.

Como criar dois pods

Veja o manifesto de um pod:

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
spec:
  containers:
  - name: container-1
    image: gcr.io/google-samples/hello-app:2.0

Salve o manifesto em um arquivo denominado pod-1.yaml e crie o pod:

kubectl apply -f pod-1.yaml

Veja o manifesto do segundo pod:

apiVersion: v1
kind: Pod
metadata:
  name: pod-2
spec:
  containers:
  - name: container-2
    image: gcr.io/google-samples/node-hello:1.0

Salve o manifesto em um arquivo denominado pod-2.yaml e crie o pod:

kubectl apply -f pod-2.yaml

Veja os pods:

kubectl get pod pod-1 pod-2 --output wide

A saída mostra os endereços IP dos pods. Anote estas informações:

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   ...

Como enviar uma solicitação de pod-1 para pod-2

Abra um shell para o contêiner em pod-1:

kubectl exec -it pod-1 sh

No shell, envie uma solicitação para pod-2:

wget -qO- [POD_2_IP_ADDRESS]:8080

em que [POD_2_IP_ADDRESS] é o endereço IP de pod-2, visto anteriormente neste exercício.

A saída mostra a resposta do contêiner em execução em pod-2:

Hello Kubernetes!

Insira exit para sair do shell e retornar para o ambiente principal da linha de comando.

Como ver as entradas do registro de fluxo

gcloud

Na janela comum da linha de comando, insira este comando para ver uma entrada do registro de fluxo da solicitação entre pod-1 e pod-2.

gcloud logging read \
    'logName="projects/[PROJECT_ID]/logs/compute.googleapis.com%2Fvpc_flows" AND jsonPayload.connection.src_ip="[POD_1_IP_ADDRESS]"'

em que:

  • [PROJECT_ID] é o código do projeto;
  • [POD_1_IP_ADDRESS] é o endereço IP do pod-1.

A saída mostra uma entrada do registro de fluxo de uma solicitação de pod-1 para pod-2. Nesse exemplo, pod-1 tem o endereço IP 10.56.0.13, e pod-2, 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
...

Console

  1. Acesse a página de registros do Stackdriver do Google Kubernetes Engine no Console do GCP.

    Acessar a página de registros do Stackdriver

  2. Na caixa de filtro à direita localizada na parte superior da página, clique na seta para baixo e selecione Converter para filtro avançado.

  3. Exclua o texto que estiver na caixa do filtro e insira esta consulta:

    resource.type="gce_subnetwork"
    logName="projects/[PROJECT_ID]/logs/compute.googleapis.com%2Fvpc_flows"
    jsonPayload.connection.src_ip="[POD_1_IP_ADDRESS]"
    

    em que:

    • [PROJECT_ID] é o código do projeto;
    • [POD_1_IP_ADDRESS] é o endereço IP do pod-1.

    Expanda a entrada de registro exibida. Em jsonPayload, você vê que a solicitação foi enviada de pod-1 a pod-2. Nesse exemplo, pod-1 tem o endereço IP 10.56.0.13, e pod-2, 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
    

Lembre-se de que o cluster tem apenas um nó. Portanto, pod-1 e pod-2 estão no mesmo nó. Mesmo assim, as entradas do registro de fluxo estão disponíveis na comunicação intranós entre pod-1 e pod-2.

Como ativar a visibilidade intranós em um cluster atual

gcloud

Para ativar a visibilidade intranós em um cluster atual, insira este comando:

gcloud beta container clusters update [CLUSTER_NAME] \
    --enable-intra-node-visibility

em que [CLUSTER_NAME] é o nome do cluster atual.

Console

  1. Acesse o menu do Google Kubernetes Engine no Console do GCP.

    Acessar o menu do Google Kubernetes Engine

  2. Clique no botão de do cluster, que tem a forma de um lápis.

  3. Ative a Visibilidade intranós.

  4. Clique em Salvar.

Quando você ativa a visibilidade intranós em um cluster atual, os componentes no painel de controle e nos nós de worker são reiniciados.

Depois de ativar esse recurso, confirme se ele está ativado examinando as regras de roteamento no seu nó:

ip rule show

Você verá uma resposta semelhante à seguinte:

0:  from all lookup local
30001:  from all fwmark 0x4000/0x4000 lookup main
30002:  from all iif lo lookup main
30003:  not from all iif eth0 lookup 1
32766:  from all lookup main
32767:  from all lookup default

e:

ip route show table 1

Você verá uma resposta semelhante à seguinte:

default via [GKE_NODE_SUBNET_GW] dev eth0

Como desativar a visibilidade intranós

gcloud

Para desativar a visibilidade intranós em um cluster atual, insira este comando:

gcloud beta container clusters update [CLUSTER_NAME] \
  --no-enable-intra-node-visibility

em que [CLUSTER_NAME] é o nome do cluster atual.

Console

  1. Acesse a página de clusters do Kubernetes no Console do GCP.

    Acessar a página de clusters do Kubernetes

  2. Clique no botão de do cluster, que tem a forma de um lápis.

  3. No menu suspenso Visibilidade intranós, selecione Desativada.

  4. Clique em Salvar.

Quando você desativa a visibilidade intranós em um cluster atual, os componentes no painel de controle e nos nós de worker são reiniciados.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine