Sdílet prostřednictvím


Konfigurace sítí Azure CNI Overlay ve službě Azure Kubernetes Service (AKS)

Tradiční rozhraní CNI (Container Networking Interface) Azure přiřadí ip adresu virtuální sítě ke každému podu. Přiřadí tuto IP adresu z předem rezervované sady IP adres na každém uzlu nebo samostatné podsíti vyhrazené pro pody. Tento přístup vyžaduje plánování IP adres a může vést k vyčerpání adres, což způsobuje potíže se škálováním clusterů s rostoucími požadavky vaší aplikace.

V případě překrytí Azure CNI se uzly clusteru nasadí do podsítě virtuální sítě Azure. Pody se přiřazují IP adresy z privátní ciDR logicky odlišné od virtuální sítě hostující uzly. Provoz podů a uzlů v rámci clusteru používá překryvnou síť. Překlad síťových adres (NAT) používá IP adresu uzlu pro přístup k prostředkům mimo cluster. Toto řešení šetří značné množství IP adres virtuální sítě a umožňuje škálovat cluster na velké velikosti. Výhodou je, že privátní CIDR můžete znovu použít v různých clusterech AKS, což rozšiřuje prostor IP adres dostupný pro kontejnerizované aplikace ve službě Azure Kubernetes Service (AKS).

Přehled překryvných sítí

V překryvných sítích se z podsítí přiřazují pouze uzly clusteru Kubernetes. Pody přijímají IP adresy z privátního CIDR poskytovaného při vytváření clusteru. Každému /24 uzlu je přiřazen adresní prostor vyřezaný ze stejného CIDR. Další uzly vytvořené při horizontálním navýšení kapacity clusteru automaticky přijímají /24 adresní prostory ze stejného CIDR. Azure CNI přiřadí IP adresy podům z tohoto /24 prostoru.

V zásobníku sítí Azure pro privátní prostor CIDR podu se vytvoří samostatná doména směrování, která vytvoří překryvnou síť pro přímou komunikaci mezi pody. Není nutné zřizovat vlastní trasy v podsíti clusteru nebo použít metodu zapouzdření pro tunelování provozu mezi pody, což zajišťuje výkon připojení mezi pody na úrovni parny virtuálních počítačů ve virtuální síti. Úlohy spuštěné v podech si ani neuvědomují, že probíhá manipulace se síťovými adresami.

Diagram znázorňující dva uzly se třemi pody spuštěnými v překryvné síti Provoz podů do koncových bodů mimo cluster se směruje přes překlad adres (NAT).

Komunikace s koncovými body mimo cluster, jako jsou místní a partnerské virtuální sítě, probíhá pomocí IP adresy uzlu prostřednictvím překladu adres (NAT). Azure CNI přeloží zdrojovou IP adresu (překryvnou IP adresu podu) provozu na primární IP adresu virtuálního počítače, která umožňuje zásobník sítí Azure směrovat provoz do cíle. Koncové body mimo cluster se nemůžou připojit přímo k podu. Aplikaci podu musíte publikovat jako službu Kubernetes Load Balancer, aby byla dostupná ve virtuální síti.

Odchozí (výchozí) připojení k internetu můžete poskytnout pro překryvné pody pomocí Load Balanceru úrovně Standard nebo spravované služby NAT Gateway. Odchozí provoz můžete řídit také tak, že ho přesměrujete na bránu firewall pomocí tras definovaných uživatelem v podsíti clusteru.

Připojení příchozího přenosu dat ke clusteru můžete nakonfigurovat pomocí kontroleru příchozího přenosu dat, jako je Nginx nebo směrování aplikace HTTP. Připojení příchozího přenosu dat nejde nakonfigurovat pomocí brány Aplikace Azure. Podrobnosti najdete v tématu Omezení překrytí Azure CNI.

Rozdíly mezi překryvem Kubenet a Azure CNI

Podobně jako překrytí Azure CNI přiřadí Kubenet IP adresy podům z adresního prostoru, který se logicky liší od virtuální sítě, ale má škálování a další omezení. Následující tabulka obsahuje podrobné porovnání mezi překrytím Kubenet a Azure CNI. Pokud nechcete přiřadit IP adresy virtuální sítě podům kvůli nedostatku IP adres, doporučujeme použít překrytí Azure CNI.

