Použití veřejných IP adres na úrovni instance ve službě Azure Kubernetes Service (AKS)

Uzly AKS nevyžadují pro komunikaci vlastní veřejné IP adresy. Scénáře ale můžou vyžadovat, aby uzly ve fondu uzlů přijímaly vlastní vyhrazené veřejné IP adresy. Běžným scénářem jsou herní úlohy, kdy konzola potřebuje navázat přímé připojení ke cloudovému virtuálnímu počítači, aby se minimalizoval počet síťových skoků. Tento scénář lze v AKS dosáhnout pomocí veřejné IP adresy uzlu.

Nejprve vytvořte novou skupinu prostředků.

az group create --name <resourceGroup> --location <region>

Vytvořte nový cluster AKS a připojte veřejnou IP adresu pro uzly. Každý z uzlů ve fondu uzlů obdrží jedinečnou veřejnou IP adresu. Můžete to ověřit tak, že se podíváte na instance škálovací sady virtuálních počítačů.

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --location <region> \
    --enable-node-public-ip \
    --generate-ssh-keys

U existujících clusterů AKS můžete také přidat nový fond uzlů a připojit veřejnou IP adresu pro uzly.

az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip

Použijte prefix veřejné IP adresy

Použití předpony veřejné IP adresy má řadu výhod. AKS podporuje použití adres ze stávající předpony veřejných IP adres pro vaše uzly zadáním ID prostředku pomocí přepínače --node-public-ip-prefix-id při vytváření nového clusteru nebo při přidávání fondu uzlů.

Nejprve vytvořte předponu veřejné IP adresy pomocí příkazu az network public-ip prefix create:

az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>

Prohlédněte si výstup a poznamenejte si předponu id :

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
  ...
}

Nakonec při vytváření nového clusteru nebo při přidávání nového fondu uzlů použijte příznak --node-public-ip-prefix-id a zadejte ID prostředku prefixu:

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

Použití předpony veřejné IP adresy se dvěma zásobníky (Preview)

Veřejné IP adresy IPv4 i IPv6 můžete přiřadit ke každému uzlu ve fondu uzlů pomocí předpony veřejné IP adresy se dvěma zásobníky. Tento přístup umožňuje používat vlastní předpony veřejných IP adres a zajistit, aby každý uzel obdržel jednu adresu IPv4 a jednu adresu IPv6.

Tato funkce je užitečná pro úlohy, které vyžadují přímé příchozí nebo odchozí připojení přes protokol IPv4 i IPv6 nebo aplikace provozující v prostředích, která vyžadují dodržování předpisů IPv6.

Důležité

Funkce AKS ve verzi Preview jsou k dispozici v samoobslužném režimu na základě aktivního přihlášení. Preview verze jsou poskytovány „ve stavu, v jakém jsou“ a „podle dostupnosti“ a nevztahují se na ně smlouvy o úrovni poskytovaných služeb ani omezená záruka. Verze Preview služby AKS podléhají částečné zákaznické podpoře v režimu best-effort. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Požadavky

Pokud chcete používat předpony veřejných IP adres duálního zásobníku s veřejnými IP adresami uzlu, ujistěte se, že jsou splněny následující předpoklady:

  • Váš cluster je nakonfigurován jako dual-stack cluster s rodinami IP adres IPv4 i IPv6.
  • Váš cluster používá Azure CNI s překryvnými sítěmi.
  • Máte jednu předponu veřejné IP adresy IPv4 a jednu předponu veřejné IP adresy IPv6 vytvořenou ve stejné oblasti jako váš cluster AKS.
  • Obě předpony veřejných IP adres používají SKU Standard.
  • Identita clusteru AKS má oprávnění ke správě předpon veřejných IP adres. Pokud jsou předpony v jiné skupině prostředků, přiřaďte identitě clusteru v této skupině prostředků roli Network Contributor.

Registrace funkcí preview

Podpora předpon veřejných IP adres s duálním zásobníkem (IPv4 a IPv6) pro veřejné IP adresy uzlů je v současnosti dostupná ve verzi Preview. Než budete moct tuto funkci použít, musíte nainstalovat nebo aktualizovat rozšíření Azure CLI a zaregistrovat NodePublicIPv6PrefixPreview příznaky funkcí ve vašem předplatném.

Nainstalujte nebo aktualizujte rozšíření aks-preview:

az extension add --name aks-preview --upgrade

Registrace požadovaných funkcí ve verzi Preview:

az feature register --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview

Dokončení registrace funkcí může trvat několik minut. Pokud chcete zkontrolovat stav registrace, spusťte:

az feature show --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview --query "properties.state"

Než budete pokračovat, počkejte, dokud obě funkce nenahlásí stav Registrováno.

