Använda offentliga IP-adresser på instansnivå i Azure Kubernetes Service (AKS)

AKS-noder kräver inte egna offentliga IP-adresser för kommunikation. Scenarier kan dock kräva att noder i en nodpool tar emot sina egna dedikerade offentliga IP-adresser. Ett vanligt scenario är för spelarbetsbelastningar, där en konsol måste upprätta en direktanslutning till en virtuell molndator för att minimera hopp. Det här scenariot kan uppnås på AKS med hjälp av nod offentlig IP.

Skapa först en ny resursgrupp.

az group create --name myResourceGroup2 --location eastus

Skapa ett nytt AKS-kluster och koppla en offentlig IP-adress för dina noder. Var och en av noderna i nodpoolen får en unik offentlig IP-adress. Du kan kontrollera detta genom att titta på vm-skalningsuppsättningsinstanserna.

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

För befintliga AKS-kluster kan du också lägga till en ny nodpool och koppla en offentlig IP-adress för dina noder.

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

Använda ett offentligt IP-prefix

Det finns ett antal fördelar med att använda ett offentligt IP-prefix. AKS stöder användning av adresser från ett befintligt offentligt IP-prefix för dina noder genom att skicka resurs-ID:t med flaggan node-public-ip-prefix när du skapar ett nytt kluster eller lägger till en nodpool.

Skapa först ett offentligt IP-prefix med az network public-ip prefix create:

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

Visa utdata och anteckna id för prefixet:

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

När du skapar ett nytt kluster eller lägger till en ny nodpool använder du slutligen flaggan node-public-ip-prefix och skickar in prefixets resurs-ID:

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

Leta upp offentliga IP-adresser för noder

Du kan hitta offentliga IP-adresser för dina noder på olika sätt:

Viktigt!

Nodresursgruppen innehåller noderna och deras offentliga IP-adresser. Använd nodresursgruppen när du kör kommandon för att hitta offentliga IP-adresser för dina noder.

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

Använda offentliga IP-taggar på offentliga IP-adresser för noder

Offentliga IP-taggar kan användas på offentliga IP-adresser för noder för att använda funktionen Azure Routing Preference .

Krav

  • AKS version 1.24 eller senare krävs.

Skapa ett nytt kluster med routningsinställningen Internet

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

Lägga till en nodpool med routningsinställning internet

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

Tillåt värdportanslutningar och lägg till nodpooler i programsäkerhetsgrupper

AKS-noder som använder offentliga IP-adresser för noder som är värdar för tjänster på värdadressen måste ha en NSG-regel tillagd för att tillåta trafiken. Om du lägger till önskade portar i nodpoolkonfigurationen skapas lämpliga tillåtna regler i klusternätverkssäkerhetsgruppen.

Om en nätverkssäkerhetsgrupp finns på plats i undernätet med ett kluster med ett bring-your-own virtuellt nätverk, måste en tillåt-regel läggas till i nätverkssäkerhetsgruppen. Detta kan begränsas till noderna i en viss nodpool genom att lägga till nodpoolen i en programsäkerhetsgrupp (ASG). En hanterad ASG skapas som standard i den hanterade resursgruppen om tillåtna värdportar anges. Noder kan också läggas till i en eller flera anpassade ASG:er genom att ange resurs-ID för NSG:erna i nodpoolsparametrarna.

Specifikationsformat för värdport

När du anger listan med portar som ska tillåtas använder du en kommaavgränsad lista med poster i formatet port/protocol eller startPort-endPort/protocol.

Exempel:

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

Krav

  • AKS version 1.24 eller senare krävs.

Skapa ett nytt kluster med tillåtna portar och programsäkerhetsgrupper

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

Lägga till en ny nodpool med tillåtna portar och programsäkerhetsgrupper

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

Uppdatera de tillåtna portarna och programsäkerhetsgrupperna för en nodpool

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

Tilldela automatiskt värdportar för poddarbetsbelastningar (FÖRHANDSVERSION)

När offentliga IP-adresser konfigureras på noder kan värdportar användas för att tillåta poddar att ta emot trafik direkt utan att behöva konfigurera en lastbalanserartjänst. Detta är särskilt användbart i scenarier som spel, där den tillfälliga karaktären hos nodens IP och port inte är ett problem eftersom en matchmaker-tjänst med ett välkänt värdnamn kan ge rätt värd och port att använda vid anslutningstid. Men eftersom endast en process på en värd kan lyssna på samma port kan användning av program med värdportar leda till problem med schemaläggning. För att undvika det här problemet ger AKS möjlighet att låta systemet dynamiskt tilldela en tillgänglig port vid schemaläggningstid, vilket förhindrar konflikter.

Varning

Poddvärdporttrafiken blockeras av standardreglerna för NSG i klustret. Den här funktionen bör kombineras med att tillåta värdportar i nodpoolen så att trafik kan flöda.

Viktigt!

AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:

Krav

  • AKS version 1.24 eller senare krävs.

Registrera funktionsflaggan PodHostPortAutoAssignPreview

Registrera funktionsflaggan PodHostPortAutoAssignPreview med kommandot az feature register , som du ser i följande exempel:

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

Det tar några minuter för statusen att visa Registrerad. Kontrollera registreringsstatusen med kommandot az feature show :

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

När statusen visar Registrerad uppdaterar du registreringen av Resursprovidern Microsoft.ContainerService med hjälp av kommandot az provider register :

az provider register --namespace Microsoft.ContainerService

Tilldela automatiskt en värdport till en podd

Utlösande av automatisk tilldelning av värdport görs genom att distribuera en arbetsbelastning utan värdportar och tillämpa anteckningen kubernetes.azure.com/assign-hostports-for-containerports med listan över portar som behöver värdporttilldelningar. Värdet för anteckningen ska anges som en kommaavgränsad lista med poster som port/protocol, där porten är ett enskilt portnummer som definieras i poddspecifikationen och protokollet är tcp eller udp.

Portar tilldelas från intervallet 40000-59999 och kommer att vara unika i klustret. De tilldelade portarna läggs också till i miljövariabler i podden så att programmet kan avgöra vilka portar som har tilldelats. Miljövariabelnamnet kommer att ha följande format (exempel nedan): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT, så ett exempel är mydeployment_PORT_8080_TCP_HOSTPORT: 41932.

Här är ett exempel echoserver på en distribution som visar mappningen av värdportar för portarna 8080 och 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

När distributionen tillämpas finns posterna hostPort i YAML för de enskilda poddarna:

$ 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

Nästa steg