Como configurar um agente de mascaramento de IP em clusters padrão


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 Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Como verificar o status ip-masq-agent

Esta seção mostra como:

  • Determine se o cluster tem um ip-masq-agent DaemonSet.
  • Verifique o recurso ip-masq-agent ConfigMap.

Como verificar o ip-masq-agent DaemonSet

Para verificar se o cluster está executando o DaemonSet ip-masq-agent, use a Google Cloud CLI ou o Console do Google Cloud.

gcloud

  1. Veja as credenciais do cluster:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

  2. Pesquise ip-masq-agent no namespace kube-system:

    kubectl get daemonsets/ip-masq-agent -n kube-system
    

    Se o ip-masq-agent DaemonSet 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>          13d
    

    Se o ip-masq-agent DaemonSet não existir, a saída será semelhante a esta:

    Error from server (NotFound): daemonsets.apps "ip-masq-agent" not found
    

Console

  1. Acesse a página Cargas de trabalho no console do Google Cloud.

    Acesse "Cargas de trabalho"

  2. Em Filtro , faça o seguinte:

    1. Clique em para limpar o filtro Is system object: False.
    2. Filtre as seguintes propriedades:
      • Nome: ip-masq-agent.
      • Cluster: o nome do cluster.

    Se houver um ip-masq-agent DaemonSet, você verá o registro DaemonSet na tabela. Se o ip-masq-agent DaemonSet 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 do Google Cloud.

gcloud

  1. Veja as credenciais do cluster:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

  2. Descreva o ip-masq-agent ConfigMap no namespace kube-system:

    kubectl describe configmaps/ip-masq-agent -n kube-system
    

    Se o ip-masq-agent ConfigMap 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-agent ConfigMap não existir, a saída será semelhante a esta:

    Error from server (NotFound): configmaps "ip-masq-agent" not found
    

Console

  1. Acesse a página Configuração no console do Google Cloud.

    Acessar as configurações

  2. Em Filtro , faça o seguinte:

    1. Clique em para limpar o filtro Is system object: False.
    2. Filtre as seguintes propriedades:
      • Nome: ip-masq-agent.
      • Cluster: o nome do cluster.

    Se o ip-masq-agent ConfigMap existir, você verá o registro do ConfigMap na tabela. Se o ip-masq-agent ConfigMap 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.

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

    Substitua:

    • CIDR_1 e CIDR_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 à lista nonMasqueradeCIDRs seguindo o mesmo formato. No mínimo, a propriedade nonMasqueradeCIDRs precisa incluir os intervalos de endereços IP do nó e do pod do cluster.

    • SYNC_INTERVAL: quanto tempo depois que cada pod ip-masq-agent verifica o conteúdo do ip-masq-agent ConfigMap e grava todas as alterações no arquivo /etc/config/ip-masq-agent local. O padrão é 60.

    • UNIT_OF_TIME: a unidade de tempo do resyncInterval. Os valores válidos incluem s (para segundos) ou ms (para milissegundos). O padrão é s.

    Defina masqLinkLocal como 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.

  2. Criar o recurso ConfigMap:

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

    Substitua LOCAL_CONFIG_FILE_PATH pelo caminho para o arquivo de configuração que você criou na etapa anterior.

  3. Descreva o ip-masq-agent ConfigMap no namespace kube-system:

    kubectl describe configmaps/ip-masq-agent -n kube-system
    

    A 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 com as mudanças na configuração. Agora, é possível implantar o ip-masq-agent DeamonSet.

Como editar um ip-masq-agent ConfigMap

É possível modificar o conteúdo de um ip-masq-agent ConfigMap concluindo as seguintes etapas:

  1. Abra o ConfigMap em um editor de texto:

    kubectl edit configmap ip-masq-agent --namespace=kube-system
    
  2. Edite 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-system
    

    Substitua:

    • CIDR_1 e CIDR_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 à lista nonMasqueradeCIDRs seguindo o mesmo formato. No mínimo, a propriedade nonMasqueradeCIDRs precisa incluir os intervalos de endereços IP do nó e do pod do cluster.

    • SYNC_INTERVAL: quanto tempo depois que cada pod ip-masq-agent verifica o conteúdo do ip-masq-agent ConfigMap e grava todas as alterações no arquivo /etc/config/ip-masq-agent local. O padrão é 60.

    • UNIT_OF_TIME: a unidade de tempo do resyncInterval. Os valores válidos incluem s (para segundos) ou ms (para milissegundos). O padrão é s.

    Defina masqLinkLocal como 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.

  3. Descreva o ip-masq-agent ConfigMap no namespace kube-system:

    kubectl describe configmaps/ip-masq-agent -n kube-system
    

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

  1. 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.11.0-gke.23@sha256:f50757332ee45c0fb9f5856552a3ed16548c1de3c33c4e520a02d22e30af96ae
            args:
            # 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 volumeMount do contêiner.

    • O nome do ConfigMap precisa corresponder ao nome do configMap referenciado no volume config-volume no pod.

    • O nome da cadeia (--masq-chain) precisa ser IP-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 arquivo ip-masq-agent é o valor da chave config no 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-ranges na seção arg.

  2. Implante o DaemonSet:

    kubectl apply -f LOCAL_FILE_PATH
    

    Substitua LOCAL_FILE_PATH pelo 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 etapas a seguir apresentam informações sobre solução de problemas:

  • 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ó.
  • Verifique se a cadeia IP-MASQ está preenchida corretamente nas tabelas de IP NAT executando o comando sudo iptables -t nat -L IP-MASQ no nó afetado. Se os nonMasqueradeCIDRs definidos 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 que o pod está tentando acessar está incluído no nonMasqueradeCIDRs no ConfigMap. Se o destino não estiver no nonMasqueradeCIDRs, o tráfego preservará o endereço IP do nó.
  • 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.

A seguir