Openbare IP-adressen op exemplaarniveau gebruiken in Azure Kubernetes Service (AKS)

AKS-knooppunten vereisen geen eigen openbare IP-adressen voor communicatie. Scenario's kunnen echter vereisen dat knooppunten in een knooppuntgroep hun eigen toegewezen openbare IP-adressen ontvangen. Een veelvoorkomend scenario is voor gamingworkloads, waarbij een console een directe verbinding moet maken met een virtuele cloudmachine om hops te minimaliseren. Dit scenario kan worden bereikt op AKS met behulp van openbare IP-adressen van knooppunten.

Maak eerst een nieuwe resourcegroep.

az group create --name myResourceGroup2 --location eastus

Maak een nieuw AKS-cluster en koppel een openbaar IP-adres voor uw knooppunten. Elk van de knooppunten in de knooppuntgroep ontvangt een uniek openbaar IP-adres. U kunt dit controleren door naar de instanties van de virtuele-machineschaalset te kijken.

az aks create -g MyResourceGroup2 -n MyManagedCluster -l eastus  --enable-node-public-ip

Voor bestaande AKS-clusters kunt u ook een nieuwe knooppuntgroep toevoegen en een openbaar IP-adres voor uw knooppunten koppelen.

az aks nodepool add -g MyResourceGroup2 --cluster-name MyManagedCluster -n nodepool2 --enable-node-public-ip

Een openbaar IP-voorvoegsel gebruiken

Er zijn een aantal voordelen voor het gebruik van een openbaar IP-voorvoegsel. AKS ondersteunt het gebruik van adressen van een bestaand openbaar IP-voorvoegsel voor uw knooppunten door de resource-id door te geven met de vlag node-public-ip-prefix bij het maken van een nieuw cluster of het toevoegen van een knooppuntgroep.

Maak eerst een openbaar IP-voorvoegsel met az network public-ip prefix create:

az network public-ip prefix create --length 28 --location eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3

Bekijk de uitvoer en noteer het id voorvoegsel:

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix",
  ...
}

Als u ten slotte een nieuw cluster maakt of een nieuwe knooppuntgroep toevoegt, gebruikt u de vlag node-public-ip-prefix en geeft u de resource-id van het voorvoegsel door:

az aks create -g MyResourceGroup3 -n MyManagedCluster -l eastus --enable-node-public-ip --node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix

Openbare IP-adressen voor knooppunten zoeken

U kunt de openbare IP-adressen voor uw knooppunten op verschillende manieren vinden:

Belangrijk

De knooppuntresourcegroep bevat de knooppunten en hun openbare IP-adressen. Gebruik de knooppuntresourcegroep bij het uitvoeren van opdrachten om de openbare IP-adressen voor uw knooppunten te vinden.

az vmss list-instance-public-ips -g MC_MyResourceGroup2_MyManagedCluster_eastus -n YourVirtualMachineScaleSetName

Openbare IP-tags gebruiken op openbare IP-adressen van knooppunten

Openbare IP-tags kunnen worden gebruikt op openbare IP-adressen van knooppunten om de functie Routeringsvoorkeur van Azure te gebruiken.

Vereisten

  • AKS versie 1.24 of hoger is vereist.

Een nieuw cluster maken met behulp van routeringsvoorkeur internet

az aks create -n <clusterName> -l <location> -g <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

Een knooppuntgroep met routeringsvoorkeur internet toevoegen

az aks nodepool add --cluster-name <clusterName> -n <nodepoolName> -l <location> -g <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

Hostpoortverbindingen toestaan en knooppuntgroepen toevoegen aan toepassingsbeveiligingsgroepen

AKS-knooppunten die gebruikmaken van openbare IP-adressen van knooppunten die services hosten op hun hostadres, moeten een NSG-regel hebben toegevoegd om het verkeer toe te staan. Als u de gewenste poorten toevoegt in de configuratie van de knooppuntgroep, worden de juiste regels voor toestaan gemaakt in de netwerkbeveiligingsgroep van het cluster.

