Requisitos de red

En este documento, se describen los requisitos de red para instalar y operar GKE en Bare Metal.

Requisitos de red externa

GKE en Bare Metal requiere una conexión a Internet para fines operativos. GKE en Bare Metal recupera los componentes del clúster de Container Registry y el clúster se registra con Connect.

Puedes conectarte a Google mediante la Internet pública a través de HTTPS, una red privada virtual (VPN) o una conexión de interconexión dedicada.

Si las máquinas que usas para la estación de trabajo de administrador y los nodos del clúster usan un servidor proxy a fin de acceder a Internet, el servidor proxy debe permitir algunas conexiones específicas. Para obtener más información, consulta la sección de requisitos previos de Instala detrás de un proxy.

Requisitos de red interna

GKE en Bare Metal puede funcionar con conectividad de capa 2 o capa 3 entre nodos del clúster. Los nodos del balanceador de cargas pueden ser los nodos del plano de control o un conjunto Para obtener más información, consulta Elige y configura los balanceadores de cargas.

Cuando usas el balanceo de cargas agrupado de capa 2 con MetalLB (spec.loadBalancer.mode: bundled y spec.loadBalancer.type: layer2), los nodos del balanceador de cargas requieren adyacencia de capa 2. El requisito de proximidad de capa 2 se aplica si ejecutas el balanceador de cargas en los nodos del plano de control o en un conjunto dedicado de nodos de balanceo de cargas. El balanceo de cargas en paquetes con BGP admite el protocolo de capa 3, por lo que no se requiere una adyacencia estricta de capa 2.

Los requisitos para las máquinas del balanceador de cargas son los siguientes:

  • En el balanceo de cargas de capa 2 en paquetes, todos los balanceadores de cargas de un clúster determinado se encuentran en el mismo dominio de capa 2. Los nodos del plano de control también deben estar en el mismo dominio de capa 2.
  • Para el balanceo de cargas de capa 2 en paquetes, todas las direcciones IP virtuales (VIP) deben estar en la subred de la máquina del balanceador de cargas y enrutarse a la puerta de enlace de la subred.
  • Los usuarios son responsables de permitir el tráfico del balanceador de cargas de entrada.

Herramientas de redes de Pods

GKE en Bare Metal te permite configurar hasta 250 Pods por nodo. Kubernetes asigna un bloque de enrutamiento entre dominios sin clases (CIDR) a cada nodo para que cada pod pueda tener una dirección IP única. El tamaño del bloque CIDR corresponde al número máximo de Pods por nodo. En la siguiente tabla, se muestra el tamaño del bloque CIDR que Kubernetes asigna a cada nodo en función de los Pods máximos configurados por nodo:

Cantidad máxima de Pods por nodo Bloque CIDR por nodo Cantidad de direcciones IP
32 /26 64
33 – 64 /25 128
65 – 128 /24 256
129 - 250 /23 512

Ejecutar 250 Pods por nodo requiere que Kubernetes reserve un bloque CIDR /23 para cada nodo. Si suponemos que tu clúster usa el valor predeterminado de /16 para el campo clusterNetwork.pods.cidrBlocks, tu clúster tiene un límite de (2(23-16))=128. nodos. Si planeas aumentar el clúster más allá de este límite, puedes aumentar el valor de clusterNetwork.pods.cidrBlocks o disminuir el valor de nodeConfig.podDensity.maxPodsPerNode. Este método tenía algunas desventajas.

Implementación de clúster de usuario único con alta disponibilidad

En el siguiente diagrama, se ilustra una serie de conceptos clave de herramientas de redes para GKE en Bare Metal en una configuración de red posible.

Configuración de red típica de GKE en Bare Metal

Considera la siguiente información para cumplir con los requisitos de red:

  • Los nodos del plano de control ejecutan los balanceadores de cargas y todos tienen conectividad de capa 2, mientras que otras conexiones, incluidos los nodos trabajadores, solo requieren conectividad de capa 3.
  • Los archivos de configuración definen las direcciones IP para los grupos de nodos trabajadores. Los archivos de configuración también definen las VIP para los siguientes fines:
    • Servicios
    • Ingress
    • Controla el acceso al plano a través de la API de Kubernetes
  • Necesitas una conexión a Google Cloud.

Uso de puertos

En esta sección, se identifican los requisitos de puerto para los clústeres de GKE en Bare Metal. En las siguientes tablas, se muestra cómo los componentes de Kubernetes usan los puertos UDP y TCP en los nodos del clúster y del balanceador de cargas.

Nodos de plano de control

Versión 1.28

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de administrador Estación de trabajo de administrador
TCP Entrante 2379 a 2381 API del cliente del servidor de etcd, métricas y estado kube-apiserver y etcd
TCP Entrante 2382 a 2384 API del cliente del servidor de etcd-events, métricas y estado kube-apiserver y etcd-events
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 6444 Servidor de API de Kubernetes Todos
TCP Entrante 8443 y 8444 GKE Identity Service v2 Deployment de ais que se ejecuta en el espacio de nombres anthos-identity-service
TCP Entrante 9100 proxy de autenticación node-exporter
TCP Entrante 9101 Entrega métricas de nodos solo en localhost

