Utiliser des adresses IP publiques au niveau de l’instance dans Azure Kubernetes Service (AKS)
Les nœuds AKS n’ont pas besoin de leurs propres adresses IP publiques pour communiquer. Toutefois, certains scénarios peuvent exiger que les nœuds d'un pool de nœuds reçoivent leurs propres adresses IP publiques dédiées. C’est par exemple le cas pour les charges de travail de gaming, où une console doit être directement connectée à une machine virtuelle du cloud afin de réduire les tronçons. Ce scénario peut être exécuté sur AKS à l’aide de l’adresse IP publique des nœuds.
Dans un premier temps, créez un nouveau groupe de ressources.
az group create --name myResourceGroup2 --location eastus
Créez un cluster AKS et attachez une adresse IP publique pour vos nœuds. Chacun des nœuds du pool reçoit une adresse IP publique unique. Pour le vérifier, il suffit de regarder les instances du groupe de machines virtuelles identiques.
az aks create \
--resource-group MyResourceGroup2 \
--name MyManagedCluster \
--location eastus \
--enable-node-public-ip \
--generate-ssh-keys
Pour les clusters AKS existants, vous pouvez également ajouter un nouveau pool de nœuds et attacher une adresse IP publique pour vos nœuds.
az aks nodepool add --resource-group MyResourceGroup2 --cluster-name MyManagedCluster --name nodepool2 --enable-node-public-ip
Utiliser un préfixe d’adresse IP publique
Il existe un certain nombre d’avantages liés à l’utilisation d’un préfixe d’adresse IP publique. AKS prend en charge l’utilisation d’adresses à partir d’un préfixe d’adresse IP publique existant pour vos nœuds en passant l’ID de ressource avec l’indicateur node-public-ip-prefix
lors de la création d’un cluster ou de l’ajout d’un pool de nœuds.
Commencez par créer un préfixe d’adresse IP publique à l’aide de la commande az network public-ip prefix create :
az network public-ip prefix create --length 28 --location eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3
Affichez la sortie et notez l’id
pour le préfixe :
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix",
...
}
Enfin, lors de la création d’un cluster ou de l’ajout d’un pool de nœuds, utilisez l’indicateur node-public-ip-prefix
et transmettez l’ID de ressource du préfixe :
az aks create \
--resource-group MyResourceGroup3 \
--name MyManagedCluster \
--location eastus \
--enable-node-public-ip \
--node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix \
--generate-ssh-keys
Localiser des adresses IP publiques pour des nœuds
Vous pouvez localiser les adresses IP publiques de vos nœuds de différentes manières :
- Utilisez la commande Azure CLI
az vmss list-instance-public-ips
. - Utilisez les commandes PowerShell ou Bash.
- Vous pouvez également voir les adresses IP publiques dans le portail Azure en affichant les instances du groupe de machines virtuelles identiques.
Important
Le groupe de ressources du nœud contient les nœuds et leurs adresses IP publiques. Utilisez le groupe de ressources du nœud lorsque vous exécutez des commandes pour rechercher les adresses IP publiques de vos nœuds.
az vmss list-instance-public-ips --resource-group MC_MyResourceGroup2_MyManagedCluster_eastus --name YourVirtualMachineScaleSetName
Utiliser des balises IP publiques sur des adresses IP publiques de nœud
Les balises IP publiques peuvent être utilisées sur les adresses IP publiques de nœud pour utiliser la fonctionnalité De préférence de routage Azure .
Spécifications
- AKS version 1.24 ou ultérieure est obligatoire.
Créer un cluster à l’aide de la préférence de routage Internet
az aks create \
--name <clusterName> \
--location <location> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
Ajouter un pool de nœuds avec préférence de routage Internet
az aks nodepool add --cluster-name <clusterName> --name <nodepoolName> --location <location> --resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
Autoriser les connexions du port hôte et ajouter des pools de nœuds aux groupes de sécurité des applications
Les nœuds AKS utilisant des adresses IP publiques de nœud qui hébergent des services sur leur adresse hôte doivent avoir une règle de groupe de sécurité réseau ajoutée pour autoriser le trafic. L’ajout des ports souhaités dans la configuration du pool de nœuds crée les règles d’autorisation appropriées dans le groupe de sécurité réseau du cluster.
Si un groupe de sécurité réseau est en place sur le sous-réseau avec un cluster utilisant le réseau virtuel apportez votre propre réseau, une règle d’autorisation doit être ajoutée à ce groupe de sécurité réseau. Cela peut être limité aux nœuds d’un pool de nœuds donné en ajoutant le pool de nœuds à un groupe de sécurité d’application (ASG). Un ASG managé est créé par défaut dans le groupe de ressources managé si les ports hôtes autorisés sont spécifiés. Les nœuds peuvent également être ajoutés à un ou plusieurs ASG personnalisés en spécifiant l’ID de ressource du ou des groupes de sécurité réseau dans les paramètres du pool de nœuds.
Format de spécification du port hôte
Lorsque vous spécifiez la liste des ports à autoriser, utilisez une liste séparée par des virgules avec des entrées au format port/protocol
ou startPort-endPort/protocol
.
Exemples :
- 80/tcp
- 80/tcp,443/tcp
- 53/udp,80/tcp
- 50000-60000/tcp
Spécifications
- AKS version 1.24 ou ultérieure est obligatoire.
Créer un cluster avec des ports et des groupes de sécurité d’application autorisés
az aks create \
--resource-group <resourceGroup> \
--name <clusterName> \
--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
Ajouter un nouveau pool de nœuds avec des ports autorisés et des groupes de sécurité d’application
--resource-group <resourceGroup> \
--cluster-name <clusterName> \
--name <nodepoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
Mettre à jour les ports autorisés et les groupes de sécurité d’application pour un pool de nœuds
--resource-group <resourceGroup> \
--cluster-name <clusterName> \
--name <nodepoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
Attribuer automatiquement des ports hôtes pour les charges de travail de pod (PRÉVERSION)
Lorsque les adresses IP publiques sont configurées sur des nœuds, les ports hôtes peuvent être utilisés pour permettre aux pods de recevoir directement le trafic sans avoir à configurer un service d’équilibreur de charge. Cela est particulièrement utile dans les scénarios comme les jeux, où la nature éphémère de l’adresse IP et du port du nœud n’est pas un problème, car un service de matchmaker sur un nom d’hôte bien connu peut fournir l’hôte et le port appropriés à utiliser au moment de la connexion. Toutefois, étant donné qu’un seul processus sur un hôte peut être à l’écoute sur le même port, l’utilisation d’applications avec des ports hôtes peut entraîner des problèmes de planification. Pour éviter ce problème, AKS offre la possibilité au système d’attribuer dynamiquement un port disponible au moment de la planification, ce qui évite les conflits.
Avertissement
Le trafic du port de l’hôte de pod est bloqué par les règles de groupe de sécurité réseau par défaut en place sur le cluster. Cette fonctionnalité doit être combinée avec l’autorisation des ports hôtes sur le pool de nœuds pour autoriser le trafic à circuler.
Important
Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :
Spécifications
- AKS version 1.24 ou ultérieure est obligatoire.
Enregistrer l'indicateur de fonctionnalité « PodHostPortAutoAssignPreview »
Inscrivez l’indicateur de fonctionnalité PodHostPortAutoAssignPreview
à l’aide de la commande az feature register, comme indiqué dans l’exemple suivant :
az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit). Vérifiez l’état de l’inscription à l’aide de la commande az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Quand l’état reflète Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la commande az provider register :
az provider register --namespace Microsoft.ContainerService
Affecter automatiquement un port hôte à un pod
Le déclenchement de l’attribution automatique de port hôte s’effectue en déployant une charge de travail sans ports hôtes et en appliquant l’annotation kubernetes.azure.com/assign-hostports-for-containerports
avec la liste des ports qui nécessitent des affectations de ports hôtes. La valeur de l’annotation doit être spécifiée sous la forme d’une liste d’entrées séparées par des virgules, comme port/protocol
, où le port est un numéro de port individuel qui est défini dans la spécification pod et le protocole est tcp
ou udp
.
Les ports seront attribués à partir de la plage 40000-59999
et seront uniques au sein du cluster. Les ports attribués seront également ajoutés aux variables d’environnement à l’intérieur du pod afin que l’application puisse déterminer quels ports ont été attribués. Le nom de la variable d’environnement mydeployment_PORT_8080_TCP_HOSTPORT: 41932
sera au format suivant (exemple ci-dessous) : <deployment name>_PORT_<port number>_<protocol>_HOSTPORT
.
Voici un exemple echoserver
de déploiement montrant le mappage des ports hôtes pour les ports 8080 et 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
Lorsque le déploiement est appliqué, les hostPort
entrées sont dans le YAML des pods individuels :
$ 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
Étapes suivantes
Découvrez comment utiliser plusieurs pools de nœuds dans AKS.
En savoir plus sur l’utilisation des équilibreurs de charge standard dans AKS
Azure Kubernetes Service