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 <resourceGroup> --location <region>

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 \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --location <region> \
    --enable-node-public-ip \
    --generate-ssh-keys

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

az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --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-id 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 <region> --name <publicIPPrefixName> --resource-group <resourceGroup>

Bekijk de uitvoer en noteer het id voorvoegsel:

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

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

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

Een openbaar dual-stack-IP-voorvoegsel gebruiken (preview)

U kunt zowel openbare IPv4- als IPv6-ip-adressen toewijzen aan elk knooppunt in een knooppuntgroep met behulp van een openbaar IP-voorvoegsel met dubbele stack. Met deze methode kunt u uw eigen openbare IP-voorvoegsels gebruiken en ervoor zorgen dat elk knooppunt één IPv4-adres en één IPv6-adres ontvangt.

Deze functie is handig voor workloads die directe binnenkomende of uitgaande connectiviteit vereisen via zowel IPv4 als IPv6 of toepassingen die worden uitgevoerd in omgevingen waarvoor IPv6-naleving is vereist.

Belangrijk

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

Requirements

Als u openbare IP-voorvoegsels voor twee stacks met openbare IP-adressen van knooppunten wilt gebruiken, moet u ervoor zorgen dat aan de volgende vereisten wordt voldaan:

  • Uw cluster is geconfigureerd als een cluster met twee stacks met zowel IPv4- als IPv6 IP-families.
  • Uw cluster maakt gebruik van Azure CNI met overlaynetwerken.
  • U hebt één openbaar IP-voorvoegsel voor IPv4 en één openbaar IPv6-IP-voorvoegsel dat is gemaakt in dezelfde regio als uw AKS-cluster.
  • Beide openbare IP-voorvoegsels maken gebruik van de Standard-SKU.
  • De AKS-clusteridentiteit is gemachtigd om de openbare IP-voorvoegsels te beheren. Als de prefixen zich in een andere resourcegroep bevinden, kent u de rol Netwerkbijdrager voor die resourcegroep toe aan de clusteridentiteit.

De preview-functies registreren

Ondersteuning voor dual-stack-openbare IP-voorvoegsels (IPv4 en IPv6) voor openbare IP-adressen van knooppunten is momenteel als preview beschikbaar. Voordat u deze functie kunt gebruiken, moet u de Azure CLI-extensie installeren of bijwerken en de NodePublicIPv6PrefixPreview functievlagmen registreren in uw abonnement.

Installeer of werk de aks-preview-extensie bij:

az extension add --name aks-preview --upgrade

Registreer de vereiste preview-functies:

az feature register --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview

Het kan enkele minuten duren voordat de functieregistraties zijn voltooid. Voer de volgende opdracht uit om de registratiestatus te controleren:

az feature show --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview --query "properties.state"

Wacht totdat beide functies de status Geregistreerd rapporteren voordat u doorgaat.

Nadat de functievlagmen zijn geregistreerd, vernieuwt u de resourceprovider om ervoor te zorgen dat de wijzigingen worden toegepast:

az provider register --namespace Microsoft.ContainerService

Zodra de registratie is voltooid, kunt u een cluster maken of bijwerken om openbare IP-voorvoegsels van twee stacks te gebruiken voor openbare IP-adressen van knooppunten.

Openbare IP-voorvoegsels maken

Maak een openbaar IP-voorvoegsel voor IPv4 en IPv6 met behulp van de Azure CLI.

Voor IPv4:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv4PrefixName> \
  --location <region> \
  --length 28 \
  --sku Standard \
  --version IPv4

Voor IPv6:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv6PrefixName> \
  --location <region> \
  --length 124 \
  --sku Standard \
  --version IPv6

Nadat u de voorvoegsels hebt gemaakt, noteert u de resource-id's van beide voorvoegsels.

Een nieuw cluster maken met openbare IP-voorvoegsels voor twee stack-knooppunten

Wanneer u een nieuw AKS-cluster maakt, gebruikt u de --node-public-ip-prefix-ids parameter om zowel de openbare IP-voorvoegsels IPv4 als IPv6 op te geven.

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

De --node-public-ip-prefix-ids parameter accepteert een door komma's gescheiden lijst met resource-id's voor openbare IP-voorvoegsels. De lijst moet één IPv4-voorvoegsel en één IPv6-voorvoegsel bevatten.

Een knooppuntgroep toevoegen met openbare IP-voorvoegsels voor twee stack-knooppunten

U kunt ook een nodegroep met dual-stack openbare IP-prefixen voor knooppunten toevoegen aan een bestaand dual-stack-cluster.

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --enable-node-public-ip \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>"

Limitations

De volgende beperkingen gelden voor het openbare IP-voorvoegsel dual-stack:

  • U moet zowel een IPv4- als een IPv6-voorvoegsel opgeven. IPv6-configuraties worden niet ondersteund.
  • Openbare IP-configuratie van knooppunten is onveranderbaar. Als u de openbare IP-voorvoegsels wilt wijzigen, moet u een nieuwe knooppuntgroep maken en workloads migreren.
  • Aan elk knooppunt wordt één openbaar IPv6-ip-adres toegewezen.
  • Deze functie wordt niet ondersteund in combinatie met AKS Automatic of automatische inrichting van knooppunten.
  • Pools met meerdere NIC-knooppunten worden niet ondersteund.
  • Automatische schaalaanpassing van clusters wordt ondersteund, maar zorg ervoor dat het geconfigureerde maximumaantal knooppunten het aantal beschikbare IP-adressen in het openbare IP-voorvoegsel niet overschrijdt, omdat voor elk knooppunt één IP van het voorvoegsel is vereist.

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 --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>

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 Azure Routing Preference te gebruiken, die beschikbaar is in opgegeven regio's.

Requirements

  • AKS versie 1.29 of hoger is vereist.

Een nieuw cluster maken met behulp van routeringsvoorkeur internet

az aks create \
    --name <aksClusterName> \
    --location <region> \
    --resource-group <resourceGroup> \
    --enable-node-public-ip \
    --node-public-ip-tags RoutingPreference=Internet \
    --generate-ssh-keys

Een knooppuntgroep met routeringsvoorkeur internet toevoegen

az aks nodepool add --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --location <region> \
  --resource-group <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 dat een bring-your-own virtueel netwerk gebruikt, moet er een toestaanregel 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, gebruik dan een door komma's gescheiden lijst met vermeldingen in de indeling van port/protocol of startPort-endPort/protocol.

Examples:

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

Requirements

  • AKS versie 1.29 of hoger is vereist.

Een nieuw cluster maken met toegestane poorten en toepassingsbeveiligingsgroepen

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

Een nieuwe knooppuntgroep met toegestane poorten en toepassingsbeveiligingsgroepen toevoegen

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

De toegestane poorten en toepassingsbeveiligingsgroepen voor een knooppuntgroep bijwerken

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

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 het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Requirements

  • AKS versie 1.29 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