Agente de enmascaramiento de IP

Esta página explica cómo funciona el agente de enmascaramiento de IP de Google Kubernetes Engine.

Descripción general

masquerading de IP es una forma de traducción de direcciones de red (NAT) que se usa para realizar traducciones de direcciones IP de muchos a uno. Masquerading enmascara múltiples direcciones IP de origen en una sola dirección.

El uso de masquerading de IP en tus clústeres puede aumentar tu seguridad evitando que las direcciones IP de Pod individuales se expongan al tráfico fuera del rango de vínculo local(169.254.0.0/16) y rangos de IP arbitrarios adicionales.

Además, el masquerading de IP te permite configurar la comunicación entre los rangos de IP sin enmascaramiento, como pods en el rango 192.168.0.0/16 interactúan con los recursos de red en el rango CIDR del clúster (10.0.0.0/8).

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de habilitar la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de instalar el SDK de Cloud.
  • Configura el ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, configura tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, configura tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Cómo funciona ip-masq-agent

La masquerading de IP en GKE se controla con la herramienta ip-masq-agent. ip-masq-agent se habilita automáticamente en GKE v1.7 y superior cuando se cumple una o más de las siguientes condiciones adicionales:

  • El clúster tiene una política de red.
  • El rango CIDR del clúster no está dentro de 10.0.0.0/8.

Si tu clúster usa GKE v1.7 o superior, pero no cumple con las otras condiciones ip-masq-agent para habilitarse automáticamente, puedes crear el agente ip-masq-agent manualmente.

ip-masq-agent configura las reglas iptables para controlar el masquerading de direcciones IP de nodo/Pod cuando se envía tráfico a destinos fuera de los rangos de IP del nodo y del clúster. Las direcciones IP del Pod están enmascaradas detrás de la dirección de tu nodo.

Según la configuración predeterminada, el agente está configurado para tratar los tres rangos de IP privados especificados por RFC 1918 como CIDRs sin enmascarar:

  • 10.0.0.0/8, que es el CIDR de clúster usado para las direcciones IP del Pod
  • 172.16.0.0/12
  • 192.168.0.0/16

Según la configuración predeterminada, masquerading de IP también trata el rango de vínculo local (169.254.0.0/16) como un CIDR sin enmascaramiento.

Según la configuración predeterminada, el agente vuelve a cargar su archivo de configuración desde el archivo /etc/config/ip-masq-agent en su contenedor cada 60 segundos.

A continuación, se muestra el conjunto predeterminado de reglas iptables aplicadas por ip-masq-agent:

iptables -t nat -L IP-MASQ-AGENT
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

Configura el Agente con un ConfigMap

Si el conjunto predeterminado de reglas que se muestra arriba no son suficientes en tu clúster, puedes usar ConfigMap para personalizar los rangos de IP afectados.

El archivo ConfigMap debe estar escrito en YAML o JSON y debe llamarse config.

El archivo puede contener tres claves, de las cuales todas son opcionales:

  • nonMasqueradeCIDRs: Una lista de strings en notación CIDR que especifican los rangos de direcciones IP que no usan masquerading de IP.
  • masqLinkLocal: Un valor booleano que indica si se debe enmascarar el tráfico al prefijo del vínculo local (169.254.0.0/16). El valor predeterminado es false.
  • resyncInterval: Un valor de número entero que representa el intervalo en el que el agente intenta sincronizar su archivo ConfigMap desde el disco. El formato es Nx, dónde N es un número entero y x es una unidad de tiempo como s o ms.

Por ejemplo, el siguiente ConfigMap config, permite que 10.0.0.0/8 sea excluido por ip-masq-agent:

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s

Según la configuración predeterminada, el rango de vínculo local (169.254.0.0/16) está exento de masquerading de IP.

Para habilitar ip-masq-agent en masquerading de IP en el rango de vínculo local, establece el valor de la clave masqLinkLocal en true en ConfigMap.

Por ejemplo:

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

Cómo agregar un ConfigMap a tu clúster

Para agregar un ConfigMap a tu clúster, ejecuta el siguiente comando desde tu shell o ventana de terminal:

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

Donde:

  • [CONFIGMAP_NAME] es lo que eliges para el recurso ConfigMap, como ip-masq-agent.

Por ejemplo:

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

Una vez completada la sincronización, deberías ver los cambios en iptables:

iptables -t nat -L IP-MASQ-AGENT
Chain IP-MASQ-AGENT (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

Cómo crear de forma manual un recurso ip-masq-agent (opcional)

Es posible que debas crear y configurar manualmente ip-masq-agent. Para hacerlo, necesitas implementar un recurso ip-masq-agent en tu clúster.

Ejecuta el siguiente comando:

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

Este comando aplica un archivo de configuración que proporciona Kubernetes.

A continuación, aplica la etiqueta masq-agent-ds-ready a los nodos y DaemonSets que usan el recurso ip-masq-agent que creaste. Los nodos de etiquetado y DaemonSets indican que ip-masq-agent debe operar en estos 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

Donde [NAME] es el nombre del recurso o los recursos.

Para configurar la herramienta ip-masq-agent, consulta Configura el agente usando un ConfigMap.

¿Qué sigue?

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...