Po zaregistrování příznaků funkcí aktualizujte poskytovatele prostředků, aby se zajistilo, že se změny použijí:

az provider register --namespace Microsoft.ContainerService

Po dokončení registrace můžete vytvořit nebo aktualizovat cluster tak, aby pro veřejné IP adresy uzlu používal předpony veřejné IP adresy se dvěma zásobníky.

Vytvoření předpon veřejných IP adres

Vytvořte předponu veřejné IP adresy pro protokolY IPv4 a IPv6 pomocí Azure CLI.

Pro protokol IPv4:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv4PrefixName> \
  --location <region> \
  --length 28 \
  --sku Standard \
  --version IPv4

Pro protokol IPv6:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv6PrefixName> \
  --location <region> \
  --length 124 \
  --sku Standard \
  --version IPv6

Po vytvoření předpon si poznamenejte ID prostředků obou předpon.

Vytvořte nový cluster s předponami veřejných IP adres uzlů s duálním zásobníkem

Při vytváření nového clusteru AKS pomocí parametru --node-public-ip-prefix-ids zadejte předpony veřejných IP adres IPv4 i IPv6.

az aks create \
  --resource-group <resourceGroup> \
  --name <aksClusterName> \
  --location <region> \
  --enable-node-public-ip \
  --ip-families IPv4,IPv6 \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>" \
  --generate-ssh-keys

Parametr --node-public-ip-prefix-ids přijímá čárkami oddělený seznam ID prostředků předpony veřejné IP adresy. Seznam musí obsahovat jednu předponu IPv4 a jednu předponu IPv6.

Přidat skupinu uzlů s předponami veřejných IP adres uzlů pro dual-stack

Můžete také přidat fond uzlů s předponami veřejných IP adres uzlů duálního zásobníku do existujícího clusteru duálního zásobníku.

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --enable-node-public-ip \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>"

Omezení

Následující omezení platí pro předponu veřejné IP adresy se dvěma zásobníky:

  • Musíte zadat předponu IPv4 i IPv6. Konfigurace jenom IPv6 se nepodporují.
  • Konfigurace veřejné IP adresy uzlu je neměnná. Chcete-li změnit předpony veřejných IP adres, musíte vytvořit nový fond uzlů a přesunout úlohy.
  • Každému uzlu je přiřazena jedna veřejná IP adresa IPv6.
  • Tato funkce není podporována v AKS Automatic ani při automatickém zřizování uzlů.
  • Fondy uzlů s více síťovými adaptéry se nepodporují.
  • Automatické škálování clusteru je podporované, ale ujistěte se, že nakonfigurovaný maximální počet uzlů nepřekračuje počet dostupných IP adres v předponě veřejné IP adresy, protože každý uzel vyžaduje jednu IP adresu z předpony.

Vyhledání veřejných IP adres pro uzly

Veřejné IP adresy uzlů můžete najít různými způsoby:

  • Použijte příkaz az vmss list-instance-public-ipsAzure CLI .
  • Použijte příkazy PowerShellu nebo Bash.
  • Veřejné IP adresy můžete zobrazit také na webu Azure Portal zobrazením instancí ve škálovací sadě virtuálních počítačů.

Důležité

Skupina prostředků uzlu obsahuje uzly a jejich veřejné IP adresy. Skupinu prostředků uzlu použijte při provádění příkazů k vyhledání veřejných IP adres pro vaše uzly.

az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>

Použití značek veřejných IP adres na veřejných IP adresách uzlu

Značky veřejných IP adres je možné využít na veřejných IP adresách uzlu k využití funkce Předvolba směrování Azure , která je k dispozici v zadaných oblastech.

Požadavky

  • Vyžaduje se AKS verze 1.29 nebo vyšší.

Vytvořte nový cluster pomocí předvolby směrování internet

az aks create \
    --name <aksClusterName> \
    --location <region> \
    --resource-group <resourceGroup> \
    --enable-node-public-ip \
    --node-public-ip-tags RoutingPreference=Internet \
    --generate-ssh-keys

Přidejte skupinu uzlů s předvolbou směrování Internet

az aks nodepool add --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --location <region> \
  --resource-group <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

Povolit připojení k portům hostitele a přidat fondy uzlů do skupin zabezpečení aplikací

Uzly AKS, které používají veřejné IP adresy uzlů a hostují služby na své hostitelské adrese, musí mít přidané pravidlo NSG pro povolení tohoto provozu. Přidáním požadovaných portů do konfigurace fondu uzlů se vytvoří příslušná pravidla povolení ve skupině zabezpečení sítě clusteru.