Plocha Azure CNI Overlay Kubenet
Škálování clusteru 5000 uzlů a 250 podů/uzlů 400 uzlů a 250 podů/uzlů
Konfigurace sítě Jednoduché – pro sítě podů se nevyžadují žádné další konfigurace. Složité – vyžaduje směrovací tabulky a trasy definované uživatelem v podsíti clusteru pro sítě podů.
Výkon připojení podů Výkon při analýze s virtuálními počítači ve virtuální síti Další segment směrování přidává latenci
Zásady sítě Kubernetes Zásady sítě Azure, Calico, Cilium Kaliko
Podporované platformy operačního systému Linux a Windows Server 2022, 2019 Jenom Linux

Plánování IP adres

  • Uzly clusteru: Při nastavování clusteru AKS se ujistěte, že vaše podsítě virtuální sítě mají dostatek místa pro budoucí škálování. Každý fond uzlů můžete přiřadit k vyhrazené podsíti. Podsíť /24může obsahovat až 251 uzlů, protože první tři IP adresy jsou vyhrazené pro úlohy správy.
  • Pody: Řešení překrytí přiřadí adresní /24 prostor pro pody na každém uzlu z privátního CIDR, který zadáte při vytváření clusteru. Velikost /24 je pevná a nedá se zvětšit ani zmenšit. Na uzlu můžete spustit až 250 podů. Při plánování adresního prostoru podu se ujistěte, že je privátní CIDR dostatečně velký, aby poskytoval /24 adresní prostory pro nové uzly, aby podporovaly budoucí rozšíření clusteru.
    • Při plánování adresního prostoru IP adres pro pody zvažte následující faktory:
      • Stejný prostor CIDR podu lze použít na několika nezávislých clusterech AKS ve stejné virtuální síti.
      • Prostor CIDR podů se nesmí překrývat s rozsahem podsítě clusteru.
      • Prostor CIDR podu se nesmí překrývat s přímo připojenými sítěmi (jako je partnerský vztah virtuálních sítí, ExpressRoute nebo VPN). Pokud externí provoz obsahuje zdrojové IP adresy v rozsahu podCIDR, potřebuje překlad na nepřekrývající se IP adresu přes SNAT pro komunikaci s clusterem.
  • Rozsah adres služby Kubernetes: Velikost adresy služby CIDR závisí na počtu služeb clusteru, které plánujete vytvořit. Musí být menší než /12. Tento rozsah by se neměl překrývat s rozsahem CIDR podsítě, rozsahem podsítí clusteru a rozsahem IP adres používanými v partnerských virtuálních sítích a místních sítích.
  • IP adresa služby DNS Kubernetes: Tato IP adresa je v rozsahu adres služby Kubernetes, který používá zjišťování služeb clusteru. Nepoužívejte první IP adresu v rozsahu adres, protože tato adresa se používá pro kubernetes.default.svc.cluster.local tuto adresu.

Skupiny zabezpečení sítě

Provoz pod-to-pod s využitím překrytí Azure CNI není zapouzdřený a použijí se pravidla skupiny zabezpečení sítě podsítě. Pokud skupina zabezpečení sítě podsítě obsahuje pravidla zamítnutí, která by ovlivnila provoz CIDR podů, ujistěte se, že jsou splněna následující pravidla pro zajištění správné funkčnosti clusteru (kromě všech požadavků na výchozí přenos dat AKS):

  • Provoz z uzlu CIDR do uzlu CIDR na všech portech a protokolech
  • Provoz z uzlu CIDR do podu CIDR na všech portech a protokolech (vyžadovaných pro směrování provozu služby)
  • Provoz z CIDR podu do CIDR podu na všech portech a protokolech (vyžadovaných pro provoz podů a podů do provozu, včetně DNS)

Provoz z podu do libovolného cíle mimo blok CIDR podu využívá SNAT k nastavení zdrojové IP adresy na IP adresu uzlu, na kterém se pod spouští.

Pokud chcete omezit provoz mezi úlohami v clusteru, doporučujeme použít zásady sítě.

Maximální počet podů na uzel

Maximální počet podů na uzel můžete nakonfigurovat při vytváření clusteru nebo při přidání nového fondu uzlů. Výchozí hodnota pro překrytí Azure CNI je 250. Maximální hodnota, kterou můžete zadat v překrytí Azure CNI, je 250 a minimální hodnota je 10. Maximální počet podů na hodnotu uzlu nakonfigurovanou při vytváření fondu uzlů se vztahuje pouze na uzly v daném fondu uzlů.

Volba síťového modelu, který se má použít

