Verwenden von öffentlichen IP-Adressen auf Instanzebene in Azure Kubernetes Service (AKS)
AKS-Knoten benötigen keine eigene öffentliche IP-Adresse für die Kommunikation. In einigen Szenarien müssen Knoten in einem Knotenpool jedoch möglicherweise jeweils eine eigene dedizierte öffentliche IP-Adresse erhalten. Ein häufiges Szenario hierfür sind Gamingworkloads, bei denen eine Konsole eine direkte Verbindung mit einem virtuellen Cloudcomputer herstellen muss, um Hops zu minimieren. Dieses Szenario kann in AKS durch öffentliche IP-Adressen für Knoten erzielt werden.
Erstellen Sie zunächst eine neue Ressourcengruppe.
az group create --name myResourceGroup2 --location eastus
Erstellen Sie einen neuen AKS-Cluster, und fügen Sie an Ihre Knoten eine öffentliche IP-Adresse an. Jeder Knoten im Knotenpool erhält eine eindeutige öffentliche IP-Adresse. Sie können dies überprüfen, indem Sie sich die VM-Skalierungsgruppeninstanzen ansehen.
az aks create \
--resource-group MyResourceGroup2 \
--name MyManagedCluster \
--location eastus \
--enable-node-public-ip \
--generate-ssh-keys
Bei vorhandenen AKS-Clustern können Sie auch einen neuen Knotenpool hinzufügen und eine öffentliche IP-Adresse an Ihre Knoten anfügen.
az aks nodepool add --resource-group MyResourceGroup2 --cluster-name MyManagedCluster --name nodepool2 --enable-node-public-ip
Präfix für öffentliche IP-Adressen verwenden
Es gibt viele Vorteile bei der Verwendung eines öffentlichen IP-Präfixes. AKS unterstützt die Verwendung von Adressen aus einem vorhandenen öffentlichen IP-Präfix für Ihre Knoten durch das Übergeben der Ressourcen-ID mit dem Flag node-public-ip-prefix
Erstellen eines neuen Clusters oder durch Hinzufügen eines Knoten-Pools.
Erstellen Sie zunächst mit AZ Network Public-IP Prefixein öffentliches IP-Präfix:
az network public-ip prefix create --length 28 --location eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3
Sehen Sie sich die Ausgabe an, und notieren Sie sich die id
für das Präfix:
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix",
...
}
Wenn Sie einen neuen Cluster erstellen oder einen neuen Knoten-Pool hinzufügen, verwenden Sie schließlich das node-public-ip-prefix
-Flag und übergeben Sie die Ressourcen-ID des Präfixes:
az aks create \
--resource-group MyResourceGroup3 \
--name MyManagedCluster \
--location eastus \
--enable-node-public-ip \
--node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix \
--generate-ssh-keys
Öffentliche IPS für Knoten suchen
Sie können die öffentlichen IP-Adressen Ihrer Knoten auf verschiedene Weise ermitteln:
- Verwenden Sie den Azure CLI-Befehl
az vmss list-instance-public-ips
. - Mit PowerShell- oder Bash-Befehlen
- Sie können die öffentlichen IP-Adressen auch im Azure-Portal anzeigen, indem Sie die Instanzen in der VM-Skalierungsgruppe einsehen.
Wichtig
Die Knotenressourcengruppe enthält die Knoten und deren öffentlichen IP-Adressen. Verwenden Sie die Knotenressourcengruppe, wenn Sie Befehle ausführen, um die öffentlichen IP-Adressen Ihrer Knoten zu ermitteln.
az vmss list-instance-public-ips --resource-group MC_MyResourceGroup2_MyManagedCluster_eastus --name YourVirtualMachineScaleSetName
Verwenden von Tags öffentlicher IP-Adressen für öffentliche IP-Adressen von Knoten
Tags öffentlicher IP-Adressen können für öffentliche IP-Adressen von Knoten verwendet werden, um die Für Azure-Routingeinstellung zu nutzen.
Anforderungen
- AKS-Version 1.24 (oder höher) ist erforderlich.
Erstellen eines neuen Clusters mithilfe der Routingeinstellung „Internet“
az aks create \
--name <clusterName> \
--location <location> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
Hinzufügen eines Knotenpools mit Routingeinstellung „Internet“
az aks nodepool add --cluster-name <clusterName> --name <nodepoolName> --location <location> --resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
Zulassen von Hostportverbindungen und Hinzufügen von Knotenpools zu Anwendungssicherheitsgruppen
AKS-Knoten, die öffentliche IP-Adressen von Knoten verwenden, die Dienste mit ihrer Hostadresse hosten, muss eine NSG-Regel hinzugefügt werden, um den Datenverkehr zuzulassen. Durch das Hinzufügen der gewünschten Ports in der Knotenpoolkonfiguration werden die entsprechenden Zulassungsregeln in der Clusternetzwerk-Sicherheitsgruppe erstellt.
Wenn im Subnetz eine Netzwerksicherheitsgruppe mit einem Cluster unter Verwendung eines virtuellen Bring-Your-Own-Netzwerks vorhanden ist, muss dieser Netzwerksicherheitsgruppe eine Zulassungsregel hinzugefügt werden. Dies kann durch Hinzufügen des Knotenpools zu einer Anwendungssicherheitsgruppe (ASG) auf die Knoten in einem bestimmten Knotenpool beschränkt werden. Eine verwaltete ASG wird standardmäßig in der verwalteten Ressourcengruppe erstellt, wenn zulässige Hostports angegeben werden. Knoten können auch mindestens einer benutzerdefinierten ASG hinzugefügt werden, indem die Ressourcen-ID der NSG in den Knotenpoolparametern angegeben wird.
Format der Hostportspezifikation
Wenn Sie die Liste der zuzulassenden Ports angeben, verwenden Sie eine durch Trennzeichen getrennte Liste mit Einträgen im Format port/protocol
oder startPort-endPort/protocol
.
Beispiele:
- 80/tcp
- 80/tcp,443/tcp
- 53/udp,80/tcp
- 50000-60000/tcp
Anforderungen
- AKS-Version 1.24 (oder höher) ist erforderlich.
Erstellen eines neuen Clusters mit zulässigen Ports und Anwendungssicherheitsgruppen
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>" \
--generate-ssh-keys
Hinzufügen eines neuen Knotenpools mit zulässigen Ports und Anwendungssicherheitsgruppen
--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>"
Aktualisieren der zulässigen Ports und Anwendungssicherheitsgruppen für einen Knotenpool
--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>"
Automatisches Zuweisen von Hostports für Podworkloads (VORSCHAU)
Wenn öffentliche IP-Adressen für Knoten konfiguriert sind, können Hostports verwendet werden, um Pods das direkte Empfangen von Datenverkehr zu ermöglichen, ohne einen Lastenausgleichsdienst konfigurieren zu müssen. Dies ist besonders nützlich in Szenarien wie Gaming, in denen die kurzlebige Natur der IP-Adresse des Knotens und des Ports kein Problem darstellt, da ein Matchmakerdienst unter einem bekannten Hostnamen den richtigen Host und Port bereitstellen kann, die zur Verbindungszeit verwendet werden sollen. Da jedoch nur ein Prozess auf einem Host am gleichen Port lauschen kann, kann die Verwendung von Anwendungen mit Hostports zu Problemen bei der Zeitplanung führen. Um dieses Problem zu vermeiden, bietet AKS die Möglichkeit, dass das System zur Planungszeit dynamisch einen verfügbaren Port zuweisen kann, um Konflikte zu vermeiden.
Warnung
Der Portdatenverkehr des Podhosts wird durch die im Cluster geltenden NSG-Standardregeln blockiert. Diese Funktion sollte mit dem Zulassen von Hostports für den Knotenpool kombiniert werden, damit der Datenverkehr fließen kann.
Wichtig
AKS-Previewfunktionen stehen gemäß dem Self-Service- und Aktivierungsprinzip zur Verfügung. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von Service Level Agreements und der Herstellergarantie ausgeschlossen. AKS-Vorschauversionen werden teilweise vom Kundensupport auf Grundlage der bestmöglichen Leistung abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen. Weitere Informationen finden Sie in den folgenden Supportartikeln:
Anforderungen
- AKS-Version 1.24 (oder höher) ist erforderlich.
Registrieren des PodHostPortAutoAssignPreview-Featureflags
Registrieren Sie das Featureflag PodHostPortAutoAssignPreview
mithilfe des Befehls PodHostPortAutoAssignPreview
, wie im folgenden Beispiel gezeigt:
az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Es dauert einige Minuten, bis der Status Registered (Registriert) angezeigt wird. Überprüfen Sie den Registrierungsstatus mithilfe des Befehls az feature show:
az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Wenn der Zustand Registered (Registriert) lautet, aktualisieren Sie die Registrierung des Ressourcenanbieters Microsoft.ContainerService mithilfe des Befehls az provider register:
az provider register --namespace Microsoft.ContainerService
Automatisches Zuweisen eines Hostports zu einem Pod
Das Auslösen der automatischen Hostportzuweisung erfolgt durch Bereitstellen einer Workload ohne Hostports und Anwenden der kubernetes.azure.com/assign-hostports-for-containerports
-Anmerkung mit der Liste der Ports, die Hostportzuweisungen benötigen. Der Wert der Anmerkung sollte als durch Trennzeichen getrennte Liste von Einträgen wie port/protocol
angegeben werden, wobei der Port eine einzelne Portnummer ist, die in der Podspezifikation definiert ist, und das Protokoll ist tcp
oder udp
.
Ports werden aus dem Bereich 40000-59999
zugewiesen und sind im gesamten Cluster eindeutig. Die zugewiesenen Ports werden auch Umgebungsvariablen innerhalb des Pods hinzugefügt, damit die Anwendung bestimmen kann, welche Ports zugewiesen wurden. Der Name der Umgebungsvariablen weist das folgende Format auf (Beispiel unten): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT
, ein Beispiel wäre also mydeployment_PORT_8080_TCP_HOSTPORT: 41932
.
Hier sehen Sie eine echoserver
-Beispielbereitstellung, die die Zuordnung der Hostports für die Ports 8080 und 8443 zeigt:
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
Wenn die Bereitstellung angewendet wird, befinden sich die hostPort
-Einträge im YAML der einzelnen 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
Nächste Schritte
Erfahren Sie mehr über die Verwendung mehrerer Knotenpools in AKS.
Erfahren Sie mehr über die Verwendung von Standard-Lastenausgleichsmodulen in AKS
Azure Kubernetes Service