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
Openbare IP-adressen voor knooppunten zoeken
U kunt de openbare IP-adressen voor uw knooppunten op verschillende manieren vinden:
- Gebruik de Azure CLI-opdracht
az vmss list-instance-public-ips
. - Gebruik PowerShell- of Bash-opdrachten.
- U kunt ook de openbare IP-adressen in Azure Portal bekijken door de exemplaren in de virtuele-machineschaalset weer te geven.
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 Routeringsvoorkeur van Azure te gebruiken.
Vereisten
- 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 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/protocol
startPort-endPort/protocol
.
Voorbeelden:
- 80/tcp
- 80/tcp,443/tcp
- 53/udp,80/tcp
- 50000-60000/tcp
Vereisten
- 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 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.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
Meer informatie over het gebruik van meerdere knooppuntgroepen in AKS.
Meer informatie over het gebruik van standard load balancers in AKS
Azure Kubernetes Service