Agente de mascaramento de IP

Nesta página, explicamos como o agente de mascaramento de IP do Google Kubernetes Engine funciona.

Visão geral

O mascaramento de IP é uma forma de conversão de endereços de rede (NAT, na sigla em inglês) de muitos para um. Ele mascara vários endereços IP de origem por trás de um único endereço.

Com o mascaramento de IP, você pode aumentar a segurança dos clusters, porque ele impede que endereços IP individuais do pod fiquem expostos ao tráfego de fora do intervalo de link local (169.254.0.0/16) e de outros intervalos de IPs arbitrários.

Além disso, o mascaramento de IP permite que você configure a comunicação entre intervalos de IPs sem mascaramento, como os pods no intervalo 192.168.0.0/16 que interagem com recursos de rede no intervalo CIDR de cluster (10.0.0.0/8).

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o código padrão do projeto:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize o gcloud para a versão mais recente:
    gcloud components update

Como o ip-masq-agent funciona

O mascaramento de IP no GKE é processado pela ferramenta ip-masq-agent. O ip-masq-agent é ativado automaticamente no GKE v1.7 e versões superiores quando uma ou mais das seguintes condições extras são atendidas:

  • O cluster tem uma política de rede
  • O intervalo CIDR de cluster não está dentro de 10.0.0.0/8

Se o cluster usa o GKE v1.7 ou versão superior, mas não está em conformidade com as demais condições para que ip-masq-agent seja ativado automaticamente, crie o agente ip-masq-agent manualmente.

O ip-masq-agent configura regras iptables para processar o mascaramento de endereços IP de nó/pod ao enviar tráfego para destinos fora dos intervalos de IP do nó e do cluster. Os endereços IP do pod são mascarados pelo endereço do nó.

Por padrão, o agente é configurado para tratar os três intervalos de IP particulares especificados em RFC 1918 como CIDRs sem mascaramento:

  • 10.0.0.0/8, que é o CIDR do cluster usado para endereços IP do pod
  • 172.16.0.0/12
  • 192.168.0.0/16

Por padrão, o mascaramento de IP também trata o intervalo de link local (169.254.0.0/16) como um CIDR sem mascaramento.

A cada 60 segundos, por padrão, o agente recarrega o próprio arquivo de configuração a partir do arquivo /etc/config/ip-masq-agent no contêiner.

Veja abaixo o conjunto padrão de regras iptables aplicado por ip-masq-agent:

iptables -t nat -L IP-MASQ
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             172.16.0.0/12        /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             192.168.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE  all  --  anywhere            anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

Como configurar o agente usando um ConfigMap

Se o conjunto padrão de regras mostrado acima não for suficiente para seu cluster, você poderá usar um ConfigMap para personalizar os intervalos de IP afetados.

É preciso escrever o arquivo ConfigMap em YAML ou JSON e nomeá-lo como config.

Ele precisa conter três chaves, todas opcionais:

  • nonMasqueradeCIDRs: uma lista de strings na notação CIDR que especifica os intervalos de endereços IP que não usam mascaramento de IP.
  • masqLinkLocal: um valor booleano que indica se haverá mascaramento do tráfego para o prefixo de link-local (169.254.0.0/16). O padrão é false.
  • resyncInterval: um valor inteiro que representa o intervalo em que o agente tenta sincronizar o próprio arquivo ConfigMap do disco. O formato é Nx, em que N é um número inteiro e x é uma unidade de tempo, como s ou ms.

Por exemplo, com o seguinte ConfigMap, config, é possível excluir 10.0.0.0/8 pelo ip-masq-agent:

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s

Por padrão, o intervalo de link-local (169.254.0.0/16) está isento do mascaramento de IP.

Para que o mascaramento de IP seja ativado por ip-masq-agent para o intervalo de link-local, defina o valor da chave masqLinkLocal como true no ConfigMap.

Por exemplo:

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s
masqLinkLocal: true

Como adicionar um ConfigMap ao cluster

Para adicionar um ConfigMap ao cluster, execute o comando a seguir no shell ou na janela de terminal:

kubectl create configmap [CONFIGMAP_NAME] \
--from-file config \
--namespace kube-system

em que:

  • [CONFIGMAP_NAME] é sua escolha para o recurso ConfigMap, como ip-masq-agent.

Por exemplo:

kubectl create configmap ip-masq-agent --from-file config --namespace kube-system

Quando a sincronização é concluída, as alterações aparecem em iptables:

iptables -t nat -L IP-MASQ
Chain IP-MASQ (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local */
MASQUERADE  all  --  anywhere            anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

Como criar um recurso ip-masq-agent manualmente (opcional)

Talvez você precise criar e configurar ip-masq-agent manualmente. Para fazer isso, é preciso implantar um recurso ip-masq-agent no seu cluster.

Execute o seguinte comando:

kubectl apply -f \
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/ip-masq-agent/ip-masq-agent.yaml

Ele aplica um arquivo de configuração fornecido pelo Kubernetes.

Em seguida, aplique o rótulo masq-agent-ds-ready aos nós e DaemonSets que usarão o recurso ip-masq-agent que você criou. A rotulagem de nós e DaemonSets indica que ip-masq-agent precisa operar nesses recursos:

kubectl label nodes [NAME] beta.kubernetes.io/masq-agent-ds-ready=true
kubectl label daemonsets [NAME] beta.kubernetes.io/masq-agent-ds-ready=true -n kube-system

em que [NAME] é o nome dos recursos.

Para configurar a ferramenta ip-masq-agent, consulte Como configurar o agente usando um ConfigMap.

Próximas etapas

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

Enviar comentários sobre…

Documentação do Kubernetes Engine