Pokud je v podsíti s clusterem, který používá vlastní virtuální síť, nakonfigurovaná skupina zabezpečení sítě, musíte do této skupiny zabezpečení sítě přidat pravidlo pro povolení. To lze omezit na uzly v dané skupině uzlů přidáním této skupiny uzlů do skupiny zabezpečení aplikací (ASG). Ve spravované skupině prostředků se ve výchozím nastavení vytvoří spravovaná skupina zabezpečení aplikací (ASG), pokud jsou zadány povolené porty hostitele. Uzly lze také přidat do jedné nebo více vlastních skupin zabezpečení aplikací (ASG) zadáním ID prostředku jedné nebo více skupin zabezpečení sítě (NSG) v parametrech fondu uzlů.

Formát specifikace portu hostitele

Při zadávání seznamu povolených portů použijte čárkami oddělený seznam s položkami ve formátu port/protocol nebo startPort-endPort/protocol.

Příklady:

  • 80/tcp
  • 80/tcp,443/tcp
  • 53/udp,80/tcp
  • 50000-60000/tcp

Požadavky

  • Vyžaduje se AKS verze 1.29 nebo vyšší.

Vytvoření nového clusteru s povolenými porty a skupinami zabezpečení aplikací

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

Přidání nového fondu uzlů s povolenými porty a skupinami zabezpečení aplikací

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>"

Aktualizace povolených portů a skupin zabezpečení aplikací pro fond uzlů

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>"

Automatické přiřazování hostitelských portů pro úlohy podů (PREVIEW)

Pokud jsou veřejné IP adresy nakonfigurované na uzlech, je možné využít porty hostitele, aby pody mohly přímo přijímat provoz, aniž by bylo nutné konfigurovat službu nástroje pro vyrovnávání zatížení. To je obzvlášť užitečné v situacích, jako jsou hry, kde proměnlivost IP adresy a portu uzlu nepředstavuje problém, protože párovací služba na známém názvu hostitele může v okamžiku připojení poskytnout správného hostitele a port. Vzhledem k tomu, že na stejném portu může naslouchat jenom jeden proces, může používání aplikací s hostitelskými porty vést k problémům s plánováním. Aby se tomuto problému zabránilo, AKS umožňuje systému dynamicky přiřadit dostupný port v době plánování, což brání konfliktům.

Upozornění

Provoz na hostitelských portech podů bude blokován výchozími pravidly NSG nastavenými v clusteru. Tato funkce by měla být kombinována s povolením hostitelských portů ve fondu uzlů, aby umožňovala tok provozu.

Důležité

Funkce AKS ve verzi Preview jsou k dispozici v samoobslužném režimu na základě dobrovolného přihlášení. Verze Preview jsou poskytovány „tak, jak jsou“ a „podle dostupnosti“, a nevztahují se na ně smlouvy o úrovni služeb ani omezená záruka. Verze Preview služby AKS mají částečnou zákaznickou podporu v režimu best effort. Proto tyto funkce nejsou určené pro produkční použití. Další informace najdete v následujících článcích podpory:

Požadavky

  • Vyžaduje se AKS verze 1.29 nebo vyšší.

Zaregistrujte příznak funkce 'PodHostPortAutoAssignPreview'

PodHostPortAutoAssignPreview Příznak funkce zaregistrujte pomocí příkazu az feature register, jak je znázorněno v následujícím příkladu:

az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Zobrazení stavu Zaregistrované trvá několik minut. Stav registrace ověřte pomocí příkazu az feature show:

az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Pokud se stav projeví jako zaregistrovaný, aktualizujte registraci poskytovatele prostředků Microsoft.ContainerService pomocí příkazu az provider register :

az provider register --namespace Microsoft.ContainerService

Automatické přiřazení portu hostitele k podu

Aktivace automatického přiřazení portu hostitele se provádí nasazením úlohy bez portů hostitele a použitím kubernetes.azure.com/assign-hostports-for-containerports poznámky se seznamem portů, které potřebují přiřazení portů hostitele. Hodnota poznámky by měla být zadána jako čárkami oddělený seznam položek, jako port/protocolje , kde port je individuální číslo portu, které je definováno ve specifikaci podu a protokol je tcp nebo udp.

Porty se přiřadí z rozsahu 40000-59999 a budou v clusteru jedinečné. Přiřazené porty se také přidají do proměnných prostředí uvnitř podu, aby aplikace dokázala určit, jaké porty byly přiřazeny. Název proměnné prostředí bude v následujícím formátu (příklad níže): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT, takže příklad by byl mydeployment_PORT_8080_TCP_HOSTPORT: 41932.

Tady je příklad echoserver nasazení znázorňující mapování portů hostitele pro porty 8080 a 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

Když se nasazení aplikuje, položky hostPort budou v souboru YAML jednotlivých podů:

$ 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

Další kroky