Udostępnij za pośrednictwem


Konfiguracja sieci Azure CNI do dynamicznej alokacji adresów IP i lepszej obsługi podsieci w usłudze Azure Kubernetes Service (AKS)

Wadą tradycyjnego interfejsu sieciowego CNI jest wyczerpanie adresów IP zasobników w miarę wzrostu klastra AKS, co skutkuje koniecznością przebudowy całego klastra w większej podsieci. Nowa funkcja dynamicznej alokacji adresów IP w usłudze Azure CNI rozwiązuje ten problem, przydzielając adresy IP zasobników z podsieci oddzielonej od tej, która obsługuje klaster AKS.

Oferuje następujące korzyści:

  • Lepsze wykorzystanie adresów IP: adresy IP są dynamicznie przydzielane do zasobników klastra z podsieci zasobnika. Prowadzi to do lepszego wykorzystania adresów IP w klastrze w porównaniu z tradycyjnym rozwiązaniem CNI, które wykonuje statyczną alokację adresów IP dla każdego węzła.
  • Skalowalne i elastyczne: Podsieci węzłów i zasobników można skalować niezależnie. Pojedyncza podsieć dla podów może być współużytkowana w różnych pulach węzłów w ramach klastra lub w różnych klastrach AKS wdrożonych w tej samej sieci wirtualnej. Można również skonfigurować oddzielną podsieć podów dla puli węzłów.
  • Wysoka wydajność: Ponieważ zasobniki mają przypisane adresy IP sieci wirtualnej, mają bezpośrednią łączność z innymi zasobnikami w klastrze i zasobami w sieci wirtualnej. Rozwiązanie obsługuje bardzo duże klastry bez spadku wydajności.
  • Oddzielne zasady sieci wirtualnej dla zasobników: ponieważ zasobniki mają oddzielną podsieć, można skonfigurować oddzielne zasady sieci wirtualnej dla nich, które różnią się od zasad węzłów. Umożliwia to wiele przydatnych scenariuszy, takich jak zezwolenie na łączność z Internetem tylko dla zasobników, a nie dla węzłów, ustalanie źródłowego adresu IP zasobnika w puli węzłów przy użyciu bramy NAT Azure oraz filtrowanie ruchu między pulami węzłów za pomocą grup zabezpieczeń sieciowych (NSG).
  • Zasady sieciowe platformy Kubernetes: zarówno zasady sieci platformy Azure, jak i Calico współpracują z tym nowym rozwiązaniem.

W tym artykule pokazano, jak używać sieci azure CNI do dynamicznej alokacji adresów IP i rozszerzonej obsługi podsieci w usłudze AKS.

Wymagania wstępne

  • Zapoznaj się z wymaganiami wstępnymi dotyczącymi konfigurowania podstawowej sieci usługi Azure CNI w usłudze AKS, ponieważ te same wymagania wstępne dotyczą tego artykułu.

  • Zapoznaj się z parametrami wdrażania do konfigurowania podstawowej sieci Azure CNI w usłudze AKS, ponieważ stosuje się te same parametry.

  • Klastry AKS Engine i DIY nie są obsługiwane.

  • Azure CLI w wersji 2.37.0 lub nowszej.

  • Jeśli masz istniejący klaster, musisz włączyć usługę Container Insights na potrzeby monitorowania użycia podsieci IP. Usługę az aks enable-addons Container Insights można włączyć przy użyciu polecenia , jak pokazano w poniższym przykładzie:

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

planowanie adresowania IP

Planowanie adresowania IP jest znacznie prostsze dzięki tej funkcji. Ponieważ węzły i pod-y są rozszerzane niezależnie, ich przestrzenie adresowe mogą być również planowane oddzielnie. Ponieważ podsieci zasobników można skonfigurować na poziomie puli węzłów, zawsze można dodać nową podsieć, kiedy dodajesz pulę węzłów. Zasobniki systemowe w puli węzłów/klastrów również otrzymują adresy IP z podsieci zasobników, więc to zachowanie powinno być uwzględnione.

Adresy IP są przydzielane do węzłów w partiach po 16. Alokacja adresów IP podsieci powinna być planowana z co najmniej 16 adresami IP na węzeł w klastrze; węzły będą żądać 16 adresów IP podczas uruchamiania i zażąda innej partii 16 za każdym razem, gdy w ich przydziałie nie ma <8 adresów IP.

Planowanie adresów IP dla usług Kubernetes i mostka platformy Docker pozostaje niezmienione.

Aby wyświetlić i zweryfikować zasoby NodeNetworkConfiguration (NNC) odpowiedzialne za te alokacje adresów IP, możesz uruchomić następujące polecenie:

