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 <resourceGroup> --location <region>
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 \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--generate-ssh-keys
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 --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip
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-id
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 <region> --name <publicIPPrefixName> --resource-group <resourceGroup>
Visa utdata och anteckna id
för prefixet:
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
...
}
När du skapar ett nytt kluster eller lägger till en ny nodpool använder du slutligen flaggan --node-public-ip-prefix-id
och skickar in prefixets resurs-ID:
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
Du kan hitta offentliga IP-adresser för dina noder på olika sätt:
- Använd Azure CLI-kommandot
az vmss list-instance-public-ips
. - Använd PowerShell- eller Bash-kommandon.
- Du kan också visa offentliga IP-adresser i Azure Portal genom att visa instanserna i VM-skalningsuppsättningen.
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 --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>
Offentliga IP-taggar kan användas på offentliga IP-adresser för noder för att använda funktionen Azure Routing Preference .
- AKS version 1.29 eller senare krävs.
az aks create \
--name <aksClusterName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
az aks nodepool add --cluster-name <aksClusterName> \
--name <nodePoolName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
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.
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
- AKS version 1.29 eller senare krävs.
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
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>"
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>"
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:
- AKS version 1.29 eller senare krävs.
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
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
Lär dig mer om att använda flera nodpooler i AKS.
Lär dig mer om att använda standardlastbalanserare i AKS
Feedback om Azure Kubernetes Service
Azure Kubernetes Service är ett öppen källkod projekt. Välj en länk för att ge feedback: