En esta página, se muestra cómo implementar direcciones IP persistentes en los Pods de Google Kubernetes Engine (GKE). Puedes controlar las herramientas de redes de tus Pods de GKE con la asignación de direcciones IP persistentes personalizada. Para obtener más información sobre las direcciones IP persistentes, sus casos de uso y beneficios, consulta Información sobre las direcciones IP persistentes para el Pod de GKE.
Requisitos
- GKE versión 1.29 o posterior.
- Elige entre reservar direcciones IP proporcionadas por Google (direcciones IP proporcionadas por Google) o usar tus propias direcciones IP (BYOIP).
- Configura la aplicación que se ejecuta dentro de los Pods para que reconozca y use las direcciones IP persistentes asignadas.
- Las direcciones IP persistentes para los Pods de GKE requieren GKE Dataplane V2 y clústeres habilitados para varias redes.
Limitaciones
- La red predeterminada no admite direcciones IP persistentes. Debes habilitar las redes múltiples durante la creación del clúster.
- Configura tus aplicaciones para que usen direcciones IP persistentes asignadas. GKE no agrega de forma automática la configuración de la dirección IP a las interfaces de red del Pod.
- Puedes asociar cada dirección IP persistente con un solo pod a la vez.
Cuando tienes varios Pods disponibles, GKE suele enviar tráfico al Pod más reciente. Sin embargo, GKE solo hace esto si el Pod más reciente está en buen estado, lo que significa que el Pod tiene el estado de condición
Ready
comoTrue
de forma predeterminada. Puedes configurar este comportamiento y cambiarlo mediante la configuraciónreactionMode
enGKEIPRoute
. - GKE solo admite direcciones IPv4 como direcciones IP persistentes.
- GKE solo admite varias redes de capa 3 o tipo de dispositivo para direcciones IP persistentes.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Lee sobre las direcciones IP.
Revisa los requisitos y las limitaciones.
Precios
Las siguientes funciones de Network Function Optimizer (NFO) solo se admiten en clústeres que están en proyectos habilitados con GKE Enterprise:
- Compatibilidad de varias redes para Pods
- Compatibilidad de direcciones IP persistentes para Pods (vista previa)
- Políticas de red de varias redes (vista previa)
- Compatibilidad de la dirección del servicio para Pods (vista previa)
Para comprender los cargos que se aplican por habilitar la edición Google Kubernetes Engine (GKE) Enterprise, consulta Precios de GKE Enterprise.
Implementa direcciones IP persistentes para Pods de GKE
Las direcciones IP persistentes en GKE ofrecen una forma de otorgar a los Pods una identidad de red estable, incluso si los Pods se actualizan o se mueven.
En esta sección, se resume el flujo de trabajo a fin de implementar direcciones IP persistentes para los Pods de GKE:
- Crea un clúster: Crea un clúster que tenga habilitadas la API de Gateway, GKE Dataplane V2 y las redes múltiples.
- Reserva una dirección IP: Decide si necesitas una dirección IP externa (de acceso público) o interna (solo de Google Cloud) y guárdala. Elige la misma región que tu clúster de GKE.
- Crea una puerta de enlace: Configura el objeto de puerta de enlace de Kubernetes que contenga las direcciones IP persistentes reservadas y te permite crear reglas (
GKEIPRoutes
) sobre qué Pods de tu clúster pueden usar esas direcciones IP persistentes. - Crea o identifica cargas de trabajo con redes adicionales para direcciones IP persistentes: Prepara los Pods para usar direcciones IP persistentes mediante la habilitación de varias interfaces de red y define la red en la que residen las direcciones IP persistentes.
- Crea el objeto GKEIPRoute para las cargas de trabajo seleccionadas: Configura
GKEIPRoute
a fin de asignar la dirección IP persistente a un Pod específico. Puedes usar etiquetas para orientar a los Pods correctos y, de forma opcional, configurar la forma en que reacciona el enrutamiento a los cambios de los Pods. - Configura el conocimiento de tu aplicación: Configura tu aplicación dentro del Pod para usar de forma activa la dirección IP persistente.
- Supervisión: realiza un seguimiento del estado de los objetos Gateway y
GKEIPRoute
para asegurarte de que todo funcione según lo esperado.
Para implementar una dirección IP persistente en los Pods de GKE, sigue estos pasos:
Paso 1: Crea un clúster de GKE Dataplane V2 y un clúster de GKE habilitado con varias redes
A fin de habilitar las capacidades avanzadas de enrutamiento de red y administración de direcciones IP necesarias para implementar direcciones IP persistentes en Pods de GKE, debes crear un clúster habilitado para GKE Dataplane V2 y varias redes.
Paso 2: Reserva una dirección IP persistente
A fin de establecer identidades de red confiables para los Pods y configurar direcciones IP persistentes, primero debes adquirir direcciones IP persistentes. Puedes elegir entre reservar direcciones IP proporcionadas por Google o usar tus propias (BYOIP).
Paso 2a: Reserva las direcciones IP proporcionadas por Google
Para reservar direcciones IP externas, ejecuta el siguiente comando:
gcloud compute addresses create ADDRESS_NAME \
--region=REGION
Reemplaza lo siguiente:
ADDRESS_NAME
: Es el nombre que deseas asociar a esta dirección.REGION
: Es la región en la que deseas reservar esta dirección. Esta región debe ser la misma que el recurso al que deseas conectar la dirección IP.Nota: Debes especificar una región cuando reservas una dirección IP, ya que las reglas de reenvío, que controlan el enrutamiento de tráfico para direcciones IP persistentes, son regionales. Tu dirección IP y el clúster de GKE deben estar en la misma región para que el enrutamiento funcione de forma correcta.
Para reservar direcciones IP internas, ejecuta el siguiente comando:
gcloud compute addresses create ADDRESS_NAME \
--region REGION
--subnet SUBNETWORK \
--addresses IP_ADDRESS
Reemplaza lo siguiente:
ADDRESS_NAME
: Son los nombres de una o más direcciones que deseas reservar. En el caso de varias direcciones, especifica todas las direcciones como una lista, separadas por espacios. Por ejemplo, example-address-1 example-address-2 example-address-3REGION
: Es la región para esta solicitud.SUBNETWORK
: Es la subred para esta dirección IPv4 interna.
Para garantizar que el tráfico se enrute de forma correcta dentro de tu red privada, las direcciones IP internas deben pertenecer a una subred designada.
Para obtener más información sobre las direcciones IP internas y externas, consulta Reserva una dirección IP externa estática y Reserva una dirección IP interna estática.
Paso 2b: Traslada tus propias direcciones IP (BYOIP)
Puedes proporcionar tus propias direcciones IP (BYOIP), en lugar de depender de las direcciones IP proporcionadas por Google. BYOIP es útil si necesitas direcciones IP específicas para tus aplicaciones o si trasladas sistemas existentes a Google Cloud. Si quieres usar BYOIP, Google valida que eres el propietario del rango de direcciones IP y, después de importar las direcciones IP a Google Cloud, puedes asignarlas como las direcciones IP persistentes para los Pods de GKE. Para obtener más información, consulta Usa tus propias direcciones IP.
Paso 3: Crea objetos Gateway
Los objetos de puerta de enlace contienen las direcciones IP y definen qué Pods son aptos para usarlas. Para controlar cómo se asignan las direcciones IP persistentes a tus Pods de GKE, usarás objetos Gateway.
- Crea un objeto Gateway de Kubernetes de la clase adecuada:
gke-persistent-regional-external-managed
para direcciones IP externas (públicas).gke-persistent-regional-internal-managed
para direcciones IP internas (solo de Google Cloud).
- Dentro de la sección de direcciones de la puerta de enlace, enumera las direcciones IP persistentes (proporcionadas por Google o BYOIP) que administra esta puerta de enlace.
Usa la sección
Listeners
para determinar qué Pods (y sus objetosGKEIPRoute
asociados) pueden usar las direcciones IP de la puerta de enlace.Listeners
actúa como un filtro según el espacio de nombres de GKEIPRoute en el que existe un objetoGKEIPRoute
.Puedes elegir entre las siguientes opciones de selección de espacios de nombres de Kubernetes:
- Todos los espacios de nombres: cualquier
GKEIPRoute
en el clúster. - Selector:
GKEIPRoute
en los espacios de nombres de GKEIPRoute que coinciden con una etiqueta específica. - Mismo espacio de nombres: Solo
GKEIPRoutes
dentro del mismo espacio de nombres de GKEIPRoute que la puerta de enlace.
- Todos los espacios de nombres: cualquier
En el siguiente ejemplo, se proporciona acceso de todo el clúster a direcciones IP persistentes externas, lo que permite que cualquier Pod las use.
Guarda el siguiente manifiesto de muestra como allowed-pod-ips.yaml
:
kind: Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
namespace: default
name: allowed-pod-ips
spec:
gatewayClassName: gke-persistent-regional-external-managed
listeners:
- name: default
port: 443
protocol: none
allowedRoutes:
namespaces:
from: All
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
- value: "34.123.10.2/32"
type: "gke.networking.io/cidr"
Donde:
- addresses: Enumera todas las direcciones IP cuyos permisos administran la puerta de enlace específica.
- listeners: Se usa para identificar los espacios de nombres desde los que los objetos
GKEIPRoute
pueden hacer referencia a esta puerta de enlace.
Aplica el manifiesto al clúster:
kubectl apply -f allowed-pod-ips.yaml
Paso 4: Crea o identifica cargas de trabajo con redes adicionales para direcciones IP persistentes
Configura Pods de varias redes y crea objetos de red que denoten redes a las que pertenece la dirección IP persistente.
Paso 5: Crea el objeto GKEIPRoute
para las cargas de trabajo seleccionadas
Para asignar una dirección IP persistente a un Pod seleccionado, crea un objeto GKEIPRoute
.
Guarda el siguiente manifiesto de muestra como my-ip-route.yaml
:
kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
namespace: default
name: my-ip-route
spec:
parentRefs:
- name: allowed-pod-ips
namespace: default
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
network: blue-network
reactionMode: ReadyCondition
podSelector: # Only one pod is selected.
matchLabels:
component: proxy
Donde:
- parentRefs: apunta a la puerta de enlace desde la que se usan las direcciones IP persistentes. Este campo es inmutable.
- addresses: Enumera todas las direcciones IP persistentes que se enrutan al Pod identificado con
podSelector
. Este campo es mutable. Para IPv4, solo se admiten direcciones /32. - podSelector: Especifica etiquetas que identifican el Pod al que se enrutan las direcciones IP persistentes. Este campo es mutable y se aplica al mismo espacio de nombres en el que se coloca
GKEIPRoute
. Si seleccionas varios Pods, se tienen en cuenta dos factores adicionales: la hora de creación del Pod (GKE elige el más reciente) y la configuración del camporeactionMode
. - reactionMode: especifica cómo se comporta esta función cuando se crea o borra un Pod específico (seleccionado por
podSelector
). Este campo es opcional y el valor predeterminado esReadyCondition
. El campoReadyCondition
es inmutable. Puedes configurarreactionMode
para controlar cómo actúa la función cuando se crean, borran o actualizan Pods. - network: apunta a la interfaz de red en un Pod al que se enrutan las direcciones IP persistentes. Este campo es inmutable.
Aplica el manifiesto al clúster:
kubectl apply -f my-ip-route.yaml
Asigna direcciones IP persistentes a los Pods de StatefulSet
Para asignar una dirección IP persistente a un Pod específico dentro de un StatefulSet, usa el nombre de host predecible del Pod y el etiquetado automático de Kubernetes, como se muestra en el siguiente ejemplo:
Guarda el siguiente manifiesto de muestra como my-pod-ips.yaml
:
kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
namespace: proxy-ss-ns
name: my-pod-ips
spec:
parentRefs:
- name: allowed-pod-ips
namespace: default
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
- value: "34.123.10.2/32"
type: "gke.networking.io/cidr"
network: blue-network
reactionMode: ReadyCondition
podSelector:
matchLabels:
statefulset.kubernetes.io/pod-name: proxy-ss-1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: proxy-ss-ns
name: proxy-ss
spec:
selector:
matchLabels:
component: proxy
serviceName: "proxy"
replicas: 3
template:
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: '[{"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}]'
labels:
component: proxy
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Aplica el manifiesto al clúster (asegúrate de tener una red llamada “blue-network”):
kubectl apply -f my-pod-ips.yaml
Asigna direcciones IP persistentes a los Pods de implementación
Para asignar una dirección IP persistente al Pod más reciente en una implementación, aplica un GKEIPRoute
con la siguiente configuración:
Guarda el siguiente manifiesto de muestra como my-pod-ips.yaml
:
kind: GKEIPRoute
apiVersion: networking.gke.io/v1
metadata:
namespace: proxy-deploy-ns
name: my-pod-ips
spec:
parentRefs:
- name: allowed-pod-ips
namespace: default
addresses:
- value: "34.123.10.1/32"
type: "gke.networking.io/cidr"
- value: "34.123.10.2/32"
type: "gke.networking.io/cidr"
network: blue-network
reactionMode: ReadyCondition
podSelector:
matchLabels:
component: proxy
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: proxy-deploy-ns
name: proxy-deploy
spec:
selector:
matchLabels:
component: proxy
replicas: 4 # Latest Pod is used
template:
metadata:
annotations:
networking.gke.io/default-interface: 'eth0'
networking.gke.io/interfaces: '[{"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}]'
labels:
component: proxy
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Aplica el manifiesto al clúster (asegúrate de tener una red llamada “blue-network”):
kubectl apply -f my-ip-route.yaml
Paso 6: Usa direcciones IP persistentes dentro del Pod
Asignar una dirección IP persistente a un Pod de GKE mediante un GKEIPRoute
no hace que la aplicación pueda usar de forma automática las direcciones IP. Las direcciones IP persistentes se manejan a nivel de enrutamiento de red, pero la configuración predeterminada del Pod no lo tendrá en cuenta. Debes establecer la configuración de tu aplicación para que reconozca y use la dirección dentro del Pod. Para lograrlo, tu Pod requerirá permisos de privilegios.
Para configurar tu aplicación, considera las siguientes opciones:
- net.ipv4.ip_nonlocal_bind: Modifica una configuración del sistema para permitir que tu aplicación use direcciones IP no asignadas directamente a su interfaz.
- ip address add: Usa este comando en la lógica de tu aplicación para agregar manualmente la dirección IP persistente a una interfaz.
- Sockets sin procesar: Para obtener aún más control, la aplicación puede interactuar directamente con la pila de red (avanzado).
- Pila de direcciones IP del espacio de usuario: en casos especializados, se puede ejecutar una aplicación distinta dentro del Pod para administrar la dirección IP (muy avanzada).
Personaliza el comportamiento de las direcciones IP persistentes durante los cambios de Pod
En esta sección, se describe cómo se comporta la dirección IP persistente para el Pod de GKE cuando se crea o borra el Pod objetivo. El controlador de GKE supervisa tus Pods y la configuración de GKEIPRoute
. Cuando detecta que ocurre una actualización, reasigna la dirección IP persistente de forma automática a un Pod adecuado según el reactionMode
elegido.
Comprende cómo la función de dirección IP persistente controla de forma automática los cambios del Pod y las opciones de configuración disponibles para ti:
- Decide entre ReadyCondition o Exists dentro del campo reactionMode de tu Configuración de
GKEIPRoute
. Considera las necesidades de tu aplicación con respecto a la rapidez con la que se asigna la dirección IP en comparación con los requisitos de preparación estrictos. - Si usas
ReadyCondition
para garantizar la preparación, asegúrate de que tus Pods hayan implementado de forma correcta sondeos de preparación de Kubernetes. De lo contrario, es posible que la dirección IP persistente no funcione según lo previsto. - Te recomendamos supervisar el estado de los Pods y el campo
Conditions
del objetoGKEIPRoute
para asegurarte de que el sistema funcione de forma correcta. El estadotrue
de la condiciónReady
indica que el sistema funciona de forma correcta.
Soluciona problemas de comunicación con direcciones IP persistentes para Pods
En esta sección, se muestra cómo resolver problemas relacionados con las direcciones IP persistentes para Pods.
NoPodsFound
cuando no se encontraron Pods que coincidan
Síntoma
El objeto GKEIPRoute
especifica un podSelector
(un conjunto de etiquetas) para identificar qué Pods están asociados con la dirección IP persistente. El estado NoPodsFound
indica que no hay Pods dentro de los espacios de nombres GKEIPRoute's
de destino que tengan las etiquetas coincidentes.
Causas posibles
- Etiquetas incorrectas: el Pod con el que deseas usar la dirección IP persistente podría tener las etiquetas incorrectas o ninguna.
- No existen Pods: Si
reactionMode == Exists
, verifica si el Pod se asigna a un nodo mediante la verificación del campopod.Spec.nodeName
. Es posible que no haya ningún Pod en ejecución en el espacio de nombresGKEIPRoute's
que coincida con el selector. - Pod no listo: Si
reactionMode == ReadyCondition
, verifica si el estado del Pod esREADY
. Incluso si existe un Pod coincidente, si no está en un estadoReady
, no puede entregar tráfico y, por lo tanto, no se selecciona.
Solución
- Verifica tus etiquetas: Vuelve a verificar que las etiquetas del
podSelector
deGKEIPRoute's
coincidan con las etiquetas que aplicaste al Pod deseado. - Verifica la existencia del Pod: Asegúrate de que exista un Pod con las etiquetas correctas en los espacios de nombres
GKEIPRoute's
que especifica elListeners
de la puerta de enlace. SireactionMode == Exists
, verifica si el Pod está asignado a un nodo mediante la revisión del campopod.Spec.nodeName
. Confirma la preparación del Pod: Si
reactionMode == ReadyCondition
, verifica si el estado del Pod esREADY
. Asegúrate de que el Pod esté en el estadoReady
mediante el siguiente comando:kubectl get pods -n <namespace>
Los Pods en otros estados (por ejemplo, “Pending” o “Error”) no están seleccionados.
Configura tus Pods para que respondan en la dirección IP persistente asignada.
Mutated
cuando se encontró un Pod coincidente y la programación de direcciones IP persistentes está en curso
Síntoma
El estado GKEIPRoute
muestra “Mutado”, lo que indica que la configuración de la dirección IP persistente para un Pod coincidente está en curso.
Posible causa:
Puedes esperar el estado “Mutado” durante la configuración mientras el sistema configura la ruta de datos de GKE y los recursos de Google Cloud para la dirección IP persistente.
Resolución:
- Espera y vuelve a intentar: En la mayoría de los casos, el proceso de configuración se completa de forma automática en un período corto. Verifica el estado después de esperar. Cambiará a
Ready
cuando se complete de forma correcta. - Investiga más a fondo (si es necesario): Si el estado "Mutated" persiste por un período prolongado, esto podría indicar un error de configuración. Examina las otras condiciones de estado en tu
GKEIPRoute
:- Aceptado: Indica si tu configuración de
GKEIPRoute
es válida. - DPV2Ready: indica si la ruta de datos en el nodo está programada de forma correcta.
- GCPReady: Indica si los recursos de Google Cloud están configurados como se espera.
- Aceptado: Indica si tu configuración de
Busca mensajes de error dentro de estas condiciones para ayudar a solucionar el problema.
¿Qué sigue?
- Lee Información sobre las direcciones IP persistentes para los Pods de GKE.
- Lee Configurar la compatibilidad con varias redes para Pods