Als er een netwerkbeveiligingsgroep aanwezig is in het subnet met een cluster met behulp van een bring-your-own virtueel netwerk, moet er een regel voor toestaan worden toegevoegd aan die netwerkbeveiligingsgroep. Dit kan worden beperkt tot de knooppunten in een bepaalde knooppuntgroep door de knooppuntgroep toe te voegen aan een toepassingsbeveiligingsgroep (ASG). Een beheerde ASG wordt standaard gemaakt in de beheerde resourcegroep als toegestane hostpoorten zijn opgegeven. Knooppunten kunnen ook worden toegevoegd aan een of meer aangepaste ASG's door de resource-id van de NSG('s) op te geven in de parameters van de knooppuntgroep.

Indeling van hostpoortspecificatie

Wanneer u de lijst met toegestane poorten opgeeft, gebruikt u een door komma's gescheiden lijst met vermeldingen in de indeling of port/protocolstartPort-endPort/protocol.

Voorbeelden:

  • 80/tcp
  • 80/tcp,443/tcp
  • 53/udp,80/tcp
  • 50000-60000/tcp

Vereisten

  • AKS versie 1.24 of hoger is vereist.

Een nieuw cluster maken met toegestane poorten en toepassingsbeveiligingsgroepen

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>"

Een nieuwe knooppuntgroep met toegestane poorten en toepassingsbeveiligingsgroepen toevoegen

  --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>"

De toegestane poorten en toepassingsbeveiligingsgroepen voor een knooppuntgroep bijwerken

  --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>"

Hostpoorten automatisch toewijzen voor podworkloads (PREVIEW)

Wanneer openbare IP-adressen zijn geconfigureerd op knooppunten, kunnen hostpoorten worden gebruikt om pods rechtstreeks verkeer te laten ontvangen zonder dat er een load balancer-service hoeft te worden geconfigureerd. Dit is vooral handig in scenario's zoals gaming, waarbij de tijdelijke aard van het IP-adres van het knooppunt en de poort geen probleem is, omdat een matchmaker-service op een bekende hostnaam de juiste host en poort kan bieden die tijdens de verbinding moet worden gebruikt. Omdat slechts één proces op een host op dezelfde poort kan luisteren, kan het gebruik van toepassingen met hostpoorten leiden tot problemen met de planning. Om dit probleem te voorkomen, biedt AKS de mogelijkheid om het systeem dynamisch een beschikbare poort toe te wijzen tijdens het plannen, waardoor conflicten worden voorkomen.

Waarschuwing

Poortverkeer van podhost wordt geblokkeerd door de standaard NSG-regels op het cluster. Deze functie moet worden gecombineerd met het toestaan van hostpoorten in de knooppuntgroep om verkeer te laten stromen.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Vereisten

  • AKS versie 1.24 of hoger is vereist.

De functievlag PodHostPortAutoAssignPreview registreren

Registreer de PodHostPortAutoAssignPreview functievlag met behulp van de opdracht az feature register , zoals wordt weergegeven in het volgende voorbeeld:

az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven. Controleer de registratiestatus met behulp van de opdracht az feature show :

az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Wanneer de status Geregistreerd is, vernieuwt u de registratie van de Resourceprovider Microsoft.ContainerService met behulp van de opdracht az provider register:

az provider register --namespace Microsoft.ContainerService

Automatisch een hostpoort toewijzen aan een pod

Automatische toewijzing van hostpoorten wordt uitgevoerd door een workload zonder hostpoorten te implementeren en de kubernetes.azure.com/assign-hostports-for-containerports aantekening toe te passen met de lijst met poorten die hostpoorttoewijzingen nodig hebben. De waarde van de aantekening moet worden opgegeven als een door komma's gescheiden lijst met vermeldingen, zoals port/protocol, waarbij de poort een afzonderlijk poortnummer is dat is gedefinieerd in de podspecificatie en het protocol is tcp of udp.

Poorten worden toegewezen vanuit het bereik 40000-59999 en zijn uniek in het cluster. De toegewezen poorten worden ook toegevoegd aan omgevingsvariabelen in de pod, zodat de toepassing kan bepalen welke poorten zijn toegewezen. De naam van de omgevingsvariabele heeft de volgende indeling (voorbeeld hieronder): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT, dus een voorbeeld zou zijn mydeployment_PORT_8080_TCP_HOSTPORT: 41932.

Hier volgt een voorbeeldimplementatie echoserver met de toewijzing van hostpoorten voor poorten 8080 en 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

Wanneer de implementatie wordt toegepast, worden de hostPort vermeldingen weergegeven in de YAML van de afzonderlijke pods:

$ 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

Volgende stappen