(Requisito de puerto agregado para la versión 1.28 y posteriores).

node-exporter
TCP Entrante 9977 Recibir eventos de auditoría del servidor de la API audit-proxy
TCP Entrante 10250 API kubelet Plano de control y propio
TCP Entrante 10256 Verificación de estado del nodo All
TCP Entrante 10257 kube-controller-manager

(se cambió el número de puerto para la versión 1.28 y posteriores).

Propio
TCP Entrante 10259 kube-scheduler

(se cambió el número de puerto para la versión 1.28 y posteriores).

Propio
TCP Entrante 14443 Servicio de webhook de ANG kube-apiserver y ang-controller-manager

Versión 1.16

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de administrador Estación de trabajo de administrador
TCP Entrante 2379 a 2381 API del cliente del servidor de etcd, métricas y estado kube-apiserver y etcd
TCP Entrante 2382 a 2384 API del cliente del servidor de etcd-events, métricas y estado

(Requisito para puertos agregados a la versión 1.16 y posteriores).

kube-apiserver y etcd-events
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 6444 Servidor de API de Kubernetes Todos
TCP Entrante 9100 Métricas de publicación node-exporter
TCP Entrante 9443 Métricas de entrega o proxy para los componentes del plano de control (este requisito de puerto es para la versión 1.16 del clúster y versiones anteriores). kube-control-plane-metrics-proxy
TCP Entrante 9977 Recibir eventos de auditoría del servidor de la API audit-proxy
TCP Entrante 10250 API kubelet Plano de control y propio
TCP Entrante 10251 kube-scheduler Propio
TCP Entrante 10252 kube-controller-manager Propio
TCP Entrante 10256 Verificación de estado del nodo All
TCP Entrante 14443 Servicio de webhook de ANG kube-apiserver y ang-controller-manager

Versión 1.15 y anteriores

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de administrador Estación de trabajo de administrador
TCP Entrante 2379 a 2381 API del cliente del servidor de etcd, métricas y estado kube-apiserver y etcd
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 6444 Servidor de API de Kubernetes Todos
TCP Entrante 9100 Métricas de publicación node-exporter
TCP Entrante 9443 Métricas de entrega o proxy para los componentes del plano de control (este requisito de puerto es para la versión 1.16 del clúster y versiones anteriores). kube-control-plane-metrics-proxy
TCP Entrante 9977 Recibir eventos de auditoría del servidor de la API audit-proxy
TCP Entrante 10250 API kubelet Plano de control y propio
TCP Entrante 10251 kube-scheduler Propio
TCP Entrante 10252 kube-controller-manager Propio
TCP Entrante 10256 Verificación de estado del nodo All
TCP Entrante 14443 Servicio de webhook de ANG kube-apiserver y ang-controller-manager

Nodos trabajadores

Versión 1.28

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de usuario Nodos del clúster del administrador
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 9100 proxy de autenticación node-exporter
TCP Entrante 9101 Entrega métricas de nodos solo en localhost

(Requisito de puerto agregado para la versión 1.28 y posteriores).

node-exporter
TCP Entrante 10250 API kubelet Plano de control y propio
TCP Entrante 10256 Verificación de estado del nodo All
TCP Entrante 30000: 32767 NodePort servicios Propio

Versión 1.16

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de usuario Nodos del clúster del administrador
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 9100 Métricas de publicación node-exporter
TCP Entrante 10250 API kubelet Plano de control y propio
TCP Entrante 10256 Verificación de estado del nodo All
TCP Entrante 30000: 32767 NodePort servicios Propio

Versión 1.15 y anteriores

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de usuario Nodos del clúster del administrador
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 10250 API kubelet Plano de control y propio
TCP Entrante 10256 Verificación de estado del nodo All
TCP Entrante 30000: 32767 NodePort servicios Propio

Nodos del balanceador de cargas

Versión 1.28

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de usuario Nodos del clúster del administrador
TCP Entrante 443 Administración de clústeres

Este puerto se puede establecer en la configuración del clúster mediante el campo controlPlaneLBPort.

Todos
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP y UDP Entrante 7946 Verificación de estado de MetalLB Nodos del balanceador de cargas
TCP Entrante 10256 Verificación de estado del nodo Todos

Versión 1.16

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de usuario Nodos del clúster del administrador
TCP Entrante 443 Administración de clústeres

Este puerto se puede establecer en la configuración del clúster mediante el campo controlPlaneLBPort.

Todos
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 7946 Verificación de estado de MetalLB Nodos del balanceador de cargas
TCP Entrante 10256 Verificación de estado del nodo Todos

Versión 1.15 y anteriores

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster de usuario Nodos del clúster del administrador
TCP Entrante 443 Administración de clústeres

Este puerto se puede establecer en la configuración del clúster mediante el campo controlPlaneLBPort.

Todos
TCP Ambos 4240 Verificación de estado de CNI Todos
UDP Entrante 6081 Encapsulamiento GENEVE Propio
TCP Entrante 7946 Verificación de estado de MetalLB Nodos del balanceador de cargas
TCP Entrante 10256 Verificación de estado del nodo Todos

