Używanie publicznych adresów IP na poziomie wystąpienia w usłudze Azure Kubernetes Service (AKS)
Węzły usługi AKS nie wymagają własnych publicznych adresów IP do komunikacji. Jednak scenariusze mogą wymagać, aby węzły w puli węzłów odbierały własne dedykowane publiczne adresy IP. Typowy scenariusz dotyczy obciążeń gier, w których konsola musi nawiązać bezpośrednie połączenie z maszyną wirtualną w chmurze, aby zminimalizować przeskoki. Ten scenariusz można osiągnąć w usłudze AKS przy użyciu publicznego adresu IP węzła.
Najpierw utwórz nową grupę zasobów.
az group create --name <resourceGroup> --location <region>
Utwórz nowy klaster usługi AKS i dołącz publiczny adres IP dla węzłów. Każdy z węzłów w puli węzłów otrzymuje unikatowy publiczny adres IP. Możesz to sprawdzić, przeglądając wystąpienia zestawu skalowania maszyn wirtualnych.
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--generate-ssh-keys
W przypadku istniejących klastrów usługi AKS można również dodać nową pulę węzłów i dołączyć publiczny adres IP dla węzłów.
az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip
Używanie prefiksu publicznego adresu IP
Istnieje wiele korzyści związanych z używaniem prefiksu publicznego adresu IP. Usługa AKS obsługuje używanie adresów z istniejącego prefiksu publicznego adresu IP dla węzłów przez przekazanie identyfikatora zasobu z flagą --node-public-ip-prefix-id
podczas tworzenia nowego klastra lub dodawania puli węzłów.
Najpierw utwórz prefiks publicznego adresu IP przy użyciu polecenia az network public-ip prefix create:
az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>
Wyświetl dane wyjściowe i zanotuj id
prefiks dla prefiksu:
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
...
}
Na koniec podczas tworzenia nowego klastra lub dodawania nowej puli węzłów użyj flagi --node-public-ip-prefix-id
i przekaż identyfikator zasobu prefiksu:
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
Lokalizowanie publicznych adresów IP dla węzłów
Publiczne adresy IP dla węzłów można zlokalizować na różne sposoby:
- Użyj polecenia interfejsu wiersza polecenia
az vmss list-instance-public-ips
platformy Azure . - Użyj poleceń programu PowerShell lub powłoki Bash.
- Publiczne adresy IP można również wyświetlić w witrynie Azure Portal, wyświetlając wystąpienia w zestawie skalowania maszyn wirtualnych.
Ważne
Grupa zasobów węzła zawiera węzły i ich publiczne adresy IP. Użyj grupy zasobów węzła podczas wykonywania poleceń, aby znaleźć publiczne adresy IP dla węzłów.
az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>
Używanie publicznych tagów adresów IP na publicznych adresach IP węzła
Publiczne tagi IP można używać na publicznych adresach IP węzła do korzystania z funkcji preferencji routingu platformy Azure.
Wymagania
- Wymagana jest usługa AKS w wersji 1.29 lub nowszej.
Tworzenie nowego klastra przy użyciu Internetu preferencji routingu
az aks create \
--name <aksClusterName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
Dodawanie puli węzłów z internetem preferencji routingu
az aks nodepool add --cluster-name <aksClusterName> \
--name <nodePoolName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
Zezwalaj na połączenia portów hosta i dodawanie pul węzłów do grup zabezpieczeń aplikacji
Węzły usługi AKS korzystające z publicznych adresów IP węzłów hostujących usługi na swoim adresie hosta muszą mieć dodaną regułę sieciowej grupy zabezpieczeń, aby zezwolić na ruch. Dodanie żądanych portów w konfiguracji puli węzłów spowoduje utworzenie odpowiednich reguł zezwalania w sieciowej grupie zabezpieczeń klastra.
Jeśli sieciowa grupa zabezpieczeń znajduje się w podsieci z klastrem korzystającym z własnej sieci wirtualnej, reguła zezwalania musi zostać dodana do tej sieciowej grupy zabezpieczeń. Może to być ograniczone do węzłów w danej puli węzłów, dodając pulę węzłów do grupy zabezpieczeń aplikacji (ASG). Zarządzana grupa asg zostanie utworzona domyślnie w zarządzanej grupie zasobów, jeśli określono dozwolone porty hosta. Węzły można również dodać do co najmniej jednej niestandardowej grupy zabezpieczeń, określając identyfikator zasobu sieciowych grup zabezpieczeń w parametrach puli węzłów.
Format specyfikacji portu hosta
Podczas określania listy dozwolonych portów użyj listy rozdzielanej przecinkami z wpisami w formacie port/protocol
lub startPort-endPort/protocol
.
Przykłady:
- 80/tcp
- 80/tcp,443/tcp
- 53/udp,80/tcp
- 50000-60000/tcp
Wymagania
- Wymagana jest usługa AKS w wersji 1.29 lub nowszej.
Tworzenie nowego klastra z dozwolonymi portami i grupami zabezpieczeń aplikacji
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
Dodawanie nowej puli węzłów z dozwolonymi portami i grupami zabezpieczeń aplikacji
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>"
Aktualizowanie dozwolonych portów i grup zabezpieczeń aplikacji dla puli węzłów
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>"
Automatyczne przypisywanie portów hosta dla obciążeń zasobników (WERSJA ZAPOZNAWCZA)
Gdy publiczne adresy IP są skonfigurowane w węzłach, można użyć portów hosta, aby umożliwić zasobnikom bezpośrednie odbieranie ruchu bez konieczności konfigurowania usługi równoważenia obciążenia. Jest to szczególnie przydatne w scenariuszach, takich jak gry, gdzie efemeryczny charakter adresu IP węzła i portu nie jest problemem, ponieważ usługa matchmaker w dobrze znanej nazwie hosta może zapewnić prawidłowy host i port do użycia w czasie połączenia. Jednak ponieważ tylko jeden proces na hoście może nasłuchiwać na tym samym porcie, użycie aplikacji z portami hosta może prowadzić do problemów z planowaniem. Aby uniknąć tego problemu, usługa AKS zapewnia możliwość dynamicznego przypisywania dostępnego portu w czasie planowania przez system, zapobiegając konfliktom.
Ostrzeżenie
Ruch portów hosta zasobnika zostanie zablokowany przez domyślne reguły sieciowej grupy zabezpieczeń w klastrze. Ta funkcja powinna być połączona z zezwoleniem na porty hosta w puli węzłów, aby umożliwić przepływ ruchu.
Ważne
Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:
Wymagania
- Wymagana jest usługa AKS w wersji 1.29 lub nowszej.
Rejestrowanie flagi funkcji "PodHostPortAutoAssignPreview"
Zarejestruj flagę PodHostPortAutoAssignPreview
funkcji przy użyciu polecenia az feature register , jak pokazano w poniższym przykładzie:
az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Wyświetlenie stanu Zarejestrowane trwa kilka minut. Sprawdź stan rejestracji przy użyciu polecenia az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Gdy stan będzie odzwierciedlał wartość Zarejestrowano, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService , używając polecenia az provider register :
az provider register --namespace Microsoft.ContainerService
Automatyczne przypisywanie portu hosta do zasobnika
Wyzwalanie automatycznego przypisywania portów hosta odbywa się przez wdrożenie obciążenia bez portów hosta i zastosowanie kubernetes.azure.com/assign-hostports-for-containerports
adnotacji z listą portów, które wymagają przypisań portów hosta. Wartość adnotacji należy określić jako rozdzielaną przecinkami listę wpisów, takich jak port/protocol
, gdzie port jest numerem pojedynczego portu zdefiniowanego w specyfikacji zasobnika, a protokół to tcp
lub udp
.
Porty zostaną przypisane z zakresu 40000-59999
i będą unikatowe w klastrze. Przypisane porty zostaną również dodane do zmiennych środowiskowych wewnątrz zasobnika, aby aplikacja mogła określić, które porty zostały przypisane. Nazwa zmiennej środowiskowej będzie mieć następujący format (przykład poniżej): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT
, więc przykładem może być mydeployment_PORT_8080_TCP_HOSTPORT: 41932
.
Oto przykładowe echoserver
wdrożenie pokazujące mapowanie portów hosta dla portów 8080 i 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
Po zastosowaniu hostPort
wdrożenia wpisy będą znajdować się w pliku YAML poszczególnych zasobników:
$ 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
Następne kroki
Dowiedz się więcej o korzystaniu z wielu pul węzłów w usłudze AKS.
Dowiedz się więcej o używaniu standardowych modułów równoważenia obciążenia w usłudze AKS
Azure Kubernetes Service