Uso de direcciones IP públicas de nivel de instancia en Azure Kubernetes Service (AKS)
Artículo
Los nodos de AKS no necesitan sus propias direcciones IP públicas para la comunicación. Sin embargo, los escenarios pueden requerir que los nodos de un grupo de nodos reciban sus propias direcciones IP públicas dedicadas. Un escenario común es para las cargas de trabajo de juegos, en las que se necesita una consola para tener una conexión directa a una máquina virtual en la nube para minimizar los saltos. Este escenario se puede conseguir en AKS mediante el uso de la dirección IP pública del nodo.
En primer lugar, cree un nuevo grupo de recursos.
az group create --name <resourceGroup> --location <region>
Cree un clúster de AKS y conecte una dirección IP pública para los nodos. Cada uno de los nodos del grupo de nodos recibe una dirección IP pública única. Puede comprobarlo si examina las instancias del conjunto de escalado de máquinas virtuales.
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--generate-ssh-keys
En el caso de los clústeres de AKS que ya existan, también puede agregar un nuevo grupo de nodos y asociar una dirección IP pública para los nodos.
az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip
Uso de un prefijo de dirección IP pública
Existen varias ventajas al usar un prefijo de dirección IP pública. AKS admite el uso de direcciones de un prefijo de dirección IP pública existente para los nodos pasando el identificador de recurso con la marca --node-public-ip-prefix-id al crear un nuevo clúster o agregar un grupo de nodos.
Por último, al crear un nuevo clúster o al agregar un nuevo grupo de nodos, use la marca --node-public-ip-prefix-id y pase el identificador de recurso del prefijo:
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--node-public-ip-prefix-id /subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName> \
--generate-ssh-keys
Búsqueda de direcciones IP públicas para nodos
Puede buscar las direcciones IP públicas de los nodos de varias maneras:
También puede ver las direcciones IP públicas en Azure Portal visualizando las instancias del conjunto de escalado de máquinas virtuales.
Importante
El grupo de recursos de nodo contiene los nodos y sus direcciones IP públicas. Use el grupo de recursos de nodo al ejecutar comandos para buscar las direcciones IP públicas de los nodos.
az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>
Utilizar etiquetas IP públicas en las IP públicas de los nodos
Las etiquetas IP públicas se pueden usar en las direcciones IP públicas del nodo para usar la característica Preferencia de enrutamiento de Azure.
Requisitos
Se requiere AKS, versión 1.29 o posterior.
Creación de un clúster con preferencia de enrutamiento de Internet
az aks create \
--name <aksClusterName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
Adición de un grupo de nodos con preferencia de enrutamiento de Internet
az aks nodepool add --cluster-name <aksClusterName> \
--name <nodePoolName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
Permiso para conexiones de puerto de host y adición de grupos de nodos a grupos de seguridad de aplicaciones
Los nodos de AKS que usan direcciones IP públicas de nodo que hospedan servicios en su dirección de host deben tener agregada una regla de NSG para permitir el tráfico. Al agregar los puertos deseados en la configuración del grupo de nodos, se crearán las reglas de permiso adecuadas en el grupo de seguridad de red del clúster.
Si un grupo de seguridad de red está implementado en la subred con un clúster mediante una red virtual de tipo "traiga la suya propia", se debe agregar una regla de permiso a ese grupo de seguridad de red. Esto se puede limitar a los nodos de un grupo de nodos determinado agregando el grupo de nodos a un grupo de seguridad de aplicaciones (ASG). Se creará un ASG administrado de forma predeterminada en el grupo de recursos administrado si se especifican los puertos host permitidos. Los nodos también se pueden agregar a uno o varios ASG personalizados especificando el identificador de recurso del ASG en los parámetros del grupo de nodos.
Formato de especificación del puerto de host
Al especificar la lista de puertos que se van a permitir, use una lista separada por comas con entradas en el formato de port/protocol o startPort-endPort/protocol.
Ejemplos:
80/tcp
80/tcp,443/tcp
53/udp,80/tcp
50000-60000/tcp
Requisitos
Se requiere AKS, versión 1.29 o posterior.
Creación de un clúster con puertos permitidos y grupos de seguridad de aplicaciones
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--nodepool-name <nodePoolName> \
--nodepool-allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp\
--nodepool-asg-ids "<asgId>,<asgId>" \
--generate-ssh-keys
Adición de un nuevo grupo de nodos con puertos permitidos y grupos de seguridad de aplicaciones
az aks nodepool add \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
Actualización de los puertos permitidos y los grupos de seguridad de aplicaciones para un grupo de nodos
az aks nodepool update \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
Asignación automática de puertos de host para cargas de trabajo de pod (VERSIÓN PRELIMINAR)
Cuando las direcciones IP públicas están configuradas en nodos, se pueden usar los puertos de host para permitir que los pods reciban directamente el tráfico sin tener que configurar un servicio de equilibrador de carga. Esto resulta especialmente útil en escenarios como en los juegos, donde la naturaleza efímera de la dirección IP del nodo y el puerto no es un problema porque un servicio emparejador en un nombre de host conocido puede proporcionar el host y el puerto correctos que se usarán en el momento de la conexión. Sin embargo, dado que solo un proceso de un host puede estar escuchando en el mismo puerto, el uso de aplicaciones con puertos host puede provocar problemas con la programación. Para evitar este problema, AKS proporciona la capacidad de que el sistema asigne dinámicamente un puerto disponible en el momento de la programación, lo que evita conflictos.
Advertencia
El tráfico del puerto de host del pod se bloqueará mediante las reglas de NSG predeterminadas implementadas en el clúster. Esta característica debe combinarse con la autorización para los puertos de host del grupo de nodos para permitir que el tráfico fluya.
Importante
Las características en versión preliminar de AKS están disponibles como opción de participación y autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:
Registro de la marca de características "PodHostPortAutoAssignPreview"
Registre la marca de la característica PodHostPortAutoAssignPreview con el comando PodHostPortAutoAssignPreview, como se muestra en el siguiente ejemplo:
az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Tarda unos minutos en que el estado muestre Registrado. Para comprobar el estado de registro se usa el comandoaz feature show:
az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register:
az provider register --namespace Microsoft.ContainerService
Asignación automática de un puerto de host a un pod
El desencadenamiento de la asignación automática de puertos de host se realiza mediante la implementación de una carga de trabajo sin ningún puerto de host y la aplicación de la anotación kubernetes.azure.com/assign-hostports-for-containerports con la lista de puertos que necesitan asignaciones de puertos de host. El valor de la anotación debe especificarse como una lista separada por comas de entradas como port/protocol, donde el puerto es un número de puerto individual definido en la especificación de pod y el protocolo es tcp o udp.
Los puertos se asignarán desde el intervalo 40000-59999 y serán únicos en todo el clúster. Los puertos asignados también se agregarán a las variables de entorno dentro del pod para que la aplicación pueda determinar qué puertos se asignaron. El nombre de la variable de entorno tendrá el siguiente formato (ejemplo a continuación): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT. Así, un ejemplo sería mydeployment_PORT_8080_TCP_HOSTPORT: 41932.
Esta es una implementación echoserver de ejemplo que muestra la asignación de puertos de host para los puertos 8080 y 8443:
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de Azure Kubernetes Service
Azure Kubernetes Service es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
En este módulo se describen las aplicaciones de escalado en Azure Kubernetes Service (AKS), incluido el escalado manual de pods o nodos y la integración con Azure Container Instances (ACI).