Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
En primer lugar, cree un prefijo de dirección IP pública mediante az network public-ip prefix create:
az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>
Vea la salida y tome nota de id para el prefijo:
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
...
}
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
Usar un prefijo IP público de doble pila (versión preliminar)
Puede asignar direcciones IP públicas IPv4 e IPv6 a cada nodo de un grupo de nodos mediante un prefijo de dirección IP pública de doble pila. Este enfoque le permite traer sus propios prefijos ip públicos y asegurarse de que cada nodo recibe una dirección IPv4 y una dirección IPv6.
Esta característica es útil para las cargas de trabajo que requieren conectividad directa de entrada o salida a través de IPv4 e IPv6 o aplicaciones que funcionan en entornos que requieren el cumplimiento de IPv6.
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 la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del servicio de asistencia 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:
Requisitos
Para usar prefijos de IP pública de pila doble con IP públicas de nodo, asegúrese de que se cumplan los siguientes requisitos previos:
- El clúster está configurado como un clúster de doble pila con las familias de direcciones IP IPv4 e IPv6.
- El clúster usa Azure CNI con redes superpuestas.
- Tiene un prefijo IP público de IPv4 y un prefijo IP público de IPv6 creados en la misma región que su clúster de AKS.
- Ambos prefijos ip públicos usan la SKU estándar.
- La identidad del clúster de AKS tiene permiso para administrar los prefijos de dirección IP pública. Si los prefijos están en un grupo de recursos diferente, asigne el rol Colaborador de red en ese grupo de recursos a la identidad del clúster.
Registro de las características en versión preliminar
La compatibilidad con prefijos de IP pública de doble pila (IPv4 e IPv6) para las direcciones IP públicas de los nodos está disponible actualmente como versión preliminar. Antes de poder usar esta funcionalidad, debe instalar o actualizar la extensión de la CLI de Azure y registrar los indicadores de características NodePublicIPv6PrefixPreview en su suscripción.
Instale o actualice la extensión aks-preview:
az extension add --name aks-preview --upgrade
Registre las características de versión preliminar necesarias:
az feature register --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview
Los registros de características pueden tardar varios minutos en completarse. Para comprobar el estado del registro, ejecute:
az feature show --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview --query "properties.state"
Espere hasta que ambas funciones muestren el estado Registrado antes de continuar.
Una vez registradas las marcas de características, actualice el proveedor de recursos para asegurarse de que se aplican los cambios:
az provider register --namespace Microsoft.ContainerService
Una vez completado el registro, puede crear o actualizar un clúster para usar prefijos de IP públicas de doble pila para direcciones IP públicas de nodo.
Crear prefijos de IP pública
Cree un prefijo IP público para IPv4 e IPv6 mediante la CLI de Azure.
Para IPv4:
az network public-ip prefix create \
--resource-group <resourceGroup> \
--name <ipv4PrefixName> \
--location <region> \
--length 28 \
--sku Standard \
--version IPv4
Para IPv6:
az network public-ip prefix create \
--resource-group <resourceGroup> \
--name <ipv6PrefixName> \
--location <region> \
--length 124 \
--sku Standard \
--version IPv6
Después de crear los prefijos, anote los identificadores de recursos de ambos prefijos.
Cree un clúster con prefijos de IP pública de los nodos de doble pila
Al crear un nuevo clúster de AKS, use el --node-public-ip-prefix-ids parámetro para especificar los prefijos de dirección IP pública IPv4 e IPv6.
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--ip-families IPv4,IPv6 \
--network-plugin azure \
--network-plugin-mode overlay \
--node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>" \
--generate-ssh-keys
El --node-public-ip-prefix-ids parámetro acepta una lista separada por comas de identificadores de recursos de prefijo de IP pública. La lista debe incluir un prefijo IPv4 y un prefijo IPv6.
Agregar un grupo de nodos con prefijos de IP pública de nodo de doble pila
También puede agregar un grupo de nodos con prefijos de dirección IP pública de nodo de pila doble a un clúster de pila doble existente.
az aks nodepool add \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--enable-node-public-ip \
--node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>"
Limitaciones
Las siguientes limitaciones se aplican al prefijo de dirección IP pública de doble pila:
- Debe proporcionar un prefijo IPv4 y un prefijo IPv6. No se admiten configuraciones solo IPv6.
- La configuración de ip pública del nodo es inmutable. Para cambiar los prefijos de dirección IP pública, debe crear un nuevo grupo de nodos y migrar cargas de trabajo.
- A cada nodo se le asigna una única dirección IP pública IPv6.
- Esta característica no es compatible con AKS Automatic ni con el aprovisionamiento automático de nodos.
- No se admiten grupos de nodos de varias NIC.
- Se admite Cluster Autoscaler, pero asegúrese de que el número máximo de nodos configurado no exceda el número de direcciones IP disponibles en el prefijo de IP pública, ya que cada nodo requiere una IP del prefijo.
Búsqueda de direcciones IP públicas para nodos
Puede buscar las direcciones IP públicas de los nodos de varias maneras:
- Use el comando
az vmss list-instance-public-ipsde la CLI de Azure. - Use comandos de PowerShell o Bash.
- 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 direcciones IP públicas del nodo para usar la característica preferencias de enrutamiento de Azure , que está disponible en regiones especificadas.
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 la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del servicio de asistencia 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:
Requisitos
- Se requiere AKS, versión 1.29 o posterior.
Registro de la marca de características "PodHostPortAutoAssignPreview"
Registre la marca de característica PodHostPortAutoAssignPreview con el comando az feature register, 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 comando az 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:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echoserver-hostport
labels:
app: echoserver-hostport
spec:
replicas: 3
selector:
matchLabels:
app: echoserver-hostport
template:
metadata:
annotations:
kubernetes.azure.com/assign-hostports-for-containerports: 8080/tcp,8443/tcp
labels:
app: echoserver-hostport
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: echoserver-hostport
image: k8s.gcr.io/echoserver:1.10
ports:
- name: http
containerPort: 8080
protocol: TCP
- name: https
containerPort: 8443
protocol: TCP
Cuando se aplica la implementación, las entradas hostPort estarán en el archivo YAML de los pods individuales:
$ kubectl describe pod echoserver-hostport-75dc8d8855-4gjfc
<cut for brevity>
Containers:
echoserver-hostport:
Container ID: containerd://d0b75198afe0612091f412ee7cf7473f26c80660143a96b459b3e699ebaee54c
Image: k8s.gcr.io/echoserver:1.10
Image ID: k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 Ports: 8080/TCP, 8443/TCP
Host Ports: 46645/TCP, 49482/TCP
State: Running
Started: Thu, 12 Jan 2023 18:02:50 +0000
Ready: True
Restart Count: 0
Environment:
echoserver-hostport_PORT_8443_TCP_HOSTPORT: 49482
echoserver-hostport_PORT_8080_TCP_HOSTPORT: 46645
Pasos siguientes
Obtenga información sobre el uso de varios grupos de nodos en AKS.
Más información sobre el uso de equilibradores de carga estándar en AKS.