Azure CNI nabízí dvě možnosti přidělování IP adres pro pody: tradiční konfigurace, která přiřazuje IP adresy virtuálních sítí podům a překryvné sítě. Volba, kterou možnost použít pro cluster AKS, je vyvážená mezi flexibilitou a pokročilými potřebami konfigurace. Následující aspekty vám pomůžou zjistit, kdy může být každý síťový model nejvhodnější.

Použití překryvných sítí v případech:

  • Chcete škálovat na velký počet podů, ale ve virtuální síti máte omezený adresní prostor IP adres.
  • Většina komunikace podů je v clusteru.
  • Nepotřebujete pokročilé funkce AKS, jako jsou virtuální uzly.

Tradiční možnost virtuální sítě použijte v následujících případech:

  • Máte k dispozici adresní prostor IP adres.
  • Většina komunikace podů je s prostředky mimo cluster.
  • Prostředky mimo cluster se musí spojit přímo s pody.
  • Potřebujete pokročilé funkce AKS, jako jsou virtuální uzly.

Omezení překrytí Azure CNI

Azure CNI Overlay má následující omezení:

  • Application Gateway nemůžete použít jako kontroler příchozího přenosu dat (AGIC) pro překryvný cluster.
  • Skupiny dostupnosti virtuálních počítačů (VMAS) nejsou podporované pro překryvné vrstvy.
  • Virtuální počítače řady DCsv2 nemůžete používat ve fondech uzlů. Pokud chcete splnit požadavky důvěrného computingu, zvažte místo toho použití důvěrných virtuálních počítačů řady DCasv5 nebo DCadsv5.
  • V případě, že k nasazení clusteru používáte vlastní podsíť, musí názvy podsítě, virtuální sítě a skupiny prostředků obsahující virtuální síť obsahovat 63 znaků nebo méně. To vychází ze skutečnosti, že se tyto názvy použijí jako popisky v pracovních uzlech AKS, a proto se na ně vztahují pravidla syntaxe popisků Kubernetes.

Nastavení překryvných clusterů

Poznámka:

Abyste mohli argument použít --network-plugin-mode , musíte mít rozhraní příkazového řádku verze 2.48.0 nebo novější. Pro Windows musíte mít nainstalované nejnovější rozšíření Azure CLI aks-Preview a můžete postupovat podle následujících pokynů.

Pomocí příkazu vytvořte cluster s překrytím az aks create Azure CNI. Nezapomeňte použít argument --network-plugin-mode k určení překryvného clusteru. Pokud není zadaný ciDR podu, přiřadí AKS výchozí mezeru: viz. 10.244.0.0/16.

clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"

az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --location $location \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --pod-cidr 192.168.0.0/16 \
    --generate-ssh-keys

Přidání nového fondu uzlů do vyhrazené podsítě

Po vytvoření clusteru s překrytím Azure CNI můžete vytvořit další fond uzlů a přiřadit je k nové podsíti stejné virtuální sítě. Tento přístup může být užitečný, pokud chcete řídit příchozí nebo výchozí IP adresy hostitele z nebo směrem k cílům ve stejné virtuální síti nebo partnerských virtuálních sítích.

clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"
nodepoolName="newpool1"
subscriptionId=$(az account show --query id -o tsv)
vnetName="yourVnetName"
subnetName="yourNewSubnetName"
subnetResourceId="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnetName/subnets/$subnetName"
az aks nodepool add --resource-group $resourceGroup --cluster-name $clusterName \
  --name $nodepoolName --node-count 1 \
  --mode system --vnet-subnet-id $subnetResourceId

Upgrade existujícího clusteru na překrytí CNI

Poznámka:

Existující cluster Azure CNI můžete aktualizovat tak, aby překryl, pokud cluster splňuje následující kritéria:

  • Cluster je v Kubernetes verze 1.22 nebo novější.
  • Nepoužívá funkci dynamického přidělování IP adres podů.
  • Nemá povolené zásady sítě. Modul zásad sítě je možné odinstalovat před upgradem, viz Odinstalace Azure Network Policy Manageru nebo Calico.
  • Jako modul runtime kontejneru nepoužívá žádné fondy uzlů Windows s Dockerem.

Poznámka:

Vzhledem k tomu, že doména směrování zatím není pro ARM podporovaná, není překrytí CNI zatím podporováno na uzlech procesoru ARM (ARM64).

Poznámka:

Upgrade existujícího clusteru na překrytí CNI je nevratný proces.

Upozorňující

