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 1.7.0 y versiones posteriores 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 redes de GDCV para 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 muestra cómo se usan los puertos UDP y TCP en los nodos del clúster y del balanceador de cargas.

Nodos de plano de control

ProtocoloDirecciónIntervalo de puertoObjetivoUsado por
UDPEntrante6081Encapsulamiento GENEVEPropio
TCPEntrante22Aprovisionamiento y actualizaciones de los nodos del clúster de administradorEstación de trabajo de administrador
TCPEntrante6444Servidor de API de KubernetesTodos
TCPEntrante2379 a 2381API del cliente del servidor de etcdkube-apiserver y etcd
TCPEntrante2382 a 2384API del cliente del servidor de etcd-eventskube-apiserver y etcd-events
TCPEntrante10250API kubeletPlano de control y propio
TCPEntrante10251kube-schedulerPropio
TCPEntrante10252kube-controller-managerPropio
TCPEntrante10256Verificación de estado del nodoAll
TCPAmbos4240Verificación de estado de CNITodos

Nodos trabajadores

ProtocoloDirecciónIntervalo de puertoObjetivoUsado por
TCPEntrante22Aprovisionamiento y actualizaciones de nodos de clústeres de usuariosNodos del clúster del administrador
UDPEntrante6081Encapsulamiento GENEVEPropio
TCPEntrante10250API kubeletPlano de control y propio
TCPEntrante10256Verificación de estado del nodoAll
TCPEntrante30000: 32767NodePort serviciosPropio
TCPAmbos4240Verificación de estado de CNITodos

Nodos del balanceador de cargas

ProtocoloDirecciónIntervalo de puertoObjetivoUsado por
TCPEntrante22Aprovisionamiento y actualizaciones de nodos de clústeres de usuariosNodos del clúster del administrador
UDPEntrante6081Encapsulamiento GENEVEPropio
TCPEntrante443*Administración de clústeresTodos
TCPAmbos4240Verificación de estado de CNITodos
TCPEntrante7946Verificación de estado de Metal LBNodos del balanceador de cargas
UDPEntrante7946Verificación de estado de Metal LBNodos del balanceador de cargas
TCPEntrante10256Verificación de estado del nodoAll

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

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.

ProtocoloDirecciónIntervalo de puertoObjetivoUsado por
TCPEntrante22Aprovisionamiento y actualizaciones de nodos de clústeresTodos los nodos
TCPEntrante443*Servidor de la API de Kubernetes para el clúster agregadoPlano de control y nodos del balanceador de cargas

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

Configura puertos con firewalld

No es necesario que inhabilites el firewall para ejecutar GKE en Bare Metal en Red Hat Enterprise Linux (RHEL) o CentOS. Para usar un firewall, debes abrir los puertos UDP y TCP que usan los nodos del plano del control, trabajador y balanceador de cargas, como se describe en Uso del puerto 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 CentOS o 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 de iptables de Cilium hace que el pod en el 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.