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
Veja as credenciais do cluster:
gcloud container clusters get-credentials CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo nome do cluster.Pesquise
ip-masq-agent
no namespacekube-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
Acesse a página Cargas de trabalho 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 houver um
ip-masq-agent
DaemonSet, você verá o registro DaemonSet na tabela. Se oip-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
Veja as credenciais do cluster:
gcloud container clusters get-credentials CLUSTER_NAME
Substitua
CLUSTER_NAME
pelo nome do cluster.Descreva o
ip-masq-agent
ConfigMap no namespacekube-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
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-agent
ConfigMap existir, você verá o registro do ConfigMap na tabela. Se oip-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.
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
eCIDR_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 à listanonMasqueradeCIDRs
seguindo o mesmo formato. No mínimo, a propriedadenonMasqueradeCIDRs
precisa incluir os intervalos de endereços IP do nó e do pod do cluster.SYNC_INTERVAL
: quanto tempo depois que cada podip-masq-agent
verifica o conteúdo doip-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 incluems
(para segundos) oums
(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.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.Descreva o
ip-masq-agent
ConfigMap no namespacekube-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 oip-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:
Abra o ConfigMap em um editor de texto:
kubectl edit configmap ip-masq-agent --namespace=kube-system
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
eCIDR_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 à listanonMasqueradeCIDRs
seguindo o mesmo formato. No mínimo, a propriedadenonMasqueradeCIDRs
precisa incluir os intervalos de endereços IP do nó e do pod do cluster.SYNC_INTERVAL
: quanto tempo depois que cada podip-masq-agent
verifica o conteúdo doip-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 incluems
(para segundos) oums
(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.Descreva o
ip-masq-agent
ConfigMap no namespacekube-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.
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 volumeconfig-volume
no 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 chaveconfig
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çãoarg
.
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 osnonMasqueradeCIDRs
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 nononMasqueradeCIDRs
, 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
- Saiba mais sobre IPs de alias.
- Leia a visão geral da rede GKE.
- Saiba sobre como configurar redes autorizadas.