kubectl get nodenetworkconfigs -n kube-system -o wide

Maksymalna liczba zasobników na węzeł w klastrze z dynamiczną alokacją adresów IP i rozszerzoną obsługą podsieci

Liczba podów na węzeł w przypadku korzystania z wtyczki Azure CNI z dynamiczną alokacją adresów IP różni się nieco od tradycyjnego zachowania CNI.

CNI Wartość domyślna Możliwość konfigurowania podczas wdrażania
Tradycyjny interfejs CNI platformy Azure 30 Tak (do 250)
Azure CNI z dynamiczną alokacją adresów IP 250 Tak (do 250)

Wszystkie inne wskazówki dotyczące konfigurowania maksymalnej liczby podów na węzeł pozostają bez zmian.

Parametry wdrożenia

Parametry wdrażania do konfiguracji podstawowej sieci Azure CNI w AKS są prawidłowe, z dwoma wyjątkami:

  • Parametr podsieci odwołuje się teraz do podsieci powiązanej z węzłami klastra.
  • Dodatkowy parametr podsieci zasobnika służy do określania podsieci, której adresy IP będą dynamicznie przydzielane do zasobników.

Konfigurowanie sieci przy użyciu dynamicznej alokacji adresów IP i rozszerzonej obsługi podsieci — interfejs wiersza polecenia platformy Azure

Użycie dynamicznej alokacji adresów IP i rozszerzonej obsługi podsieci w klastrze jest podobne do domyślnej metody konfigurowania klastra azure CNI. W poniższym przykładzie przedstawiono tworzenie nowej sieci wirtualnej z podsiecią dla węzłów i podsieci dla zasobników oraz tworzenie klastra korzystającego z sieci CNI platformy Azure z dynamiczną alokacją adresów IP i rozszerzoną obsługą podsieci. Pamiętaj, aby zastąpić zmienne, takie jak $subscription własnymi wartościami.

Utwórz sieć wirtualną z dwiema podsieciami.

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

Utwórz klaster, odwołując się do podsieci węzła przy użyciu --vnet-subnet-id i podsieci zasobnika przy użyciu --pod-subnet-id, włączając dodatek do monitorowania.

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP_NAME \
    --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring \
    --generate-ssh-keys

Dodawanie puli węzłów

Podczas dodawania puli węzłów należy odwołać się do podsieci węzłów przy użyciu --vnet-subnet-id i do podsieci zasobnika przy użyciu --pod-subnet-id. Poniższy przykład tworzy dwie nowe podsieci, które są następnie używane do utworzenia nowej puli węzłów.

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

Monitorowanie użycia podsieci IP

Usługa Azure CNI umożliwia monitorowanie użycia podsieci IP. Aby włączyć monitorowanie użycia podsieci IP, wykonaj poniższe kroki:

Pobieranie pliku YAML

  1. Pobierz lub grep plik o nazwie container-azm-ms-agentconfig.yaml z usługi GitHub.

  2. Znajdź azure_subnet_ip_usage w integracjach. Ustaw wartość opcji enabled na true.

  3. Zapisz plik.

Pobierz poświadczenia AKS

Ustaw zmienne dla subskrypcji, grupy zasobów i klastra. Rozważ następujące przykłady:

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

Stosowanie konfiguracji

  1. Otwórz terminal w folderze, w którym jest zapisywany pobrany plik container-azm-ms-agentconfig.yaml .
  2. Zastosuj konfigurację przy użyciu kubectl apply -f container-azm-ms-agentconfig.yaml polecenia . Spowoduje to ponowne uruchomienie poda, a metryki będą widoczne po upływie 5–10 minut.
  3. Wyświetl metryki w klastrze, przechodząc do obszaru Skoroszyty na stronie klastra w witrynie Azure Portal i znajdź skoroszyt o nazwie Użycie adresu IP podsieci.

Dynamiczna alokacja adresów IP i rozszerzona obsługa podsieci — często zadawane pytania

  • Czy mogę przypisać wiele podsieci do puli klastrów/węzłów?

    Do klastra lub puli węzłów można przypisać tylko jedną podsieć. Jednak wiele klastrów lub pul węzłów może współużytkować jedną podsieć.

  • Czy można całkowicie przypisać podsieci Pod z zupełnie innej sieci wirtualnej (VNet)?

    Nie, podsieć zasobnika powinna pochodzić z tej samej sieci wirtualnej co klaster.

  • Czy niektóre pule węzłów w klastrze mogą używać tradycyjnego CNI, podczas gdy inne używają nowego CNI?

    Cały klaster powinien używać tylko jednego typu CNI.

Następne kroki

Dowiedz się więcej o sieciowaniu w AKS w następujących artykułach: