En esta página, se explica cómo configurar clústeres creados en el modo estándar de Google Kubernetes Engine (GKE) para realizar el enmascaramiento de IP con ip-masq-agent
. Si deseas obtener más información sobre el enmascaramiento de IP en modo Autopilot de GKE, consulta la página Usa la política de NAT de salida para configurar el enmascaramiento de IP en clústeres de Autopilot.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Asegúrate de que habilitaste la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Asegúrate de que instalaste Google Cloud CLI.
- Establece la configuración predeterminada de Google Cloud CLI para tu proyecto mediante uno de los siguientes métodos:
- Usa
gcloud init
si deseas ver una explicación sobre cómo configurar los valores predeterminados del proyecto. - Usa
gcloud config
para configurar el ID, la zona y la región del proyecto de manera individual. -
Ejecuta
gcloud init
y sigue las instrucciones:gcloud init
Si usas SSH en un servidor remoto, usa la marca
--console-only
para evitar que el comando abra un navegador:gcloud init --console-only
- Sigue las instrucciones para autorizar a la CLI de gcloud a usar tu cuenta de Google Cloud.
- Crea una configuración nueva o selecciona una existente.
- Elige un proyecto de Google Cloud.
- Elige una zona de Compute Engine predeterminada.
- Elige una región de Compute Engine predeterminada.
- Establece tu ID del proyecto predeterminado:
gcloud config set project PROJECT_ID
- Configura la región de Compute Engine predeterminada (por ejemplo,
us-central1
):gcloud config set compute/region COMPUTE_REGION
- Configura la zona de Compute Engine predeterminada (por ejemplo,
us-central1-c
):gcloud config set compute/zone COMPUTE_ZONE
- Actualiza
gcloud
a la versión más reciente:gcloud components update
gcloud init
gcloud config
Cuando configuras las ubicaciones predeterminadas, puedes evitar errores en la CLI de gcloud como el siguiente: One of [--zone, --region] must be supplied: Please specify location
.
Comprobar el estado del ip-masq-agent
En esta sección se muestra cómo realizar las siguientes acciones:
- Determinar si tu clúster tiene un DaemonSet de
ip-masq-agent
. - Verificar el recurso ConfigMap
ip-masq-agent
.
Comprobar el DaemonSet del ip-masq-agent
Para verificar si tu clúster ejecuta el DaemonSet ip-masq-agent
, usa Google Cloud CLI o Google Cloud Console.
gcloud
Obtén las credenciales para su clúster.
gcloud container clusters get-credentials CLUSTER_NAME
Reemplaza
CLUSTER_NAME
por el nombre del clúster.Busca el
ip-masq-agent
en el espacio de nombreskube-system
:kubectl get daemonsets/ip-masq-agent -n kube-system
Si el DaemonSet
ip-masq-agent
existe, el resultado es similar al siguiente:NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ip-masq-agent 3 3 3 3 3 <none> 13d
Si el DaemonSet
ip-masq-agent
no existe, el resultado es similar al siguiente:Error from server (NotFound): daemonsets.apps "ip-masq-agent" not found
Console
Ve a la página Cargas de trabajo en la consola.
En
Filtro, haz lo siguiente:- Haz clic en para borrar el filtro Es objeto del sistema: Falso.
- Filtra las siguientes propiedades:
- Nombre:
ip-masq-agent
. - Clúster: Es el nombre de tu clúster.
- Nombre:
Si existe el DaemonSet
ip-masq-agent
, puedes ver el registro DaemonSet en la tabla. Si el DaemonSetip-masq-agent
no existe, no se muestran las filas.
Para crear el ConfigMap ip-masq-agent
e implementar el DaemonSet de ip-masq-agent
, consulta Configura e implementa ip-masq-agent
.
Verifica el ConfigMap de ip-masq-agent
Para verificar si tu clúster ejecuta el ConfigMap ip-masq-agent
, usa Google Cloud CLI o Google Cloud Console.
gcloud
Obtén las credenciales para su clúster.
gcloud container clusters get-credentials CLUSTER_NAME
Reemplaza
CLUSTER_NAME
por el nombre del clúster.Describe el ConfigMap de
ip-masq-agent
en el espacio de nombreskube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
Si el ConfigMap de
ip-masq-agent
existe, el resultado es similar al siguiente: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>
Si el ConfigMap de
ip-masq-agent
no existe, el resultado es similar al siguiente:Error from server (NotFound): configmaps "ip-masq-agent" not found
Console
Dirígete a la página de Configuración en la consola.
En
Filtro, haz lo siguiente:- Haz clic en para borrar el filtro Es objeto del sistema: Falso.
- Filtra las siguientes propiedades:
- Nombre:
ip-masq-agent
. - Clúster: Es el nombre de tu clúster.
- Nombre:
Si existe el ConfigMap de
ip-masq-agent
, puedes ver el registro ConfigMap en la tabla. Si ConfigMap deip-masq-agent
no existe, no se muestran filas.
Si el clúster ya tiene el ConfigMap de ip-masq-agent
, puedes configurarlo e implementarlo.
Implementa y configura ip-masq-agent
En esta sección, se muestra cómo crear o editar el ConfigMap de ip-masq-agent
y cómo implementar o borrar el DaemonSet de ip-masq-agent
. Para determinar qué tareas debes realizar, primero debes determinar si tu clúster ya tiene el ConfigMap de ip-masq-agent
y el DaemonSet de ip-masq-agent
.
Crea el ConfigMap de ip-masq-agent
En los siguientes pasos, se muestra cómo crear el ConfigMap de ip-masq-agent
. Si tu clúster ya tiene el ConfigMap de ip-masq-agent
, edita un ConfigMap de ip-masq-agent existente en su lugar.
Crea un archivo de configuración con la siguiente plantilla y guárdalo de forma local. Puedes usar cualquier nombre para la copia local de este archivo de configuración.
nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVAL
Reemplaza lo siguiente:
CIDR_1
yCIDR_2
: Son los rangos de direcciones IP en formato CIDR. Cuando se envían paquetes a estos destinos, tu clúster no enmascara las fuentes de las direcciones IP y conserva las direcciones IP del Pod de origen. Si necesitas más de dos CIDR, agrega más entradas a la listanonMasqueradeCIDRs
con el mismo formato. Como mínimo, la propiedadnonMasqueradeCIDRs
debe incluir los rangos de direcciones IP del nodo y el Pod del clúster.SYNC_INTERVAL
: Es la cantidad de segundos después de que cada Pod deip-masq-agent
verifica el contenido del ConfigMap deip-masq-agent
y escribe cualquier cambio en su archivo/etc/config/ip-masq-agent
local. El formato esNx
, en el queN
es un número entero yx
es una unidad de tiempo, comos
(para segundos) oms
(para milisegundos). Si no se especifica, el valor predeterminado es60s
.
Configura
masqLinkLocal
como falso (predeterminado), a menos que necesites habilitar el enmascaramiento para los paquetes enviados a fin de vincular direcciones IPv4 locales. Si deseas obtener más información, consulta Enmascaramiento a destinos de vínculos locales.Crea el recurso ConfigMap:
kubectl create configmap ip-masq-agent \ --namespace=kube-system \ --from-file=config=LOCAL_CONFIG_FILE_PATH
Reemplaza
LOCAL_CONFIG_FILE_PATH
por la ruta de acceso al archivo de configuración que creaste en el paso anterior.Describe el ConfigMap de
ip-masq-agent
en el espacio de nombreskube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
El resultado es similar a este:
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>
En esta salida, se incluye el parámetro
config
con tus cambios de configuración. Ahora puedes implementar el DeamonSet deip-masq-agent
.
Edita un ConfigMap de ip-masq-agent
existente
Para modificar el contenido de un ConfigMap de ip-masq-agent
existente, sigue estos pasos:
Abre el ConfigMap en un editor de texto:
kubectl edit configmap ip-masq-agent --namespace=kube-system
Edita el contenido del archivo ConfigMap:
apiVersion: v1 data: config: | nonMasqueradeCIDRs: - CIDR_1 - CIDR_2 masqLinkLocal: false resyncInterval: SYNC_INTERVAL kind: ConfigMap metadata: name: ip-masq-agent namespace: kube-system
Reemplaza lo siguiente:
CIDR_1
yCIDR_2
: Son los rangos de direcciones IP en formato CIDR. Cuando se envían paquetes a estos destinos, tu clúster no enmascara las fuentes de las direcciones IP y conserva las direcciones IP del Pod de origen. Si necesitas más de dos CIDR, agrega más entradas a la listanonMasqueradeCIDRs
con el mismo formato. Como mínimo, la propiedadnonMasqueradeCIDRs
debe incluir los rangos de direcciones IP del nodo y el Pod del clúster.SYNC_INTERVAL
: Es la cantidad de segundos después de que cada Pod deip-masq-agent
verifica el contenido del ConfigMap deip-masq-agent
y escribe cualquier cambio en su archivo/etc/config/ip-masq-agent
local. El formato esNx
, en el queN
es un número entero yx
es una unidad de tiempo, comos
(para segundos) oms
(para milisegundos). Si no se especifica, el valor predeterminado es60s
.
Configura
masqLinkLocal
como falso (predeterminado), a menos que necesites habilitar el enmascaramiento para los paquetes enviados a fin de vincular direcciones IPv4 locales. Si deseas obtener más información, consulta Enmascaramiento a destinos de vínculos locales.Describe el ConfigMap de
ip-masq-agent
en el espacio de nombreskube-system
:kubectl describe configmaps/ip-masq-agent -n kube-system
El resultado es similar a este:
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>
En esta salida, se incluye el parámetro
config
, que coincide con el valor de configuración del archivo que creaste.
Implementa el DaemonSet de ip-masq-agent
Después de crear o editar tu ConfigMap de ip-masq-agent
, implementa el DaemonSet de ip-masq-agent
.
Guarda el siguiente manifiesto como un archivo YAML.
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: k8s.gcr.io/networking/ip-masq-agent:v2.7.0 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 securityContext: privileged: true 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"
En este manifiesto, se crea un volumen llamado
config-volume
que se activa según lo especificado por el volumeMount del contenedor.Si necesitas editar este manifiesto, ten en cuenta las siguientes condiciones:
El nombre del volumen puede ser cualquier cosa, pero debe coincidir con el nombre
volumeMount
del contenedor.El nombre del ConfigMap debe coincidir con el nombre del
configMap
al que se hace referencia en el volumenconfig-volume
en el Pod.El nombre de la cadena (
--masq-chain
) debe serIP-MASQ
. De lo contrario, GKE no anula las reglas de enmascaramiento predeterminadas.Pods del DaemonSet leídos desde el archivo
ip-masq-agent
El contenido del archivoip-masq-agent
es el valor de la claveconfig
en el ConfigMap.Si usas rangos de IP reservados sin enmascarar de forma predeterminada, quita el comentario de la línea
- --nomasq-all-reserved-ranges
en la secciónarg
.
Implementa el DaemonSet:
kubectl apply -f LOCAL_FILE_PATH
Reemplaza
LOCAL_FILE_PATH
por la ruta de acceso al archivo que creaste en el paso anterior.
Borra ip-masq-agent
En esta sección, se muestra cómo borrar el DaemonSet de ip-masq-agent
y el ConfigMap de ip-masq-agent
.
Borra el DaemonSet de ip-masq-agent
Si creaste el DaemonSet de ip-masq-agent
de forma manual, puedes borrarlo si ejecutas el siguiente comando:
kubectl delete daemonsets ip-masq-agent -n kube-system
Borra el ConfigMap de ip-masq-agent
Para borrar por completo el ConfigMap de ip-masq-agent
, ejecuta el siguiente comando:
kubectl delete configmap ip-masq-agent -n kube-system
Soluciona problemas
En los siguientes pasos, se proporciona información para la solución de problemas:
- Confirma el estado de
ip-masq-agent
. Si no se define el ConfigMap, el tráfico a todos los destinos predeterminados no se enmascara y conserva la dirección IP del Pod. El tráfico a otros destinos conserva la dirección IP del nodo. - Confirma que el destino al que intenta llegar el Pod se incluye en
nonMasqueradeCIDRs
en el ConfigMap. Si el destino no está ennonMasqueradeCIDRs
, el tráfico conserva la dirección IP del nodo. - Confirma que el destino permita los rangos de direcciones IP del nodo y del Pod.
- Si no se puede acceder al tráfico desde el nodo o el Pod, ejecuta una prueba de conectividad.
¿Qué sigue?
- Más información sobre alias de IP.
- Consulta la descripción general de la red GKE.
- Obtén información sobre cómo configurar redes autorizadas.