Udostępnij za pośrednictwem


Używanie sieci kubenet z dwoma stosami w usłudze Azure Kubernetes Service (AKS)

Klastry usługi AKS można wdrożyć w trybie podwójnego stosu podczas korzystania z sieci kubenet i sieci wirtualnej platformy Azure z podwójnym stosem. W tej konfiguracji węzły otrzymują zarówno adres IPv4, jak i IPv6 z podsieci sieci wirtualnej platformy Azure. Zasobniki odbierają zarówno adres IPv4, jak i IPv6 z logicznie innej przestrzeni adresowej do podsieci sieci wirtualnej platformy Azure węzłów. Dzięki skonfigurowaniu translatora adresów sieciowych (NAT) zasobniki mogą uzyskać dostęp do zasobów w sieci wirtualnej platformy Azure. Źródłowy adres IP ruchu to TRANSLATOR adresów sieciowych do podstawowego adresu IP węzła tej samej rodziny (IPv4 do IPv4 i IPv6 do IPv6).

W tym artykule pokazano, jak używać sieci podwójnej stosu z klastrem usługi AKS. Aby uzyskać więcej informacji na temat opcji i zagadnień dotyczących sieci, zobacz Pojęcia dotyczące sieci dla platform Kubernetes i AKS.

Ograniczenia

  • Tabele tras platformy Azure mają stały limit 400 tras na tabelę.
    • Każdy węzeł w klastrze z dwoma stosami wymaga dwóch tras, po jednym dla każdej rodziny adresów IP, więc klastry dwustosowe są ograniczone do 200 węzłów.
  • W pulach węzłów systemu Linux platformy Azure obiekty usługi są obsługiwane tylko w systemie externalTrafficPolicy: Local.
  • Sieć dwustosowa jest wymagana dla sieci wirtualnej platformy Azure i zasobnika CIDR.
    • Tylko protokół IPv6 pojedynczego stosu nie jest obsługiwany dla adresów IP węzłów ani zasobników. Usługi można aprowizować na adresach IPv4 lub IPv6.
  • Następujące funkcje nie są obsługiwane na platformie kubenet z dwoma stosami:

Wymagania wstępne

  • Wszystkie wymagania wstępne konfiguracji sieci kubenet mają zastosowanie.
  • Klastry z podwójnym stosem usługi AKS wymagają platformy Kubernetes w wersji 1.21.2 lub nowszej. Zalecana jest wersja 1.22.2 lub nowsza.
  • Jeśli używasz szablonów usługi Azure Resource Manager, wymagana jest wersja schematu 2021-10-01.

Omówienie sieci podwójnej stosu na platformie Kubernetes

Platforma Kubernetes w wersji 1.23 zapewnia stabilną obsługę nadrzędnych klastrów stosu IPv4/IPv6, w tym zasobników i sieci usług. Węzły i zasobniki są zawsze przypisywane zarówno adresY IPv4, jak i IPv6, podczas gdy usługi mogą być dwustosowe lub jednostosowe w obu rodzinach adresów.

Usługa AKS konfiguruje wymagane usługi pomocnicze dla sieci z podwójnym stosem. Ta konfiguracja obejmuje:

  • W przypadku korzystania z zarządzanej sieci wirtualnej konfiguracja sieci wirtualnej z podwójnym stosem.
  • Adresy węzłów i zasobników IPv4 i IPv6.
  • Reguły ruchu wychodzącego dla ruchu IPv4 i IPv6.
  • Konfiguracja modułu równoważenia obciążenia dla usług IPv4 i IPv6.

Uwaga

W przypadku korzystania z podwójnej stosu z typem ruchu wychodzącego zdefiniowanego przez użytkownika można wybrać domyślną trasę dla protokołu IPv6, w zależności od tego, czy potrzebujesz ruchu IPv6, aby uzyskać dostęp do Internetu, czy nie. Jeśli nie masz trasy domyślnej dla protokołu IPv6, ostrzeżenie pojawi się podczas tworzenia klastra, ale nie uniemożliwi tworzenia klastra.

Wdrażanie klastra z dwoma stosami

