Nesta página, explicamos como configurar clusters criados no modo padrão do Google Kubernetes Engine (GKE) para executar mascaramento de IP com ip-masq-agent. Para mais informações sobre o mascaramento de IP no
modo Autopilot do GKE,
consulte Usar a política NAT de saída para configurar o mascaramento de IP em clusters do Autopilot.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e inicialize a
gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se você tem um cluster padrão. Se precisar de um, crie um cluster Standard.
Como verificar o status ip-masq-agent
Esta seção mostra como:
- Determine se o cluster tem um
ip-masq-agentDaemonSet. - Verifique o recurso
ip-masq-agentConfigMap.
Verifique o DaemonSet ip-masq-agent
Para verificar se o cluster está executando o DaemonSet ip-masq-agent, use a
Google Cloud CLI ou o console Google Cloud .
gcloud
Veja as credenciais do cluster:
gcloud container clusters get-credentials CLUSTER_NAMESubstitua
CLUSTER_NAMEpelo nome do cluster.Pesquise
ip-masq-agentno namespacekube-system:kubectl get daemonsets/ip-masq-agent -n kube-systemSe o
ip-masq-agentDaemonSet existir, a saída será semelhante a esta:NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ip-masq-agent 3 3 3 3 3 <none> 13dSe o
ip-masq-agentDaemonSet não existir, a saída será semelhante a esta:Error from server (NotFound): daemonsets.apps "ip-masq-agent" not foundVerifique se o DaemonSet
ip-masq-agentestá executando a versão mais recente:kubectl get daemonsets/ip-masq-agent -n kube-system -o jsonpath='{.spec.template.spec.containers[].image}'Esse comando precisa retornar a mesma imagem de contêiner especificada em Como implantar o DaemonSet ip-masq-agent.
Console
Acesse a página Cargas de trabalho no console Google Cloud .
Em Filtro , faça o seguinte:
- Clique em para limpar o filtro Is system object: False.
- Filtre as seguintes propriedades:
- Nome:
ip-masq-agent. - Cluster: o nome do cluster.
- Nome:
Se houver um
ip-masq-agentDaemonSet, você verá o registro DaemonSet na tabela. Se oip-masq-agentDaemonSet não existir, nenhuma linha será exibida.
Para criar o ip-masq-agent ConfigMap e implantar o ip-masq-agent DaemonSet,
consulte Como configurar e implantar o ip-masq-agent.
Como verificar o ip-masq-agent ConfigMap
Para verificar se o cluster está executando o ConfigMap ip-masq-agent, use a
Google Cloud CLI ou o console Google Cloud .
gcloud
Veja as credenciais do cluster:
gcloud container clusters get-credentials CLUSTER_NAMESubstitua
CLUSTER_NAMEpelo nome do cluster.Descreva o
ip-masq-agentConfigMap no namespacekube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemSe o
ip-masq-agentConfigMap existir, a saída será semelhante a esta:Name: ip-masq-agent Namespace: kube-system Labels: <none> Annotations: <none> Data ==== config: ---- nonMasqueradeCIDRs: - 198.15.5.92/24 - 10.0.0.0/8 masqLinkLocal: false resyncInterval: 60s BinaryData ==== Events: <none>Se o
ip-masq-agentConfigMap não existir, a saída será semelhante a esta:Error from server (NotFound): configmaps "ip-masq-agent" not found
Console
Acesse a página Configuração no console do Google Cloud .
Em Filtro , faça o seguinte:
- Clique em para limpar o filtro Is system object: False.
- Filtre as seguintes propriedades:
- Nome:
ip-masq-agent. - Cluster: o nome do cluster.
- Nome:
Se o
ip-masq-agentConfigMap existir, você verá o registro do ConfigMap na tabela. Se oip-masq-agentConfigMap não existir, nenhuma linha será exibida.
Se o cluster já tiver o ip-masq-agent ConfigMap, será possível configurá-lo e
implantá-lo.
Como configurar e implantar o ip-masq-agent
Nesta seção, mostramos como criar ou editar o ip-masq-agent
ConfigMap e como implantar ou excluir o ip-masq-agent DaemonSet. Para
determinar quais tarefas você precisa executar, é necessário determinar se o
cluster já tem o ip-masq-agent ConfigMap e o ip-masq-agent
DaemonSet.
Como criar o ip-masq-agent ConfigMap
As etapas a seguir mostram como criar o ip-masq-agent ConfigMap. Se
seu cluster já tiver o ip-masq-agent ConfigMap, edite um
ip-masq-agent ConfigMap.
Crie um arquivo de configuração usando o modelo a seguir e salve-o localmente. Use qualquer nome para a cópia local desse arquivo de configuração.
nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVALUNIT_OF_TIMESubstitua:
CIDR_1eCIDR_2: os intervalos de endereços IP estão no formato CIDR. Quando os pacotes são enviados para esses destinos, o cluster não mascara as origens de endereço IP de origem e preserva os endereços IP do pod de origem. Se você precisar de mais de dois CIDRs, adicione mais entradas à listanonMasqueradeCIDRsseguindo o mesmo formato. No mínimo, a propriedadenonMasqueradeCIDRsprecisa incluir os intervalos de endereços IP do nó e do pod do cluster.SYNC_INTERVAL: quanto tempo depois que cada podip-masq-agentverifica o conteúdo doip-masq-agentConfigMap e grava todas as alterações no arquivo/etc/config/ip-masq-agentlocal. O padrão é60.UNIT_OF_TIME: a unidade de tempo do resyncInterval. Os valores válidos incluems(para segundos) oums(para milissegundos). O padrão és.
Defina
masqLinkLocalcomo falso (o padrão), a menos que você precise ativar o mascaramento de pacotes enviados para vincular endereços IPv4 locais. Para mais informações, consulte Mascaramento para destinos de link local.Criar o recurso ConfigMap:
kubectl create configmap ip-masq-agent \ --namespace=kube-system \ --from-file=config=LOCAL_CONFIG_FILE_PATHSubstitua
LOCAL_CONFIG_FILE_PATHpelo caminho para o arquivo de configuração que você criou na etapa anterior.Descreva o
ip-masq-agentConfigMap no namespacekube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemA saída será assim:
Name: ip-masq-agent Namespace: kube-system Labels: <none> Annotations: <none> Data ==== config: ---- nonMasqueradeCIDRs: - 198.15.5.92/24 - 10.0.0.0/8 masqLinkLocal: false resyncInterval: 60s BinaryData ==== Events: <none>Essa saída inclui o parâmetro
configcom as mudanças na configuração. Agora, é possível implantar oip-masq-agentDeamonSet.
Como editar um ip-masq-agent ConfigMap
É possível modificar o conteúdo de um ip-masq-agent ConfigMap
concluindo as seguintes etapas:
Abra o ConfigMap em um editor de texto:
kubectl edit configmap ip-masq-agent --namespace=kube-systemEdite o conteúdo do arquivo ConfigMap:
apiVersion: v1 data: config: | nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVALUNIT_OF_TIME kind: ConfigMap metadata: name: ip-masq-agent namespace: kube-systemSubstitua:
CIDR_1eCIDR_2: os intervalos de endereços IP estão no formato CIDR. Quando os pacotes são enviados para esses destinos, o cluster não mascara as origens de endereço IP de origem e preserva os endereços IP do pod de origem. Se você precisar de mais de dois CIDRs, adicione mais entradas à listanonMasqueradeCIDRsseguindo o mesmo formato. No mínimo, a propriedadenonMasqueradeCIDRsprecisa incluir os intervalos de endereços IP do nó e do pod do cluster.SYNC_INTERVAL: quanto tempo depois que cada podip-masq-agentverifica o conteúdo doip-masq-agentConfigMap e grava todas as alterações no arquivo/etc/config/ip-masq-agentlocal. O padrão é60.UNIT_OF_TIME: a unidade de tempo do resyncInterval. Os valores válidos incluems(para segundos) oums(para milissegundos). O padrão és.
Defina
masqLinkLocalcomo falso (o padrão), a menos que você precise ativar o mascaramento de pacotes enviados para vincular endereços IPv4 locais. Para mais informações, consulte Mascaramento para destinos de link local.Descreva o
ip-masq-agentConfigMap no namespacekube-system:kubectl describe configmaps/ip-masq-agent -n kube-systemA saída será assim:
Name: ip-masq-agent Namespace: kube-system Labels: <none> Annotations: <none> Data ==== config: ---- nonMasqueradeCIDRs: - 198.15.5.92/24 - 10.0.0.0/8 masqLinkLocal: false resyncInterval: 60s BinaryData ==== Events: <none>Essa saída inclui o parâmetro
config, que corresponde ao valor de configuração do arquivo criado.
Como implantar o ip-masq-agent DaemonSet
Depois de criar ou editar o ip-masq-agent ConfigMap, implante o
ip-masq-agent DaemonSet.
Salve o seguinte manifesto como um arquivo:
apiVersion: apps/v1 kind: DaemonSet metadata: name: ip-masq-agent namespace: kube-system spec: selector: matchLabels: k8s-app: ip-masq-agent template: metadata: labels: k8s-app: ip-masq-agent spec: hostNetwork: true containers: - name: ip-masq-agent image: gke.gcr.io/ip-masq-agent:v2.12.3-gke.4@sha256:b5db41ddaf863b660da330322714f668101482b528829c50c53229d901d11af5 args: - --v=2 - --logtostderr=false - --log_file=/dev/stdout - --log_file_max_size=0 # The masq-chain must be IP-MASQ - --masq-chain=IP-MASQ # To non-masquerade reserved IP ranges by default, # uncomment the following line. # - --nomasq-all-reserved-ranges # Must be set to false when using Dataplane V2. - --random-fully=false securityContext: privileged: false capabilities: drop: ["ALL"] add: ["NET_ADMIN", "NET_RAW"] allowPrivilegeEscalation: false seccompProfile: type: RuntimeDefault volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: ip-masq-agent optional: true items: - key: config path: ip-masq-agent tolerations: - effect: NoSchedule operator: Exists - effect: NoExecute operator: Exists - key: "CriticalAddonsOnly" operator: "Exists"
Esse manifesto cria um volume chamado
config-volume, que é ativado conforme especificado pelo volumeMount do contêiner.Se você precisar editar esse manifesto, considere as seguintes condições:
O nome do volume pode ser qualquer um, mas precisa corresponder ao nome
volumeMountdo contêiner.O nome do ConfigMap precisa corresponder ao nome do
configMapreferenciado no volumeconfig-volumeno pod.O nome da cadeia (
--masq-chain) precisa serIP-MASQ. Caso contrário, o GKE não modificará as regras de mascaramento padrão.Os pods do DaemonSet são lidos no arquivo
ip-masq-agent. O conteúdo do arquivoip-masq-agenté o valor da chaveconfigno ConfigMap.Se você usar intervalos de IP reservados não mascarados por padrão, remova a marca de comentário da linha
- --nomasq-all-reserved-rangesna seçãoarg.
Implante o DaemonSet:
kubectl apply -f LOCAL_FILE_PATHSubstitua
LOCAL_FILE_PATHpelo caminho para o arquivo criado na etapa anterior.
É possível atualizar manualmente o DaemonSet ip-masq-agent que você criou. Para saber mais, consulte
Como atualizar o DaemonSet.
Como excluir o ip-masq-agent
Nesta seção, mostramos como excluir o ip-masq-agent DaemonSet e o
ip-masq-agent ConfigMap. A exclusão do ip-masq-agent não reverte as configurações
de mascaramento de IP nos nós.
Como excluir o ip-masq-agent DaemonSet
Se você criou o ip-masq-agent DaemonSet manualmente, é possível excluí-lo
executando o seguinte comando:
kubectl delete daemonsets ip-masq-agent -n kube-system
Como excluir o ip-masq-agent ConfigMap
Para excluir completamente o ip-masq-agent ConfigMap, execute o seguinte comando:
kubectl delete configmap ip-masq-agent -n kube-system
Solução de problemas
As seções a seguir fornecem dicas para solução de problemas.
Solução de problemas gerais
As etapas a seguir ajudam a diagnosticar problemas com o mascaramento de endereço IP:
- Confirme o status do
ip-masq-agent. Se o ConfigMap não estiver definido, o tráfego para todos os destinos padrão não será mascarado e preservará o endereço IP do pod. O tráfego para outros destinos preserva o endereço IP do nó. - Confirme a versão da imagem
ip-masq-agentespecificada no DaemonSet. Se a versão do DaemonSetip-masq-agentnão for a mais recente, siga as etapas de implantação para atualizar o DaemonSet. - Verifique se a cadeia IP-MASQ está preenchida corretamente nas tabelas de IP NAT executando o comando
sudo iptables -t nat -L IP-MASQno nó afetado. Se osnonMasqueradeCIDRsdefinidos no ConfigMap não estiverem aparecendo nas tabelas de IP NAT, verifique se não há erros de digitação no arquivo de configuração usado para criar o ConfigMap. - Confirme se o destino permite os intervalos de endereços IP do nó e pod.
- Se o tráfego não estiver acessível no nó ou no pod, execute um teste de conectividade.
Problema: o endereço IP do pod muda para o endereço IP do nó
Ao usar um agente de mascaramento de IP, você pode notar que o endereço IP de origem do pod usa inesperadamente o endereço IP do nó quando os pods se comunicam com destinos externos.
O problema é causado por uma lista de conversão de endereços de rede de origem (SNAT) personalizada ausente ou incompleta. Quando você usa um agente de mascaramento de IP, o SNAT padrão
do cluster é usado quando o ConfigMap está ausente ou não contém uma
lista nonMasqueradeCIDRs. Quando um pacote sai de um pod, o SNAT padrão muda o endereço IP de origem do IP do pod para o endereço IP interno do nó. Para saber mais sobre SNAT, consulte
Agente de mascaramento de IP.
Para resolver o problema, configure uma lista de SNAT personalizada definindo uma lista
nonMasqueradeCIDRs no ConfigMap ip-masq-agent:
Abra o ConfigMap
ip-masq-agent:kubectl edit configmap ip-masq-agent --namespace=kube-systemRevise a lista
nonMasqueradeCIDRsno ConfigMap. A lista denonMasqueradeCIDRsprecisa estar presente e completa. Exemplo:... nonMasqueradeCIDRs: - 35.100.0.0/16 ...Se a lista estiver faltando ou incompleta, adicione ou modifique a lista
nonMasqueradeCIDRspara incluir os intervalos de IP de destino em que você quer preservar os endereços IP de origem do pod. Essa lista também precisa incluir os endereços que você quer usar com o Cloud NAT.Se você não quiser que nenhum tráfego externo use SNAT, defina o campo
nonMasqueradeCIDRscomo0.0.0.0/0. Exemplo:... nonMasqueradeCIDRs: - 0.0.0.0/0 ...Quando o tráfego não usa SNAT, todos os pacotes enviados dos pods retêm o endereço IP do pod como endereço IP de origem, independente do destino.
Verifique o endereço IP de origem dos pacotes de saída dos seus pods. Para verificar esse endereço, faça uma captura de pacote. Se isso não for possível, verifique o endereço IP do nó, que deve ser o endereço IP de origem dos pacotes de saída sujeitos a SNAT, com o seguinte comando:
kubectl get nodes -o wide
A seguir
- Saiba como usar a política NAT de saída para configurar o mascaramento de IP em clusters do Autopilot.
- Saiba como criar um cluster nativo de VPC.
- Leia a visão geral de redes no GKE.
- Saiba mais sobre como configurar redes autorizadas.