Před buildem operačního systému Windows 20348.1668 došlo k omezení pro pody překrytí systému Windows nesprávně snazení paketů z podů hostitelské sítě, které měly pro clustery, které upgradují na překrytí, škodlivé účinky. Chcete-li se tomuto problému vyhnout, použijte build operačního systému Windows větší nebo roven 20348.1668.

Upozorňující

Pokud používáte vlastní konfiguraci agenta azure-ip-masq-agent, aby zahrnovala další rozsahy IP adres, které by neměly pakety SNAT z podů, může upgrade na překrytí Azure CNI přerušit připojení k těmto rozsahům. IP adresy podů z překryvného prostoru nebudou dosažitelné nic mimo uzly clusteru. Pro dostatečně staré clustery může být objekt ConfigMap ponechán z předchozí verze agenta azure-ip-masq-agent. Pokud tato mapa ConfigMap existuje a není záměrně na místě, azure-ip-masq-agent-configměla by být před spuštěním příkazu update odstraněna. Pokud nepoužíváte vlastní konfiguraci agenta ip-masq-agent, měl by existovat pouze azure-ip-masq-agent-config-reconciled objekt ConfigMap s ohledem na konfiguraci agenta Azure ip-masq-agent Mapy a během procesu upgradu se aktualizuje automaticky.

Procesupgraduho systému aktivuje, aby se každý fond uzlů znovu zopakoval. Upgrade jednotlivých fondů uzlů na překryvné uzly se nepodporuje. Jakékoli přerušení sítě clusteru se podobá upgradu image uzlu nebo upgradu verze Kubernetes, kde je každý uzel ve fondu uzlů znovu image.

Upgrade clusteru Azure CNI

Pomocí příkazu aktualizujte existující cluster Azure CNI tak, aby používal překrytí az aks update .

clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"

az aks update --name $clusterName \
--resource-group $resourceGroup \
--network-plugin-mode overlay \
--pod-cidr 192.168.0.0/16

Parametr --pod-cidr se vyžaduje při upgradu ze starší verze CNI, protože pody potřebují získat IP adresy z nového překryvného prostoru, který se nepřekrývá s existující podsítí uzlu. CIDR podu se také nemůže překrývat s žádnou adresou virtuální sítě fondů uzlů. Pokud je například adresa vaší virtuální sítě 10.0.0.0/8 a uzly jsou v podsíti 10.240.0.0/16, --pod-cidr nemůže se překrývat s 10.0.0.0.0/8 nebo existující ciDR služby v clusteru.

Upgrade clusteru Kubenet

Pomocí příkazu aktualizujte existující cluster Kubenet tak az aks update , aby používal překrytí Azure CNI.

clusterName="myOverlayCluster"
resourceGroup="myResourceGroup"
location="westcentralus"

az aks update --name $clusterName \
--resource-group $resourceGroup \
--network-plugin azure \
--network-plugin-mode overlay 

Vzhledem k tomu, že cluster už používá privátní CIDR pro pody, které se nepřekrývají s prostorem IP adres virtuální sítě, nemusíte zadávat --pod-cidr parametr a CIDR podů zůstane stejný.

Poznámka:

Při upgradu z Kubenetu na překryvnou síť CNI už nebude směrovací tabulka vyžadovat směrování podů. Pokud cluster používá směrovací tabulku poskytovanou zákazníkem, trasy používané k směrování provozu podů do správného uzlu se během operace migrace automaticky odstraní. Pokud cluster používá spravovanou směrovací tabulku (směrovací tabulku vytvořila AKS a žije ve skupině prostředků uzlu), odstraní se tato směrovací tabulka v rámci migrace.

Sítě se dvěma zásobníky

Clustery AKS můžete nasadit v režimu duálního zásobníku při použití překryvných sítí a virtuální sítě Azure se dvěma zásobníky. V této konfiguraci uzly z podsítě virtuální sítě Azure obdrží adresu IPv4 i IPv6. Pody obdrží adresu IPv4 i IPv6 z logicky jiného adresního prostoru do podsítě virtuální sítě Azure uzlů. Překlad adres (NAT) se pak nakonfiguruje tak, aby pody mohly získat přístup k prostředkům ve virtuální síti Azure. Zdrojová IP adresa provozu je NAT na primární IP adresu uzlu stejné rodiny (IPv4 až IPv4 a IPv6 až IPv6).

Požadavky

  • Musíte mít nainstalované Azure CLI 2.48.0 nebo novější.
  • Kubernetes verze 1.26.3 nebo novější.

Omezení

V sítích se dvěma zásobníky se nepodporují následující funkce:

  • Fondy uzlů Windows
  • Zásady sítě Azure
  • Zásady sítě Calico
  • NAT Gateway
  • Doplněk Virtuální uzly

