En esta página se muestra cómo implementar direcciones IP persistentes en pods de Google Kubernetes Engine (GKE). Puede controlar la red de pods de GKE con la asignación de direcciones IP persistentes personalizadas. Para obtener más información sobre las direcciones IP persistentes, sus casos prácticos y sus ventajas, consulta Acerca de las direcciones IP persistentes para pods de GKE.
Requisitos
- GKE 1.31 o una versión posterior.
- Puedes reservar direcciones IP proporcionadas por Google o utilizar tus propias direcciones IP (BYOIP).
- Configura tu aplicación que se ejecuta en los pods para que reconozca y use las direcciones IP persistentes asignadas.
- Las direcciones IP persistentes de los pods de GKE requieren que los clústeres tengan habilitados GKE Dataplane V2 y Gateway API.
Limitaciones
- Debes configurar tus aplicaciones para que usen las direcciones IP persistentes asignadas. GKE no añade automáticamente la configuración de la dirección IP a las interfaces de red del Pod.
- Puedes asociar cada dirección IP persistente a un solo Pod a la vez.
Cuando hay varios pods disponibles, GKE suele enviar tráfico al pod coincidente más reciente. Sin embargo, GKE solo lo hace si el pod más reciente está en buen estado, lo que significa que el pod tiene el estado de la condición
Ready
True
de forma predeterminada. Puedes configurar este comportamiento y cambiarlo con el ajustereactionMode
enGKEIPRoute
. - GKE solo admite direcciones IPv4 como direcciones IP persistentes.
- GKE solo admite varias redes de capa 3 o de tipo de dispositivo.
- No se admite la alta disponibilidad (HA) con direcciones IP persistentes en casos prácticos que no sean de DPDK.
- Puedes especificar hasta 16 direcciones IP en un solo
GKEIPRoute
. Para configurar más direcciones, puedes crear varios objetosGKEIPRoute
.
Antes de empezar
Antes de empezar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
Consulta información sobre las direcciones IP.
Consulta los requisitos y las limitaciones.
Implementar direcciones IP persistentes para pods de GKE
Las direcciones IP persistentes de GKE te permiten asignar una identidad de red estable a tus pods, aunque estos se actualicen o se muevan.
En esta sección se resume el flujo de trabajo para implementar direcciones IP persistentes para pods de GKE:
- Crea un clúster: crea un clúster que tenga la API Gateway y GKE Dataplane V2.
- Reserva una dirección IP: decide si necesitas una dirección IP externa (accesible públicamente) o interna (solo para Google Cloud) y resérvala. Elige la misma región que tu clúster de GKE.
- Crea una pasarela: configura el objeto de pasarela de Kubernetes que contiene tus 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 para direcciones IP persistentes: si usas direcciones IP persistentes en una red adicional, prepara los pods para que usen direcciones IP persistentes habilitando varias interfaces de red y definiendo la red en la que residen las direcciones IP persistentes.
- Crea el objeto GKEIPRoute para las cargas de trabajo seleccionadas: configura
GKEIPRoute
para asignar la dirección IP persistente a un Pod específico. Puede usar etiquetas para orientar los anuncios al pod o los pods adecuados y, opcionalmente, configurar cómo reacciona el enrutamiento a los cambios en los pods. - Configura la detección de aplicaciones: configura tu aplicación en el pod para que use activamente la dirección IP persistente.
- Monitorización: haz un seguimiento del estado de tu pasarela y de los
GKEIPRoute
objetos para asegurarte de que todo funciona correctamente.
Para implementar una dirección IP persistente para los pods de GKE, sigue estos pasos:
Paso 1: Crea un clúster de GKE con la API Gateway y GKE Dataplane V2 habilitados
Para habilitar las funciones avanzadas de enrutamiento de red y gestión de direcciones IP necesarias para implementar direcciones IP persistentes en pods de GKE, debes crear un clúster de GKE Dataplane V2 de la siguiente manera:
gcloud container clusters create CLUSTER_NAME \
--cluster-version=CLUSTER_VERSION \
--enable-dataplane-v2 \
--enable-ip-alias \
--gateway-api=standard
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster.CLUSTER_VERSION
: la versión del clúster.
Paso 2: Configura direcciones IP persistentes
Para establecer identidades de red fiables para tus pods y configurar direcciones IP persistentes, primero debes adquirir direcciones IP persistentes. Puedes elegir entre reservar direcciones IP proporcionadas por Google o usar las tuyas (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
Haz los cambios siguientes:
ADDRESS_NAME
: el nombre que quieras asociar a esta dirección.REGION
: la región en la que quieres reservar esta dirección. Esta región debe ser la misma que la del pod al que quieras asociar la dirección IP.Nota: Debe especificar una región al reservar una dirección IP, ya que las reglas de reenvío, que gestionan el enrutamiento del tráfico de las direcciones IP persistentes, son regionales. Tu dirección IP y tu clúster de GKE deben estar en la misma región para que el enrutamiento funcione correctamente.
Para reservar direcciones IP internas, ejecuta el siguiente comando:
gcloud compute addresses create ADDRESS_NAME \
--region REGION
--subnet SUBNETWORK \
--addresses IP_ADDRESS
Haz los cambios siguientes:
ADDRESS_NAME
: los nombres de una o varias direcciones que quieras reservar. Si hay varias direcciones, especifícalas todas en una lista separada por espacios. Por ejemplo, ejemplo-direccion-1 ejemplo-direccion-2 ejemplo-direccion-3REGION
: la región de esta solicitud.SUBNETWORK
: la subred de esta dirección IPv4 interna.
Para que el tráfico se enrute correctamente en tu red privada, las direcciones IP internas deben pertenecer a la subred predeterminada del clúster o a una subred de red adicional.
Para obtener más información sobre las direcciones IP externas e internas o para ver cómo reservar direcciones mediante la consola, consulta Reservar una dirección IP externa estática y Reservar una dirección IP interna estática.
Paso 2b: Utilizar tus propias direcciones IP (BYOIP)
Puedes usar tus propias direcciones IP (BYOIP) en lugar de las que proporciona Google. BYOIP es útil si necesitas direcciones IP específicas para tus aplicaciones o si vas a migrar sistemas a Google Cloud. Para usar BYOIP, Google valida que eres el propietario del intervalo de direcciones IP y, después de importar las direcciones IP a Google Cloud, puedes asignarlas como direcciones IP persistentes para los pods de GKE. Para obtener más información, consulta Usar tus propias direcciones IP.
Paso 3: Crea objetos de pasarela
Los objetos de pasarela contienen las direcciones IP y definen qué pods pueden 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 (soloGoogle Cloud).
- En la sección de direcciones de la pasarela, enumera las direcciones IP persistentes (proporcionadas por Google o BYOIP) que gestiona esta pasarela.
Usa la sección
Listeners
para determinar qué pods (y sus objetosGKEIPRoute
asociados) pueden usar las direcciones IP de la pasarela.Listeners
actúa como filtro en función del espacio de nombres de GKEIPRoute en el que existe un objetoGKEIPRoute
.Puedes elegir entre las siguientes opciones de selección de espacio de nombres de Kubernetes:
- Todos los espacios de nombres: cualquier
GKEIPRoute
del 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 a nivel de clúster a direcciones IP persistentes externas, lo que permite que cualquier pod pueda usarlas.
Guarda el siguiente archivo de manifiesto de ejemplo 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: muestra todas las direcciones IP cuyos permisos gestiona la pasarela específica.
- Listeners: se usa para identificar los espacios de nombres desde los que los objetos
GKEIPRoute
pueden hacer referencia a esta pasarela.
Aplica el manifiesto al clúster:
kubectl apply -f allowed-pod-ips.yaml
Paso 4 (opcional): Crea o identifica cargas de trabajo con redes adicionales para direcciones IP persistentes
Si tienes previsto usar tus direcciones IP persistentes con pods que requieran conectividad a varias redes, puedes configurar pods de varias redes y crear objetos de red que indiquen las 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 archivo de manifiesto de ejemplo 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: default
reactionMode: ReadyCondition
podSelector: # Only one pod is selected.
matchLabels:
component: proxy
donde:
- parentRefs apunta a la pasarela desde la que se usan las direcciones IP persistentes. Este campo no se puede modificar.
- Addresses: muestra todas las direcciones IP persistentes que se enrutan al pod identificado con
podSelector
. Este campo se puede modificar. En el caso de IPv4, solo se admiten direcciones /32. - podSelector especifica las etiquetas que identifican el pod al que se dirigen 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 el ajuste del camporeactionMode
. - reactionMode especifica cómo se comporta esta función cuando se crea o se elimina un Pod específico (seleccionado por
podSelector
). Este campo es opcional y su valor predeterminado esReadyCondition
. El campoReadyCondition
es inmutable. Puedes definir elreactionMode
para controlar cómo actúa la función cuando se crean, eliminan o actualizan pods. - network: apunta a la interfaz de red de un pod al que se dirigen las direcciones IP persistentes. Este campo es opcional y su valor predeterminado es
default
. Ten en cuenta que, si usas la red predeterminada,network
debe tener el valordefault
. Si usas redes adicionales, asigna a la red el nombre del objeto de red que hayas creado anteriormente. Este campo no se puede modificar.
Aplica el manifiesto al clúster:
kubectl apply -f my-ip-route.yaml
Asignar direcciones IP persistentes a pods de StatefulSet
Para asignar una dirección IP persistente a un Pod de varias redes específico dentro de un StatefulSet, usa el nombre de host predecible del Pod y el etiquetado automático de Kubernetes, tal como se muestra en el siguiente ejemplo:
Guarda el siguiente archivo de manifiesto de ejemplo 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 que tienes una red llamada "blue-network"):
kubectl apply -f my-pod-ips.yaml
Asignar direcciones IP persistentes a pods de implementaciones
Para asignar una dirección IP persistente al pod más reciente de una implementación, aplica un GKEIPRoute
con la siguiente configuración:
Guarda el siguiente archivo de manifiesto de ejemplo 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 # point to the right network if you intend to use persistent-ip on additional networks
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: <- Remove these lines if the pods are not multi-nic pods
# 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:
kubectl apply -f my-ip-route.yaml
Asegúrate de que tienes una red llamada "blue-network" si utilizas redes adicionales.
Paso 6: Usar direcciones IP persistentes en el pod
Asignar una dirección IP persistente a un pod de GKE mediante un GKEIPRoute no hace que las direcciones IP sean utilizables automáticamente por tu aplicación. Las direcciones IP persistentes se gestionan a nivel de enrutamiento de red, pero la configuración predeterminada de tu Pod no lo tendrá en cuenta. Debes configurar la aplicación para que reconozca y use la dirección del Pod. Para ello, tu Pod necesitará permisos de privilegio.
Para configurar tu aplicación, tienes las siguientes opciones:
- net.ipv4.ip_nonlocal_bind: modifica un ajuste del sistema para permitir que tu aplicación use direcciones IP que no estén asignadas directamente a su interfaz.
- ip address add: usa este comando en la lógica de tu aplicación para añadir manualmente la dirección IP persistente a una interfaz.
- Sockets sin formato: para tener aún más control, tu aplicación puede interactuar directamente con la pila de red (opción avanzada).
- Pila de direcciones IP del espacio de usuario: en casos especializados, una aplicación independiente puede ejecutarse en el Pod para gestionar la dirección IP (muy avanzado).
Paso 7: Habilita ARP para direcciones IP persistentes (solo en la red predeterminada)
Para generar solicitudes y respuestas válidas del protocolo de resolución de direcciones (ARP) y establecer una nueva conexión con un pod mediante una dirección IP persistente en la red predeterminada, debes configurar la variable arp_announce
.
Para definir la variable arp_announce
, ejecuta el siguiente comando en tu pod:
echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
donde la variable arp_announce
controla cómo se gestionan los anuncios ARP. Si se asigna el valor "2", se asegura que se hagan anuncios ARP para la dirección IP persistente, lo que permite que otros dispositivos de la red conozcan la nueva asociación.
Personalizar el comportamiento de la dirección IP persistente durante los cambios de los pods
En esta sección se describe cómo se comporta la dirección IP persistente de un pod de GKE cuando se crea o se elimina el pod de destino. El controlador de GKE monitoriza tus pods y la configuración de GKEIPRoute
. Cuando detecta que se está produciendo una actualización, reasigna automáticamente la dirección IP persistente a un Pod adecuado según la reactionMode
que hayas elegido.
Descubre cómo gestiona automáticamente la función de dirección IP persistente los cambios de pod y las opciones de configuración que tienes disponibles:
- Elige entre ReadyCondition o Exists en el campo reactionMode de tu configuración de
GKEIPRoute
. Ten en cuenta las necesidades de tu aplicación en cuanto 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 asegurarte de que todo esté listo, comprueba que tus pods hayan implementado correctamente las pruebas de disponibilidad de Kubernetes. De lo contrario, es posible que la dirección IP persistente no funcione correctamente. - Le recomendamos que monitorice el estado de sus pods y el campo
Conditions
del objetoGKEIPRoute
para asegurarse de que el sistema funciona correctamente. El estadotrue
de la condiciónReady
indica que el sistema funciona correctamente.
Solucionar problemas de comunicación con direcciones IP persistentes de pods
En esta sección se explica cómo solucionar problemas relacionados con las direcciones IP persistentes de los pods.
NoPodsFound
cuando no se encuentran pods que coincidan
Síntoma
El objeto GKEIPRoute
especifica un podSelector
(un conjunto de etiquetas) para identificar qué pods están asociados a la dirección IP persistente. El estado NoPodsFound
indica que no hay pods en los espacios de nombres GKEIPRoute's
de destino que tengan las etiquetas coincidentes.
Posibles causas
- Etiquetas incorrectas: es posible que el pod con el que quieres usar la dirección IP persistente tenga etiquetas incorrectas o no tenga ninguna.
- No hay pods: si
reactionMode == Exists
, comprueba si el pod se ha asignado a un nodo consultando el campopod.Spec.nodeName
. Puede que no haya ningún pod en el espacio de nombresGKEIPRoute's
que coincida con el selector. - Pod no está listo: si
reactionMode == ReadyCondition
, comprueba si el estado del Pod esREADY
. Aunque exista un Pod que coincida, si no está en un estadoReady
, no puede servir tráfico y, por lo tanto, no se selecciona.
Resolución
- Comprueba las etiquetas: asegúrate de que las etiquetas de tu
GKEIPRoute's
podSelector
coinciden con las que has aplicado al pod correspondiente. - Verificar la existencia del pod: asegúrate de que existe un pod con las etiquetas correctas en los
GKEIPRoute's
espacios de nombres especificados por elListeners
de tu gateway. Si elreactionMode == Exists
, comprueba si el pod está asignado a un nodo comprobando el campopod.Spec.nodeName
. Confirma que el Pod está listo: si
reactionMode == ReadyCondition
, comprueba si el estado del Pod esREADY
. Asegúrate de que el pod esté en el estadoReady
con el siguiente comando:kubectl get pods -n <namespace>
Los pods que tengan otros estados (por ejemplo, "Pendiente" o "Error") no se seleccionarán.
Configura tus pods para que respondan en la dirección IP persistente asignada.
Mutated
cuando se ha encontrado un Pod que coincide y se está programando una dirección IP persistente
Síntoma
El estado GKEIPRoute
muestra "Mutated", lo que indica que se está configurando la dirección IP persistente de un pod coincidente.
Causa posible:
Durante la configuración, el estado será "Mutated" (Mutado), ya que el sistema está configurando la ruta de datos de GKE y los recursos de la dirección IP persistente. Google Cloud
Resolución:
- Espera y vuelve a intentarlo: en la mayoría de los casos, el proceso de configuración se completa automáticamente en poco tiempo. Comprueba el estado después de esperar. Si se realiza correctamente, cambiará a
Ready
. - Investiga más a fondo (si es necesario): si el estado "Mutated" persiste durante un periodo prolongado, puede indicar que hay un error de configuración. Consulta las
otras condiciones de estado de tu
GKEIPRoute
:- Aceptado: indica si la configuración de
GKEIPRoute
es válida. - DPV2Ready indica si la ruta de datos del nodo se ha programado correctamente.
- GCPReady indica si los recursos de Google Cloud están configurados como se espera.
- Aceptado: indica si la configuración de
Busca mensajes de error en estas condiciones para solucionar el problema.
Siguientes pasos
- Consulta Información sobre las direcciones IP persistentes de los pods de GKE.
- Consulte Configurar la compatibilidad con varias redes para pods.