Dostępne są następujące atrybuty do obsługi klastrów z dwoma stosami:

  • --ip-families: Pobiera rozdzielaną przecinkami listę rodzin adresów IP, które mają być włączone w klastrze.
    • Obsługiwane są tylko lub ipv4 ipv4,ipv6 obsługiwane.
  • --pod-cidrs: Pobiera rozdzielaną przecinkami listę zakresów adresów IP notacji CIDR w celu przypisania adresów IP zasobników.
    • Liczba i kolejność zakresów na tej liście musi być zgodna z wartością podaną w pliku --ip-families.
    • Jeśli nie podano żadnych wartości, zostanie użyta wartość 10.244.0.0/16,fd12:3456:789a::/64 domyślna.
  • --service-cidrs: Pobiera rozdzielaną przecinkami listę zakresów adresów IP notacji CIDR w celu przypisania adresów IP usługi.
    • Liczba i kolejność zakresów na tej liście musi być zgodna z wartością podaną w pliku --ip-families.
    • Jeśli nie podano żadnych wartości, zostanie użyta wartość 10.0.0.0/16,fd12:3456:789a:1::/108 domyślna.
    • Podsieć IPv6 przypisana do --service-cidrs nie może być większa niż /108.

Wdrażanie klastra usługi AKS z dwoma stosami

  1. Utwórz grupę zasobów platformy Azure dla klastra przy użyciu az group create polecenia .

    az group create --location <region> --name <resourceGroupName>
    
  2. Utwórz klaster usługi AKS z podwójnym stosem az aks create przy użyciu polecenia z parametrem ustawionym --ip-families na ipv4,ipv6.

    az aks create \
        --location <region> \
        --resource-group <resourceGroupName> \
        --name <clusterName> \
        --ip-families ipv4,ipv6 \
        --generate-ssh-keys
    
  3. Po utworzeniu klastra pobierz poświadczenia administratora klastra az aks get-credentials przy użyciu polecenia .

    az aks get-credentials --resource-group <resourceGroupName> --name <clusterName>
    

Sprawdzanie węzłów w celu wyświetlenia obu rodzin adresów IP

  • Po aprowizacji klastra upewnij się, że węzły są aprowizowane za pomocą sieci z dwoma stosami przy użyciu kubectl get nodes polecenia .

    kubectl get nodes -o=custom-columns="NAME:.metadata.name,ADDRESSES:.status.addresses[?(@.type=='InternalIP')].address,PODCIDRS:.spec.podCIDRs[*]"
    

    Dane wyjściowe polecenia kubectl get nodes pokazują, że węzły mają adresy i miejsce przypisania adresu IP zasobnika z protokołów IPv4 i IPv6.

    NAME                                ADDRESSES                           PODCIDRS
    aks-nodepool1-14508455-vmss000000   10.240.0.4,2001:1234:5678:9abc::4   10.244.0.0/24,fd12:3456:789a::/80
    aks-nodepool1-14508455-vmss000001   10.240.0.5,2001:1234:5678:9abc::5   10.244.1.0/24,fd12:3456:789a:0:1::/80
    aks-nodepool1-14508455-vmss000002   10.240.0.6,2001:1234:5678:9abc::6   10.244.2.0/24,fd12:3456:789a:0:2::/80
    

Tworzenie przykładowego obciążenia

Po utworzeniu klastra możesz wdrożyć obciążenia. W tym artykule przedstawiono przykładowe wdrożenie obciążenia serwera internetowego NGINX.

Wdrażanie serwera internetowego NGINX

  1. Utwórz serwer internetowy NGINX przy użyciu kubectl create deployment nginx polecenia .

    kubectl create deployment nginx --image=nginx:latest --replicas=3
    
  2. Wyświetl zasoby zasobnika przy użyciu kubectl get pods polecenia .

    kubectl get pods -o custom-columns="NAME:.metadata.name,IPs:.status.podIPs[*].ip,NODE:.spec.nodeName,READY:.status.conditions[?(@.type=='Ready')].status"
    

    Dane wyjściowe pokazują, że zasobniki mają adresy IPv4 i IPv6. Zasobniki nie wyświetlają adresów IP, dopóki nie będą gotowe.

    NAME                     IPs                                NODE                                READY
    nginx-55649fd747-9cr7h   10.244.2.2,fd12:3456:789a:0:2::2   aks-nodepool1-14508455-vmss000002   True
    nginx-55649fd747-p5lr9   10.244.0.7,fd12:3456:789a::7       aks-nodepool1-14508455-vmss000000   True
    nginx-55649fd747-r2rqh   10.244.1.2,fd12:3456:789a:0:1::2   aks-nodepool1-14508455-vmss000001   True
    

