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 úlohy hraní her, kdy konzola potřebuje vytvořit přímé připojení ke cloudovému virtuálnímu počítači, aby se minimalizovaly segmenty směrování. 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 myResourceGroup2 --location eastus

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 -g MyResourceGroup2 -n MyManagedCluster -l eastus  --enable-node-public-ip

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 -g MyResourceGroup2 --cluster-name MyManagedCluster -n nodepool2 --enable-node-public-ip

Použití předpony veřejné IP adresy

Použití předpony veřejné IP adresy má řadu výhod. AKS podporuje použití adres z existující předpony veřejné IP adresy pro uzly předáním ID prostředku s příznakem node-public-ip-prefix při vytváření nového clusteru nebo přidá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 eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3

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

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

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

az aks create -g MyResourceGroup3 -n MyManagedCluster -l eastus --enable-node-public-ip --node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix

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 -g MC_MyResourceGroup2_MyManagedCluster_eastus -n YourVirtualMachineScaleSetName

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

Značky veřejných IP adres se dají využít na veřejných IP adresách uzlu k využití funkce Předvolba směrování Azure.

Požadavky

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

Vytvoření nového clusteru pomocí internetového předvolby směrování

az aks create -n <clusterName> -l <location> -g <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

Přidání fondu uzlů s předvolbou směrování na internetu

az aks nodepool add --cluster-name <clusterName> -n <nodepoolName> -l <location> -g <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

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

Uzly AKS využívající veřejné IP adresy uzlů, které hostují služby na jejich adrese hostitele, musí mít přidané pravidlo NSG, které povoluje provoz. 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 skupina zabezpečení sítě v podsíti s clusterem, který používá vlastní virtuální síť, musíte do této skupiny zabezpečení sítě přidat pravidlo povolení. To může být omezeno na uzly v daném fondu uzlů přidáním fondu uzlů do skupiny zabezpečení aplikace (ASG). Spravovaná skupina prostředků se ve výchozím nastavení vytvoří ve spravované skupině prostředků, pokud jsou zadány povolené porty hostitele. Uzly lze také přidat do jedné nebo více vlastních skupin ASG zadáním ID prostředku skupin zabezpečení sítě 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.24 nebo vyšší.

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

az aks create \
  --resource-group <resourceGroup> \
  --name <clusterName> \
  --nodepool-name <nodepoolName> \
  --nodepool-allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp\
  --nodepool-asg-ids "<asgId>,<asgId>"

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

  --resource-group <resourceGroup> \
  --cluster-name <clusterName> \
  --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ů

  --resource-group <resourceGroup> \
  --cluster-name <clusterName> \
  --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 zvlášť užitečné ve scénářích, jako je hraní her, kdy dočasný charakter IP adresy a portu uzlu není problém, protože služba matchmakeru ve známém názvu hostitele může poskytnout správného hostitele a portu, které se mají použít v době připojení. 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.

Upozorňující

Provoz portů hostitele podu se zablokuje výchozími pravidly skupiny zabezpečení sítě 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 na samoobslužné bázi. Verze Preview jsou poskytovány "tak, jak jsou" a "dostupné", a jsou vyloučené ze smluv o úrovni služeb a omezené záruky. Verze Preview AKS jsou částečně pokryty zákaznickou podporou na základě maximálního úsilí. 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.24 nebo vyšší.

Registrace příznaku 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. Pomocí příkazu az feature show ověřte stav registrace:

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

Po použití hostPort nasazení budou položky v 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