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.
- Obsługiwane są tylko lub
--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.
- Liczba i kolejność zakresów na tej liście musi być zgodna z wartością podaną w pliku
--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.
- Liczba i kolejność zakresów na tej liście musi być zgodna z wartością podaną w pliku
Wdrażanie klastra usługi AKS z dwoma stosami
Utwórz grupę zasobów platformy Azure dla klastra przy użyciu
az group create
polecenia .az group create --location <region> --name <resourceGroupName>
Utwórz klaster usługi AKS z podwójnym stosem
az aks create
przy użyciu polecenia z parametrem ustawionym--ip-families
naipv4,ipv6
.az aks create \ --location <region> \ --resource-group <resourceGroupName> \ --name <clusterName> \ --ip-families ipv4,ipv6 \ --generate-ssh-keys
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
Utwórz serwer internetowy NGINX przy użyciu
kubectl create deployment nginx
polecenia .kubectl create deployment nginx --image=nginx:latest --replicas=3
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
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
Po ujawnieniu wdrożenia i
LoadBalancer
pełnym aprowizowanym usługach uzyskaj adresy IP usług przy użyciukubectl 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"]
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
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
Po ujawnieniu wdrożenia i
LoadBalancer
pełnym aprowizowanym usługach uzyskaj adresy IP usług przy użyciukubectl 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
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>
Azure Kubernetes Service