Uwidacznianie obciążenia za pośrednictwem LoadBalancer usługi typu

Ważne

Począwszy od usługi AKS w wersji 1.27, można utworzyć usługę LoadBalancer z dwoma stosami, która zostanie aprowizowana przy użyciu publicznego adresu IP IPv4 i 1 publicznego adresu IP IPv6. Jednak w starszych wersjach tylko pierwszy adres IP usługi zostanie aprowizowany do modułu równoważenia obciążenia, więc usługa podwójnego stosu odbiera tylko publiczny adres IP dla pierwszej rodziny adresów IP. Aby zapewnić usługę podwójnego stosu dla pojedynczego wdrożenia, utwórz dwie usługi przeznaczone dla tego samego selektora, jedną dla protokołu IPv4 i jedną dla protokołu IPv6.

Usługa AKS począwszy od wersji 1.27

  1. Uwidaczniaj wdrożenie serwera NGINX przy użyciu kubectl expose deployment nginx polecenia .

    kubectl expose deployment nginx --name=nginx --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilyPolicy": "PreferDualStack", "ipFamilies": ["IPv4", "IPv6"]}}'
    

    Otrzymasz dane wyjściowe, które pokazują, że usługi zostały ujawnione.

    service/nginx exposed
    
  2. Po ujawnieniu wdrożenia i LoadBalancer pełnym aprowizowanym usługach uzyskaj adresy IP usług przy użyciu kubectl get services polecenia .

    kubectl get services
    
    NAME         TYPE           CLUSTER-IP               EXTERNAL-IP         PORT(S)        AGE
    nginx        LoadBalancer   10.0.223.73   2603:1030:20c:9::22d,4.156.88.133   80:30664/TCP   2m11s
    
    kubectl get services nginx -ojsonpath='{.spec.clusterIPs}'
    
    ["10.0.223.73","fd17:d93e:db1f:f771::54e"]
    
  3. Sprawdź funkcjonalność za pośrednictwem żądania internetowego wiersza polecenia z hosta obsługującego protokół IPv6. Usługa Azure Cloud Shell nie obsługuje protokołu IPv6.

    SERVICE_IP=$(kubectl get services nginx -o jsonpath='{.status.loadBalancer.ingress[1].ip}')
    curl -s "http://[${SERVICE_IP}]" | head -n5
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    

Usługa AKS starsza niż wersja 1.27

  1. Uwidaczniaj wdrożenie serwera NGINX przy użyciu kubectl expose deployment nginx polecenia .

    kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer'
    kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilies": ["IPv6"]}}'
    

    Otrzymasz dane wyjściowe, które pokazują, że usługi zostały ujawnione.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Po ujawnieniu wdrożenia i LoadBalancer pełnym aprowizowanym usługach uzyskaj adresy IP usług przy użyciu kubectl get services polecenia .

    kubectl get services
    
    NAME         TYPE           CLUSTER-IP               EXTERNAL-IP         PORT(S)        AGE
    nginx-ipv4   LoadBalancer   10.0.88.78               20.46.24.24         80:30652/TCP   97s
    nginx-ipv6   LoadBalancer   fd12:3456:789a:1::981a   2603:1030:8:5::2d   80:32002/TCP   63s
    
  3. Sprawdź funkcjonalność za pośrednictwem żądania internetowego wiersza polecenia z hosta obsługującego protokół IPv6. Usługa Azure Cloud Shell nie obsługuje protokołu IPv6.

    SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    curl -s "http://[${SERVICE_IP}]" | head -n5
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>