Requisitos de los puertos para varios clústeres

En una configuración de varios clústeres, los clústeres agregados deben incluir los siguientes puertos para comunicarse con el clúster de administrador.

Protocolo Dirección Intervalo de puerto Objetivo Usado por
TCP Entrante 22 Aprovisionamiento y actualización de nodos del clúster Todos los nodos
TCP Entrante 443 Servidor de la API de Kubernetes para el clúster agregado

Este puerto se puede configurar en la configuración del clúster con el campo controlPlaneLBPort.

Plano de control y nodos del balanceador de cargas

Configura puertos con firewalld

No es necesario que inhabilites el firewall para ejecutar GKE en Bare Metal en Red Hat Enterprise Linux (RHEL). Para usar firewalld, debes abrir los puertos UDP y TCP que usan los nodos del plano de control, trabajador y del balanceador de cargas como se describe en Uso de puertos en esta página. En los siguientes parámetros de configuración de ejemplo, se muestra cómo puedes abrir puertos con firewall-cmd, la utilidad de línea de comandos de firewall. Debes ejecutar los comandos como el usuario raíz.

Configuración de ejemplo del nodo del plano de control

En el siguiente bloque de comandos, se muestra un ejemplo de cómo puedes abrir los puertos necesarios en servidores que ejecutan nodos del plano de control:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250-10252/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=2379-2380/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

Reemplaza PODS_CIDR por los bloques CIDR reservados para los pods configurados en el campo clusterNetwork.pods.cidrBlocks. El bloque CIDR predeterminado para los pods es 192.168.0.0/16.

Configuración de ejemplo del nodo trabajador

En el siguiente bloque de comandos, se muestra un ejemplo de cómo puedes abrir los puertos necesarios en servidores que ejecutan nodos trabajadores:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

Reemplaza PODS_CIDR por los bloques CIDR reservados para los pods configurados en el campo clusterNetwork.pods.cidrBlocks. El bloque CIDR predeterminado para los pods es 192.168.0.0/16.

Configuración de ejemplo de nodo del balanceador de cargas

En el siguiente bloque de comandos, se muestra un ejemplo de cómo puedes abrir los puertos necesarios en servidores que ejecutan nodos del balanceador de cargas:

firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-port=4240/tcp
firewall-cmd --permanent --zone=public --add-port=6444/tcp
firewall-cmd --permanent --zone=public --add-port=7946/tcp
firewall-cmd --permanent --zone=public --add-port=7946/udp
firewall-cmd --permanent --zone=public --add-port=6081/udp
firewall-cmd --permanent --zone=public --add-port=10250/tcp
firewall-cmd --permanent --zone=public --add-port=10256/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --new-zone=k8s-pods
firewall-cmd --permanent --zone=k8s-pods --add-source PODS_CIDR
firewall-cmd --permanent --zone=k8s-pods --set-target=ACCEPT
firewall-cmd --reload

Reemplaza PODS_CIDR por los bloques CIDR reservados para los pods configurados en el campo clusterNetwork.pods.cidrBlocks. El bloque CIDR predeterminado para los pods es 192.168.0.0/16.

Confirma la configuración de tu puerto

Para verificar la configuración del puerto, sigue estos pasos en el plano de control, el trabajador y los nodos del balanceador de cargas:

  1. Ejecuta el siguiente comando Network Mapper para ver qué puertos están abiertos:

    nmap localhost
    
  2. Ejecuta los siguientes comandos para obtener los ajustes de configuración del firewall:

    firewall-cmd --zone=public --list-all-policies
    firewall-cmd --zone=public --list-ports
    firewall-cmd --zone=public --list-services
    firewall-cmd --zone=k8s-pods --list-all-policies
    firewall-cmd --zone=k8s-pods --list-ports
    firewall-cmd --zone=k8s-pods --list-services
    
  3. Si es necesario, vuelve a ejecutar los comandos de las secciones anteriores para configurar los nodos de forma correcta. Es posible que debas ejecutar los comandos como usuario raíz.

Problema conocido de firewalld

Cuando ejecutas GKE en Bare Metal con firewalld habilitado en Red Hat Enterprise Linux (RHEL), los cambios en firewalld pueden quitar las cadenas iptables de Cilium en la red host. El Pod anetd agrega las cadenas iptables cuando se inicia. La pérdida de las cadenas iptables de Cilium hace que el Pod del nodo pierda conectividad de red fuera del nodo.

Entre los cambios en firewalld que quitan las cadenas de iptables, se incluyen los siguientes:

  • Reinicio de firewalld con systemctl

  • Vuelve a cargar firewalld con el cliente de línea de comandos (firewall-cmd --reload)

Para aplicar cambios de firewalld sin quitar las cadenas de iptables, reinicia anetd en el nodo:

  1. Ubica y borra el Pod anetd con los siguientes comandos para reiniciar anetd:

    kubectl get pods -n kube-system kubectl delete pods -n kube-system ANETD_XYZ
    

    Reemplaza ANETD_XYZ con el nombre del pod anetd.