Nasazení clusteru AKS se dvěma zásobníky

Pro podporu clusterů se dvěma zásobníky jsou k dispozici následující atributy:

  • --ip-families: Vezme čárkami oddělený seznam rodin IP adres, které se mají povolit v clusteru.
    • Pouze ipv4 nebo ipv4,ipv6 jsou podporovány.
  • --pod-cidrs: Přebírá čárkami oddělený seznam rozsahů IP adres zápisu CIDR pro přiřazení IP adres podů.
    • Počet a pořadí rozsahů v tomto seznamu se musí shodovat s hodnotou zadanou pro --ip-families.
    • Pokud nejsou zadány žádné hodnoty, použije se výchozí hodnota 10.244.0.0/16,fd12:3456:789a::/64 .
  • --service-cidrs: Přebírá čárkami oddělený seznam rozsahů IP adres zápisu CIDR pro přiřazení IP adres služby.
    • Počet a pořadí rozsahů v tomto seznamu se musí shodovat s hodnotou zadanou pro --ip-families.
    • Pokud nejsou zadány žádné hodnoty, použije se výchozí hodnota 10.0.0.0/16,fd12:3456:789a:1::/108 .
    • Přiřazená --service-cidrs podsíť IPv6 nesmí být větší než /108.

Vytvoření clusteru AKS se dvěma zásobníky

  1. Pomocí příkazu [az group create][az-group-create] vytvořte skupinu prostředků Azure pro cluster.

    az group create --location <region> --name <resourceGroupName>
    
  2. Vytvořte cluster AKS se dvěma zásobníky pomocí az aks create příkazu s parametrem nastaveným --ip-families na ipv4,ipv6.

    az aks create \
        --location <region> \
        --resource-group <resourceGroupName> \
        --name <clusterName> \
        --network-plugin azure \
        --network-plugin-mode overlay \
        --ip-families ipv4,ipv6 \
        --generate-ssh-keys
    

Vytvoření ukázkové úlohy

Po vytvoření clusteru můžete úlohy nasadit. Tento článek vás provede ukázkovým nasazením webového serveru NGINX.

Nasazení webového serveru NGINX

Doplněk směrování aplikace je doporučeným způsobem pro příchozí přenos dat v clusteru AKS. Další informace o doplňku směrování aplikace a příklad nasazení aplikace s doplňkem najdete v tématu Spravované příchozí přenosy dat NGINX pomocí doplňku směrování aplikace.

Zveřejnění úlohy prostřednictvím LoadBalancer služby typu

Důležité

V současné době platí dvě omezení týkající se služeb IPv6 v AKS.

  • Azure Load Balancer odesílá sondy stavu do cílů IPv6 z místní adresy odkazu. Ve fondech uzlů Azure s Linuxem se tento provoz nedá směrovat do podu, takže provoz do služeb IPv6 nasazených selžou externalTrafficPolicy: Cluster . Služby IPv6 musí být nasazeny se službou externalTrafficPolicy: Local, což způsobí kube-proxy reakci na sondu na uzlu.
  • Před Kubernetes verze 1.27 se pro nástroj pro vyrovnávání zatížení zřídí jenom první IP adresa služby, takže služba se dvěma zásobníky přijímá pouze veřejnou IP adresu pro svou první uvedenou řadu IP adres. Pokud chcete poskytnout službu se dvěma zásobníky pro jedno nasazení, vytvořte dvě služby, které cílí na stejný selektor, jednu pro protokol IPv4 a jednu pro protokol IPv6. Toto omezení už neplatí v kubernetes 1.27 nebo novějším.
  1. Zveřejnění nasazení NGINX pomocí kubectl expose deployment nginx příkazu

    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"]}}'
    

    Zobrazí se výstup, který ukazuje, že služby byly vystaveny.

    service/nginx-ipv4 exposed
    service/nginx-ipv6 exposed
    
  2. Jakmile se nasazení zobrazí a LoadBalancer služby jsou plně zřízené, pomocí příkazu získejte IP adresy služeb kubectl get services .

    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. Ověřte funkčnost prostřednictvím webového požadavku příkazového řádku z hostitele podporujícího protokol IPv6. Azure Cloud Shell nepodporuje protokol 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>
    

Další kroky

Informace o využití AKS s vlastním modulem plug-in Container Network Interface (CNI) najdete v tématu Používání vlastního modulu plug-in Container Network Interface (CNI).