En esta página se explica cómo habilitar varias interfaces en nodos y pods de un clúster de Google Kubernetes Engine (GKE) mediante la compatibilidad con varias redes para pods.
Antes de leer esta página, asegúrate de que conoces los conceptos generales de redes, la terminología y los conceptos específicos de esta función, así como los requisitos y las limitaciones del servicio de asistencia para varias redes de los pods.
Para obtener más información, consulta Información sobre la compatibilidad con varias redes para pods.
Requisitos y limitaciones
La compatibilidad con varias redes para pods tiene los siguientes requisitos y limitaciones:
Requisitos
- GKE Standard 1.28 o una versión posterior.
- GKE Autopilot versión 1.29.5-gke.1091000 y posteriores o versión 1.30.1-gke.1280000 y posteriores.
- La compatibilidad con varias redes para pods usa las mismas especificaciones a nivel de VM que la compatibilidad con varias NICs en Compute Engine.
- Para usar varias redes en los pods, se necesita GKE Dataplane V2.
- La compatibilidad con varias redes para pods está disponible en Container-Optimized OS. La asistencia para Ubuntu está disponible en los nodos que ejecutan la versión 1.32.3-gke.1785000 de GKE o una posterior.
Limitaciones generales
- La compatibilidad con varias redes para pods no funciona en clústeres en los que se haya habilitado la red de pila dual.
- La VPC compartida solo se admite en GKE 1.28 o versiones posteriores.
- CIDR de varios pods solo se admite en GKE 1.29 o versiones posteriores, y solo para la red de pods predeterminada.
- Las redes de pods de un mismo clúster de GKE no pueden tener intervalos CIDR superpuestos.
- Cuando habilitas la compatibilidad con varias redes para pods, no puedes añadir ni quitar interfaces de red de nodos ni redes de pods después de crear un grupo de nodos. Para cambiar estos ajustes, debes volver a crear el grupo de nodos.
- De forma predeterminada, no se puede acceder a Internet desde las interfaces adicionales de las redes de pods dentro del pod. Sin embargo, puedes habilitarlo manualmente con Cloud NAT.
- No puedes cambiar la pasarela predeterminada de un pod con varias interfaces a través de la API. La pasarela predeterminada debe estar conectada a la red de pods predeterminada.
- La red de pods predeterminada siempre debe incluirse en los pods, aunque crees redes o interfaces de pods adicionales.
- No puedes configurar la función de varias redes cuando se ha configurado Managed Hubble.
- Para usar una VPC compartida, asegúrate de que tu clúster de GKE tenga la versión 1.28.4 o una posterior.
- En las implementaciones de VPC compartida, todas las interfaces de red (NICs) conectadas a los nodos deben pertenecer al mismo proyecto que el proyecto host.
- El nombre de los objetos de red de tipo de dispositivo no puede tener más de 41 caracteres. Se compone la ruta completa de cada socket de dominio UNIX, incluido el nombre de red correspondiente.
Linux tiene una limitación en la longitud de las rutas de sockets (menos de 107 bytes).
Teniendo en cuenta el directorio, el prefijo del nombre de archivo y la extensión
.sock
, el nombre de la red puede tener un máximo de 41 caracteres. - No puedes mutar objetos
Network
yGKENetworkParamSet
. Para actualizar estos objetos, elimínelos y vuelva a crearlos.
Limitaciones del kit de desarrollo de planos de datos y dispositivos (DPDK)
- Una NIC de VM transferida a un pod como una NIC de tipo
Device
no está disponible para otros pods del mismo nodo. - Los pods que usan el modo DPDK deben ejecutarse en modo con privilegios para acceder a los dispositivos VFIO.
- El modo Autopilot no admite DPDK.
- En el modo DPDK, un dispositivo se trata como un recurso de nodo y solo se adjunta al primer contenedor (no init) del pod. Si quieres dividir varios dispositivos DPDK entre contenedores del mismo pod, debes ejecutar esos contenedores en pods independientes.
- En los nodos de Ubuntu, las redes
DPDK-VFIO
solo se admiten en GKE 1.33.1-gke.1959000 y versiones posteriores.
Limitaciones de escalado
GKE proporciona una arquitectura de red flexible que te permite escalar tu clúster. Puedes añadir redes de nodos y redes de pods adicionales a tu clúster. Puedes escalar tu clúster de la siguiente manera:
- Puedes añadir hasta 8 redes de nodos adicionales a cada grupo de nodos de GKE. Este es el mismo límite de escalado para las máquinas virtuales de Compute Engine.
- Cada pod debe tener menos de 8 redes adicionales asociadas.
- Puedes configurar hasta 35 Pod-networks en las 8 node-networks de un solo grupo de nodos. Puedes desglosarlo en diferentes combinaciones, como las siguientes:
- 7 redes de nodos con 5 redes de pods cada una
- 5 redes de nodos con 7 redes de pods cada una
- 1 red de nodos con 30 redes de pods. El límite de intervalos secundarios por subred es de 30.
- Puedes configurar hasta 50 redes de pods por clúster.
- Puedes configurar hasta un máximo de 32 pods de varias redes por nodo.
- Puedes tener hasta 5000 nodos con varias interfaces.
- Puedes tener hasta 100.000 interfaces adicionales en todos los Pods.
Desplegar pods de varias redes
Para implementar pods de varias redes, haz lo siguiente:
- Prepara una VPC adicional, una subred (red de nodos) y rangos secundarios (red de pods).
- Crea un clúster de GKE con varias redes con el comando de la CLI de Google Cloud.
- Crea un grupo de nodos de GKE que esté conectado a la red de nodos y a la red de pods adicionales mediante el comando de la CLI de Google Cloud.
- Crea una red de pods y haz referencia a la VPC, la subred y los intervalos secundarios correctos en objetos de varias redes mediante la API de Kubernetes.
- En la configuración de tu carga de trabajo, hace referencia al objeto de Kubernetes Network preparado mediante la API de Kubernetes.
Antes de empezar
Antes de empezar, asegúrate de que has 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 los requisitos y las limitaciones.
Preparar una VPC adicional
Google Cloud crea una red de pods predeterminada durante la creación del clúster asociada al grupo de nodos de GKE utilizado durante la creación inicial del clúster de GKE. La red de pods predeterminada está disponible en todos los nodos y pods del clúster. Para facilitar las funciones de varias redes en el pool de nodos, debes preparar las VPCs que ya tengas o crear otras nuevas que admitan redes de tipo Layer 3
y Device
.
Para preparar una VPC adicional, ten en cuenta los siguientes requisitos:
Redes de tipo
Layer 3
yNetdevice
:- Crea un intervalo secundario si usas redes de tipo
Layer 3
. - Asegúrate de que el tamaño de CIDR del intervalo secundario sea lo suficientemente grande como para satisfacer el número de nodos del grupo de nodos y el número de pods por nodo que quieras tener.
- Al igual que la red de pods predeterminada, las demás redes de pods usan el aprovisionamiento excesivo de direcciones IP. El intervalo de direcciones IP secundario debe tener el doble de direcciones IP por nodo que el número de pods por nodo.
- Crea un intervalo secundario si usas redes de tipo
Requisitos de la red de tipo
Device
: crea una subred normal en una VPC. No necesitas una subred secundaria.
Para habilitar las funciones de varias redes en el pool de nodos, debes preparar las VPCs a las que quieras establecer conexiones adicionales. Puedes usar una VPC que ya tengas o crear una específicamente para el grupo de nodos.
Crear una red VPC que admita dispositivos de tipo Layer 3
Para crear una red de VPC que admita dispositivos de tipo Layer 3
, haz lo siguiente:
- Asegúrate de que el tamaño de CIDR del intervalo secundario sea lo suficientemente grande como para satisfacer el número de nodos del grupo de nodos y el número de pods por nodo que quieras tener.
Al igual que la red de pods predeterminada, las demás redes de pods usan el aprovisionamiento excesivo de direcciones IP. El intervalo de direcciones IP secundarias debe tener el doble de direcciones IP por nodo que el número de pods por nodo.
gcloud
gcloud compute networks subnets create SUBNET_NAME \
--project=PROJECT_ID \
--range=SUBNET_RANGE \
--network=NETWORK_NAME \
--region=REGION \
--secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>
Haz los cambios siguientes:
SUBNET_NAME
: el nombre de la subred.PROJECT_ID
: el ID del proyecto que contiene la red VPC en la que se crea la subred.SUBNET_RANGE
: el intervalo de direcciones IPv4 principal de la nueva subred, en notación CIDR.NETWORK_NAME
: el nombre de la red VPC que contiene la nueva subred.REGION
: la región en la que se crea la nueva subred. Google CloudSECONDARY_RANGE_NAME
: el nombre del intervalo secundario.SECONDARY_IP_RANGE
el intervalo de direcciones IPv4 secundario en notación CIDR.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En el campo Nombre, introduce el nombre de la red. Por ejemplo,
l3-vpc
.En el menú desplegable Unidad máxima de transmisión (MTU), elija el valor de MTU adecuado.
.En la sección Modo de creación de subred, elige Personalizado.
Haz clic en AÑADIR SUBNET.
En la sección Nueva subred, especifica los siguientes parámetros de configuración de una subred:
Asígnele un nombre. Por ejemplo,
l3-subnet
.Selecciona una región.
Introduce un intervalo de direcciones IP. Este es el intervalo IPv4 principal de la subred.
Si seleccionas un intervalo que no es una dirección RFC 1918, confirma que no entra en conflicto con una configuración ya establecida. Para obtener más información, consulta Intervalos de subred IPv4.
Para definir un intervalo secundario para la subred, haz clic en Crear intervalo de direcciones IP secundario.
Si seleccionas un intervalo que no es una dirección RFC 1918, confirma que no entra en conflicto con una configuración ya establecida. Para obtener más información, consulta Intervalos de subred IPv4.
Acceso privado de Google: puedes habilitar el acceso privado de Google en la subred al crearla o más adelante editándola.
Registros de flujo: puedes habilitar los registros de flujo de VPC de la subred al crearla o más adelante editándola.
Haz clic en Listo.
En la sección Reglas de cortafuegos, vaya a Reglas de cortafuegos IPv4 y seleccione cero o más reglas de cortafuegos predefinidas.
Las reglas abordan casos prácticos habituales de conectividad a instancias. Puedes crear tus propias reglas de cortafuegos después de crear la red. Cada nombre de regla predefinida empieza por el nombre de la red de VPC que estás creando.
En Reglas de cortafuegos IPv4, para editar la regla de cortafuegos de entrada predefinida llamada
allow-custom
, haz clic en EDITAR.Puede editar subredes, añadir intervalos de IPv4 y especificar protocolos y puertos.
La regla de cortafuegos
allow-custom
no se actualiza automáticamente si añades subredes más adelante. Si necesitas reglas de cortafuegos para las nuevas subredes, debes actualizar la configuración del cortafuegos para añadir las reglas.En la sección Modo de enrutamiento dinámico de la red de VPC. Para obtener más información, consulta el artículo sobre el modo de enrutamiento dinámico. Puedes cambiar el modo de enrutamiento dinámico más adelante.
Haz clic en Crear.
Crear una red de VPC que admita dispositivos de tipo Netdevice
o DPDK
gcloud
gcloud compute networks subnets create SUBNET_NAME \
--project=PROJECT_ID \
--range=SUBNET_RANGE \
--network=NETWORK_NAME \
--region=REGION \
--secondary-range=SECONDARY_RANGE_NAME=<SECONDARY_RANGE_RANGE>
Haz los cambios siguientes:
SUBNET_NAME
: el nombre de la subred.PROJECT_ID
: el ID del proyecto que contiene la red VPC en la que se crea la subred.SUBNET_RANGE
: el intervalo de direcciones IPv4 principal de la nueva subred, en notación CIDR.NETWORK_NAME
: el nombre de la red VPC que contiene la nueva subred.REGION
: la región en la que se crea la nueva subred. Google CloudSECONDARY_RANGE_NAME
: el nombre del intervalo secundario.SECONDARY_IP_RANGE
el intervalo de direcciones IPv4 secundario en notación CIDR.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En el campo Nombre, introduce el nombre de la red. Por ejemplo,
netdevice-vpc
odpdk-vpc
.En el menú desplegable Unidad máxima de transmisión (MTU), elija el valor de MTU adecuado.
En la sección Modo de creación de subred, elige Personalizado.
En la sección Nueva subred, especifica los siguientes parámetros de configuración de una subred:
Asígnele un nombre. Por ejemplo,
netdevice-subnet
odpdk-vpc
.Selecciona una región.
Introduce un intervalo de direcciones IP. Este es el intervalo IPv4 principal de la subred.
Si seleccionas un intervalo que no es una dirección RFC 1918, confirma que no entra en conflicto con una configuración ya establecida. Para obtener más información, consulta Intervalos de subred IPv4.
Acceso privado de Google: elige si quieres habilitar el Acceso privado de Google en la subred al crearla o más adelante editándola.
Registros de flujo: puedes habilitar los registros de flujo de VPC de la subred al crearla o más adelante editándola.
Haz clic en Listo.
En la sección Reglas de cortafuegos, vaya a Reglas de cortafuegos IPv4 y seleccione cero o más reglas de cortafuegos predefinidas.
Las reglas abordan casos prácticos habituales de conectividad a instancias. Puedes crear tus propias reglas de cortafuegos después de crear la red. Cada nombre de regla predefinida empieza por el nombre de la red de VPC que estás creando.
En Reglas de cortafuegos IPv4, para editar la regla de cortafuegos de entrada predefinida llamada
allow-custom
, haz clic en EDITAR.Puede editar subredes, añadir intervalos de IPv4 y especificar protocolos y puertos.
La regla de cortafuegos
allow-custom
no se actualiza automáticamente si añades subredes más adelante. Si necesitas reglas de cortafuegos para las nuevas subredes, debes actualizar la configuración del cortafuegos para añadir las reglas.En la sección Modo de enrutamiento dinámico de la red de VPC. Para obtener más información, consulta el artículo sobre el modo de enrutamiento dinámico. Puedes cambiar el modo de enrutamiento dinámico más adelante.
Haz clic en Crear.
Crear un clúster de GKE con funciones de varias redes
Al habilitar la función de multirred en un clúster, se añaden las CustomResourceDefinitions (CRDs) necesarias al servidor de la API de ese clúster. También implementa un gestor de controladores de red, que se encarga de conciliar y gestionar objetos de varias redes. No puedes modificar la configuración del clúster después de crearlo.
Crear un clúster de Autopilot de GKE con funciones de varias redes
Crea un clúster de Autopilot de GKE con funciones de varias redes:
gcloud container clusters create-auto CLUSTER_NAME \
--cluster-version=CLUSTER_VERSION \
--enable-multi-networking
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster.CLUSTER_VERSION
: la versión del clúster.
La marca --enable-multi-networking
habilita las definiciones de recursos personalizados (CRDs) de varias redes en el servidor de la API de este clúster e implementa un network-controller-manager que contiene la reconciliación y la gestión del ciclo de vida de los objetos de varias redes.
Crear un clúster estándar de GKE con funciones de varias redes
gcloud
Crea un clúster estándar de GKE con funciones de varias redes:
gcloud container clusters create CLUSTER_NAME \
--cluster-version=CLUSTER_VERSION \
--enable-dataplane-v2 \
--enable-ip-alias \
--enable-multi-networking
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre del clúster.CLUSTER_VERSION
: la versión del clúster.
Este comando incluye las siguientes marcas:
--enable-multi-networking:
habilita las definiciones de recursos personalizados (CRDs) de redes múltiples en el servidor de la API de este clúster e implementa un network-controller-manager que contiene la reconciliación y la gestión del ciclo de vida de los objetos de redes múltiples.--enable-dataplane-v2:
habilita GKE Dataplane V2. Esta marca es obligatoria para habilitar varias redes.
Consola
- En la Google Cloud consola, ve a la página Crear un clúster de Kubernetes.
- Configura tu clúster estándar. Para obtener más información, consulta Crear un clúster zonal o Crear un clúster regional. Al crear el clúster, selecciona la red y la subred de nodos adecuadas.
- En el panel de navegación, ve a Clúster y haz clic en Redes.
- Marca la casilla Habilitar Dataplane V2.
- Selecciona Habilitar la opción de usar varias redes.
- Haz clic en Crear.
Crear un grupo de nodos de GKE Standard conectado a VPCs adicionales
Crea un grupo de nodos que incluya nodos conectados a la red de nodos (VPC y subred) y a la red de pods (intervalo secundario) creadas en Crear red de pods.
Para crear el nuevo grupo de nodos y asociarlo a las redes adicionales del clúster de GKE, sigue estos pasos:
gcloud
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--additional-node-network network=NETWORK_NAME,subnetwork=SUBNET_NAME \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=POD_IP_RANGE,max-pods-per-node=NUMBER_OF_PODS \
--additional-node-network network=highperformance,subnetwork=subnet-highperf
Haz los cambios siguientes:
POOL_NAME
con el nombre del nuevo grupo de nodos.CLUSTER_NAME
con el nombre del clúster al que vas a añadir el grupo de nodos.NETWORK_NAME
con el nombre de la red a la que se van a adjuntar los nodos del grupo de nodos.SUBNET_NAME
con el nombre de la subred de la red que se va a usar para los nodos.POD_IP_RANGE
el intervalo de direcciones IP de pods de la subred.- Número máximo de pods por nodo:
NUMBER_OF_PODS
.
Este comando contiene las siguientes marcas:
--additional-node-network
: define los detalles de la interfaz de red, la red y la subred adicionales. Se usa para especificar las redes de nodos para conectarse a los nodos del grupo de nodos. Especifica este parámetro cuando quieras conectarte a otra VPC. Si no especifica este parámetro, se usará la VPC predeterminada asociada al clúster. En las redes de tipoLayer 3
, especifica la marcaadditional-pod-network
que define la red de pods, que se expone en el clúster de GKE como objetoNetwork
. Cuando se usa la marca--additional-node-network
, se deben proporcionar una red y una subred como parámetros obligatorios. Asegúrate de separar los valores de red y subred con una coma y de no usar espacios.--additional-pod-network
: especifica los detalles del intervalo secundario que se va a usar en la red de pods. Este parámetro no es obligatorio si usa una red de tipoDevice
. Este argumento especifica los siguientes valores de clave:subnetwork
,pod-ipv4-range
ymax-pods-per-node
. Cuando uses--additional-pod-network
, debes proporcionar los valorespod-ipv4-range
ymax-pods-per-node
, separados por comas y sin espacios.subnetwork
: vincula la red de nodos con la red de pods. La subred es opcional. Si no lo especifica, la red de pods adicional se asociará a la subred predeterminada proporcionada durante la creación del clúster.--max-pods-per-node
: se debe especificarmax-pods-per-node
y debe ser una potencia de 2. El valor mínimo es 4. El valor demax-pods-per-node
no debe ser superior al valor demax-pods-per-node
del grupo de nodos.
Consola
Ve a la página Google Kubernetes Engine en la Google Cloud consola.
En el panel de navegación, haga clic en Clusters.
En la sección Clústeres de Kubernetes, haz clic en el clúster que has creado.
En la parte superior de la página, haz clic en add_box Añadir grupo de nodos para crear el grupo de nodos.
En la sección Detalles del grupo de nodos, haz lo siguiente:
- Introduce un nombre para el grupo de nodos.
- Introduce el Número de nodos que quieras crear en el grupo de nodos.
En el panel de navegación, ve a Grupos de nodos y haz clic en Nodos.
En la lista desplegable Tipo de imagen, selecciona la imagen de nodo Container-Optimized OS con containerd (cos_containerd).
Cuando creas una máquina virtual, seleccionas un tipo de máquina de una familia de máquinas que determina los recursos disponibles para esa máquina virtual. Por ejemplo, un tipo de máquina como
e2-standard-4
contiene 4 vCPUs, por lo que puede admitir hasta 4 VPCs en total. Puedes elegir entre varias familias de máquinas, y cada familia se organiza en series de máquinas y tipos de máquinas predefinidos o personalizados dentro de cada serie. Cada tipo de máquina se factura de forma diferente. Para obtener más información, consulta la hoja de precios de los tipos de máquinas.En el panel de navegación, selecciona Redes.
En la sección Red de nodos, especifica el número máximo de pods por nodo. En la sección Redes de nodos se muestra la red de VPC utilizada para crear el clúster. Es necesario designar redes de nodos adicionales que se correspondan con las redes de VPC y los tipos de dispositivo establecidos anteriormente.
Crea una asociación de grupo de nodos:
- Para dispositivos de tipo
Layer 3
:- En la sección Redes de nodos, haz clic en AÑADIR UNA RED DE NODOS.
- En la lista desplegable de redes, selecciona la VPC que admite dispositivos de tipo Capa 3.
- Selecciona la subred creada para la VPC
Layer 3
. - En la sección Intervalos de direcciones IP de alias de pods, haz clic en Añadir intervalo de direcciones IP de pods.
- Selecciona la Subred secundaria e indica el Número máximo de pods por nodo.
- Selecciona Hecho.
- Para dispositivos de tipo
Netdevice
yDPDK
:- En la sección Redes de nodos, haz clic en AÑADIR UNA RED DE NODOS.
- En la lista desplegable de redes, selecciona la VPC que admita dispositivos de tipo
Netdevice
oDPDK
. - Selecciona la subred creada para la VPC
Netdevice
oDPDK
. - Selecciona Hecho.
- Para dispositivos de tipo
Haz clic en Crear.
Notas:
- Si se especifican varias redes de pods adicionales en la misma red de nodos, deben estar en la misma subred.
- No puedes hacer referencia a la misma subred secundaria varias veces.
Ejemplo
En el siguiente ejemplo se crea un grupo de nodos llamado pool-multi-net que adjunta dos
redes adicionales a los nodos: datapalane (red de tipo Layer 3
) y
highperformance (red de tipo netdevice). En este ejemplo se da por hecho que ya has creado un clúster de GKE llamado cluster-1
:
gcloud container node-pools create pool-multi-net \
--project my-project \
--cluster cluster-1 \
--location us-central1-c \
--additional-node-network network=dataplane,subnetwork=subnet-dp \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
--additional-node-network network=highperformance,subnetwork=subnet-highperf
Para especificar interfaces de red de nodos y de pods adicionales, define los parámetros --additional-node-network
y --additional-pod-network
varias veces, como se muestra en el siguiente ejemplo:
--additional-node-network network=dataplane,subnetwork=subnet-dp \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-blue,max-pods-per-node=8 \
--additional-pod-network subnetwork=subnet-dp,pod-ipv4-range=sec-range-green,max-pods-per-node=8 \
--additional-node-network network=managementdataplane,subnetwork=subnet-mp \
--additional-pod-network subnetwork=subnet-mp,pod-ipv4-range=sec-range-red,max-pods-per-node=4
Para especificar redes de pods adicionales directamente en la interfaz de VPC principal del grupo de nodos, como se muestra en el siguiente ejemplo:
--additional-pod-network subnetwork=subnet-def,pod-ipv4-range=sec-range-multinet,max-pods-per-node=8
Crear red de Pod
Define las redes de pods a las que accederán los pods definiendo objetos de Kubernetes y vinculándolos a los recursos de Compute Engine correspondientes, como VPCs, subredes y rangos secundarios.
Para crear una red de pods, debes definir los objetos CRD de Network en el clúster.
Configurar una red de VPC de Layer 3
YAML
En la Layer 3
VPC, cree los objetos Network
y GKENetworkParamSet
:
Guarda el siguiente archivo de manifiesto de ejemplo como
blue-network.yaml
:apiVersion: networking.gke.io/v1 kind: Network metadata: name: blue-network spec: type: "L3" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "l3-vpc"
El manifiesto define un recurso
Network
llamadoblue-network
del tipoLayer 3
. El objetoNetwork
hace referencia al objetoGKENetworkParamSet
llamadol3-vpc
, que asocia una red con recursos de Compute Engine.Aplica el manifiesto al clúster:
kubectl apply -f blue-network.yaml
Guarda el siguiente manifiesto como
l3-vpc.yaml
:apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: "l3-vpc" spec: vpc: "l3-vpc" vpcSubnet: "subnet-dp" podIPv4Ranges: rangeNames: - "sec-range-blue"
Este manifiesto define el objeto
GKENetworkParamSet
llamadol3-vpc
. Para ello, se asigna el nombre de la VPC comol3-vpc
, el nombre de la subred comosubnet-dp
y el intervalo de direcciones IPv4 secundario de los pods comosec-range-blue
.Aplica el manifiesto al clúster:
kubectl apply -f l3-vpc.yaml
Consola
Ve a la página Google Kubernetes Engine en la Google Cloud consola.
En el panel de navegación, haga clic en Network Function Optimizer.
En la parte superior de la página, haz clic en add_box Crear para crear tu red Pod.
En la sección Antes de empezar, comprueba los detalles.
Haz clic en SIGUIENTE: UBICACIÓN DE LA RED DE PODS.
En la sección Ubicación de la red de pods, en el menú desplegable Clúster, selecciona el clúster de GKE que tenga habilitadas las opciones de multirred y GKE Dataplane V2.
Haz clic en SIGUIENTE: REFERENCIA DE RED DE VPC.
En la sección Referencia de red de VPC, selecciona la red de VPC que se va a usar para los pods
Layer 3
multinic en el desplegable Referencia de red de VPC.Haz clic en SIGUIENTE: TIPO DE RED DE PODS.
En la sección Tipo de red de pod, selecciona L3 e introduce el nombre de la red de pod.
Haz clic en SIGUIENTE: RANGO SECUNDARIO DE RED DE PODS.
En la sección Intervalo secundario de la red de pods, introduce el Intervalo secundario.
Haz clic en SIGUIENTE: RUTAS DE RED DE PODS.
En la sección Rutas de red de pods, para definir Rutas personalizadas, selecciona AÑADIR RUTA.
Haz clic en CREAR RED DE PODS.
Configurar la red DPDK
YAML
En el caso de la VPC de DPDK, crea objetos Network
y GKENetworkParamSet
.
Guarda el siguiente archivo de manifiesto de ejemplo como
dpdk-network.yaml
:apiVersion: networking.gke.io/v1 kind: Network metadata: name: dpdk-network spec: type: "Device" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "dpdk"
Este manifiesto define un recurso
Network
llamadodpdk-network
de tipoDevice
. El recursoNetwork
hace referencia a un objetoGKENetworkParamSet
llamadodpdk
para su configuración.Aplica el manifiesto al clúster:
kubectl apply -f dpdk-network.yaml
En el objeto
GKENetworkParamSet
, guarda el siguiente manifiesto comodpdk.yaml
:apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: "dpdk" spec: vpc: "dpdk" vpcSubnet: "subnet-dpdk" deviceMode: "DPDK-VFIO"
Este manifiesto define el objeto
GKENetworkParamSet
llamadodpdk
, establece el nombre de VPC comodpdk
, el nombre de subred comosubnet-dpdk
y el nombre de deviceMode comoDPDK-VFIO
.Aplica el manifiesto al clúster:
kubectl apply -f dpdk-network.yaml
Consola
Ve a la página Google Kubernetes Engine en la Google Cloud consola.
En el panel de navegación, haga clic en Network Function Optimizer.
En la parte superior de la página, haz clic en add_box Crear para crear tu red Pod.
En la sección Antes de empezar, comprueba los detalles.
Haz clic en SIGUIENTE: UBICACIÓN DE LA RED DE PODS.
En la sección Ubicación de la red de pods, en el menú desplegable Clúster, selecciona el clúster de GKE que tenga habilitadas las opciones de multirred y GKE Dataplane V2.
Haz clic en SIGUIENTE: REFERENCIA DE RED DE VPC.
En la sección Referencia de red de VPC, en el desplegable Referencia de red de VPC, selecciona la red de VPC que se usa para los pods multinic de dpdk.
Haz clic en SIGUIENTE: TIPO DE RED DE PODS.
En la sección Tipo de red de pod, selecciona DPDK-VFIO (Dispositivo) e introduce el nombre de la red de pod.
Haz clic en SIGUIENTE: RANGO SECUNDARIO DE RED DE PODS. La sección de intervalo secundario de la red de pods no estará disponible
Haz clic en SIGUIENTE: RUTAS DE RED DE PODS. En la sección Rutas de red de pods, seleccione AÑADIR RUTA para definir rutas personalizadas.
Haz clic en CREAR RED DE PODS.
Configurar la red de dispositivos de red
En la VPC netdevice
, crea objetos Network
y GKENetworkParamSet
.
YAML
Guarda el siguiente archivo de manifiesto de ejemplo como
netdevice-network.yaml
:apiVersion: networking.gke.io/v1 kind: Network metadata: name: netdevice-network spec: type: "Device" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "netdevice"
Este manifiesto define un recurso
Network
llamadonetdevice-network
con el tipoDevice
. Hace referencia al objetoGKENetworkParamSet
llamadonetdevice
.Aplica el manifiesto al clúster:
kubectl apply -f netdevice-network.yaml
Guarda el siguiente manifiesto como
netdevice.yaml
:apiVersion: networking.gke.io/v1 kind: GKENetworkParamSet metadata: name: netdevice spec: vpc: netdevice vpcSubnet: subnet-netdevice deviceMode: NetDevice
Este manifiesto define un recurso
GKENetworkParamSet
llamadonetdevice
, establece el nombre de la VPC comonetdevice
, el nombre de la subred comosubnet-netdevice
y especifica el modo del dispositivo comoNetDevice
.Aplica el manifiesto al clúster:
kubectl apply -f netdevice.yaml
Consola
Ve a la página Google Kubernetes Engine en la Google Cloud consola.
En el panel de navegación, haga clic en Network Function Optimizer.
En la parte superior de la página, haz clic en add_box Crear para crear tu red Pod.
En la sección Antes de empezar, comprueba los detalles.
Haz clic en SIGUIENTE: UBICACIÓN DE LA RED DE PODS.
En la sección Ubicación de la red de pods, en el menú desplegable Clúster, selecciona el clúster de GKE que tenga habilitadas las opciones de multirred y GKE Dataplane V2.
Haz clic en SIGUIENTE: REFERENCIA DE RED DE VPC.
En la sección Referencia de red de VPC, en el menú desplegable Referencia de red de VPC, selecciona la red de VPC que se usa para los pods multinic de netdevice.
Haz clic en SIGUIENTE: TIPO DE RED DE PODS.
En la sección Tipo de red de pod, selecciona NetDevice (Dispositivo) e introduce el nombre de la red de pod.
Haz clic en SIGUIENTE: RANGO SECUNDARIO DE RED DE PODS. La sección de intervalo secundario de la red de pods no estará disponible
Haz clic en SIGUIENTE: RUTAS DE RED DE PODS. En la sección Rutas de red de pods, para definir rutas personalizadas, selecciona AÑADIR RUTA.
Haz clic en CREAR RED DE PODS.
Configurar rutas de red
Configurar una ruta de red te permite definir rutas personalizadas para una red específica, que se configuran en los pods para dirigir el tráfico a la interfaz correspondiente del pod.
YAML
Guarda el siguiente archivo de manifiesto como
red-network.yaml
:apiVersion: networking.gke.io/v1 kind: Network metadata: name: red-network spec: type: "L3" parametersRef: group: networking.gke.io kind: GKENetworkParamSet name: "management" routes: - to: "10.0.2.0/28"
Este manifiesto define un recurso de red llamado
red-network
con un tipo deLayer 3
y una ruta personalizada "10.0.2.0/28" a través de esa interfaz de red.Aplica el manifiesto al clúster:
kubectl apply -f red-network.yaml
Consola
Ve a la página Network Function Optimizer de la Google Cloud consola.
Haz clic en Crear.
Selecciona un clúster que tenga habilitada la función de multirred.
Configura las preferencias de red.
Haz clic en Crear red Pod.
Consulta el Network
preparado
En la configuración de tu carga de trabajo, haz referencia al objeto de Network
Kubernetes preparado
mediante la API de Kubernetes.
Conectar un Pod a redes específicas
Para conectar pods a las redes especificadas, debe incluir los nombres de los objetos Network
como anotaciones en la configuración del pod. Asegúrate de incluir tanto default
Network
como las redes adicionales seleccionadas en las anotaciones para establecer las conexiones.
Guarda el siguiente archivo de manifiesto de ejemplo como
sample-l3-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: sample-l3-pod annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"} ] spec: containers: - name: sample-l3-pod image: busybox command: ["sleep", "10m"] ports: - containerPort: 80 restartPolicy: Always
Este manifiesto crea un pod llamado
sample-l3-pod
con dos interfaces de red,eth0
yeth1
, asociadas a las redesdefault
yblue-network
, respectivamente.Aplica el manifiesto al clúster:
kubectl apply -f sample-l3-pod.yaml
Conectar un Pod a varias redes
Guarda el siguiente archivo de manifiesto de ejemplo como
sample-l3-netdevice-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: sample-l3-netdevice-pod annotations: networking.gke.io/default-interface: 'eth0' networking.gke.io/interfaces: | [ {"interfaceName":"eth0","network":"default"}, {"interfaceName":"eth1","network":"blue-network"}, {"interfaceName":"eth2","network":"netdevice-network"} ] spec: containers: - name: sample-l3-netdevice-pod image: busybox command: ["sleep", "10m"] ports: - containerPort: 80 restartPolicy: Always
Este manifiesto crea un pod llamado
sample-l3-netdevice-pod
con tres interfaces de red,eth0
,eth1
yeth2
, asociadas a las redesdefault
,blue-network
ynetdevice
, respectivamente.Aplica el manifiesto al clúster:
kubectl apply -f sample-l3-netdevice-pod.yaml
Puedes usar la misma anotación en cualquier ReplicaSet (Deployment o DaemonSet) en la sección de anotaciones de la plantilla.
Configuración de ejemplo de un pod con varias interfaces:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default
link/ether 2a:92:4a:e5:da:35 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.60.45.4/24 brd 10.60.45.255 scope global eth0
valid_lft forever preferred_lft forever
10: eth1@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default qlen 1000
link/ether ba:f0:4d:eb:e8:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.16.1.2/32 scope global eth1
valid_lft forever preferred_lft forever
Verificación
- Asegúrate de crear clústeres con
--enable-multi-networking
solo si--enable-dataplane-v2
está habilitado. - Verifica que todos los grupos de nodos del clúster ejecuten imágenes de Container-Optimized OS en el momento de la creación del clúster y del grupo de nodos.
- Verifica que los grupos de nodos se creen con
--additional-node-network
o--additional-pod-network
solo si la función de multiconexión está habilitada en el clúster. - Asegúrate de que no se especifica dos veces la misma subred como argumento
--additional-node-network
de un grupo de nodos. - Verifica que el mismo intervalo secundario no se haya especificado como argumento
--additional-pod-network
de un pool de nodos. - Sigue los límites de escalado especificados para los objetos de red, teniendo en cuenta el número máximo de nodos, pods y direcciones IP permitidos.
- Verifica que solo haya un objeto
GKENetworkParamSet
que haga referencia a una subred y a un intervalo secundario concretos. - Verifica que cada objeto de red haga referencia a un objeto
GKENetworkParamSet
diferente. - Verifica que el objeto de red, si se crea con una subred específica con la red
Device
, no se esté usando en el mismo nodo con otra red con un intervalo secundario. Solo puedes validar esto en el tiempo de ejecución. - Verifica que los distintos intervalos secundarios asignados a los grupos de nodos no tengan direcciones IP superpuestas.
Solucionar problemas con los parámetros de multirred en GKE
Cuando creas un clúster y un grupo de nodos,se Google Cloud implementan determinadas comprobaciones para asegurarse de que solo se permiten parámetros de multirred válidos. De esta forma, te aseguras de que la red esté configurada correctamente para el clúster.
A partir de la versión 1.32 de GKE, el campo high-perf-config-daemon
solo es obligatorio cuando hay una red DPDK-VFIO
en el nodo. Para comprobar el high-perf-config-daemon
, verifica que esté presente la etiqueta del nodo
cloud.google.com/run-high-perf-config-daemons: "true"
. La ausencia de los complementos o las etiquetas de nodo necesarios para el tipo de red específico puede indicar que la configuración está incompleta o es incorrecta.
Si no puedes crear cargas de trabajo de varias redes, puedes consultar el estado del pod y los eventos para obtener más información:
kubectl describe pods samplepod
El resultado debería ser similar al siguiente:
Name: samplepod
Namespace: default
Status: Running
IP: 192.168.6.130
IPs:
IP: 192.168.6.130
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal NotTriggerScaleUp 9s cluster-autoscaler pod didn't trigger scale-up:
Warning FailedScheduling 8s (x2 over 9s) default-scheduler 0/1 nodes are available: 1 Insufficient networking.gke.io.networks/my-net.IP. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod
A continuación, se indican los motivos generales por los que no se puede crear un pod:
- No se ha podido programar el pod porque no se cumplen los requisitos de recursos de la multiconexión de red
- No se han podido identificar las redes especificadas
Solucionar problemas de creación de redes de Kubernetes
Una vez que hayas creado una red correctamente, los nodos que deban tener acceso a la red configurada se anotarán con una anotación de estado de la red.
Para ver las anotaciones, ejecuta el siguiente comando:
kubectl describe node NODE_NAME
Sustituye NODE_NAME
por el nombre del nodo.
El resultado debería ser similar al siguiente:
networking.gke.io/network-status: [{"name":"default"},{"name":"dp-network"}]
El resultado muestra cada red disponible en el nodo. Si el estado de la red esperado no se muestra en el nodo, haga lo siguiente:
Comprueba si el nodo puede acceder a la red
Si la red no aparece en la anotación de estado de la red del nodo:
- Verifica que el nodo forme parte de un pool configurado para la función de multirred.
- Comprueba las interfaces del nodo para ver si tiene una interfaz para la red que estás configurando.
- Si a un nodo le falta el estado de la red y solo tiene una interfaz de red, debes crear un pool de nodos con la función de multirred habilitada.
- Si tu nodo contiene la interfaz de la red que estás configurando, pero no se ve en la anotación de estado de la red, comprueba los recursos
Network
yGKENetworkParamSet
(GNP).
Consulta los recursos Network
y GKENetworkParamSet
.
El estado de los recursos Network
y GKENetworkParamSet
(GNP) incluye un campo de condiciones para informar de los errores de configuración. Le recomendamos que compruebe primero el GNP, ya que no depende de otro recurso para ser válido.
Para inspeccionar el campo conditions, ejecuta el siguiente comando:
kubectl get gkenetworkparamsets GNP_NAME -o yaml
Sustituye GNP_NAME
por el nombre del recurso GKENetworkParamSet
.
Cuando la condición Ready
es igual a true, la configuración es válida y el resultado es similar al siguiente:
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
podIPv4Ranges:
rangeNames:
- sec-range-blue
vpc: dataplane
vpcSubnet: subnet-dp
status:
conditions:
- lastTransitionTime: "2023-06-26T17:38:04Z"
message: ""
reason: GNPReady
status: "True"
type: Ready
networkName: dp-network
podCIDRs:
cidrBlocks:
- 172.16.1.0/24
Cuando la condición Ready
es igual a false, el resultado muestra el motivo y es similar al siguiente:
apiVersion: networking.gke.io/v1
kind: GKENetworkParamSet
...
spec:
podIPv4Ranges:
rangeNames:
- sec-range-blue
vpc: dataplane
vpcSubnet: subnet-nonexist
status:
conditions:
- lastTransitionTime: "2023-06-26T17:37:57Z"
message: 'subnet: subnet-nonexist not found in VPC: dataplane'
reason: SubnetNotFound
status: "False"
type: Ready
networkName: ""
Si aparece un mensaje similar, compruebe que el GNP se haya configurado correctamente. Si ya lo está, asegúrate de que la Google Cloud configuración de red sea correcta. Después de actualizar la configuración de la red, puede que tengas que volver a crear el recurso de GNP para activar manualmente una resincronización. Google Cloud De esta forma, se evita el sondeo infinito de la Google Cloud API.
Cuando el GNP esté listo, consulta el recurso Network
.
kubectl get networks NETWORK_NAME -o yaml
Sustituye NETWORK_NAME
por el nombre del recurso Network
.
La salida de una configuración válida es similar a la siguiente:
apiVersion: networking.gke.io/v1
kind: Network
...
spec:
parametersRef:
group: networking.gke.io
kind: GKENetworkParamSet
name: dp-gnp
type: L3
status:
conditions:
- lastTransitionTime: "2023-06-07T19:31:42Z"
message: ""
reason: GNPParamsReady
status: "True"
type: ParamsReady
- lastTransitionTime: "2023-06-07T19:31:51Z"
message: ""
reason: NetworkReady
status: "True"
type: Ready
reason: NetworkReady
indica que el recurso de red está configurado correctamente.reason: NetworkReady
no implica que el recurso de red esté necesariamente disponible en un nodo específico o que se esté usando de forma activa.- Si hay un error o un problema de configuración, el campo
reason
de la condición especifica el motivo exacto del problema. En estos casos, ajuste la configuración en consecuencia. - GKE rellena el campo ParamsReady si el campo parametersRef se ha definido en un recurso
GKENetworkParamSet
que existe en el clúster. Si has especificado unGKENetworkParamSet
type parametersRef y no aparece la condición, asegúrate de que el nombre, el tipo y el grupo coincidan con el recurso GNP que hay en tu clúster.