Udostępnij za pośrednictwem


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:

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