Použití statické veřejné IP adresy a popisku DNS s nástrojem pro vyrovnávání zatížení Azure Kubernetes Service (AKS)

Když vytvoříte prostředek nástroje pro vyrovnávání zatížení v clusteru Azure Kubernetes Service (AKS), veřejná IP adresa, která je k němu přiřazená, platí jenom po dobu životnosti tohoto prostředku. Pokud odstraníte službu Kubernetes, odstraní se také přidružený nástroj pro vyrovnávání zatížení a IP adresa. Pokud chcete přiřadit konkrétní IP adresu nebo zachovat IP adresu pro znovu nasazené služby Kubernetes, můžete vytvořit a použít statickou veřejnou IP adresu.

V tomto článku se dozvíte, jak vytvořit statickou veřejnou IP adresu a přiřadit ji ke službě Kubernetes.

Než začnete

  • Potřebujete nainstalovanou a nakonfigurovanou verzi Azure CLI 2.0.59 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud chcete nainstalovat nebo upgradovat, přečtěte si téma Instalace Azure CLI.
  • Tento článek popisuje použití IP adresy SKU Standard s vyrovnávačem zatížení SKU Standard. Další informace najdete v tématu Typy IP adres a metody přidělování v Azure.

Vytvoření clusteru AKS

  1. Pomocí příkazu vytvořte skupinu az group create prostředků Azure.

    az group create --name myNetworkResourceGroup --location eastus
    
  2. Vytvořte AKS cluster pomocí příkazu az aks create.

    az aks create --name myAKSCluster --resource-group myNetworkResourceGroup --generate-ssh-keys
    

Vytvoření statické IP adresy

  1. Pomocí příkazu az aks show získejte název skupiny prostředků uzlu a dotazujte na vlastnost nodeResourceGroup.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. Pomocí příkazu vytvořte statickou veřejnou IP adresu ve skupině az network public-ip create prostředků uzlu.

    az network public-ip create \
        --resource-group <node resource group name> \
        --name myAKSPublicIP \
        --sku Standard \
        --allocation-method static
    

    Důležité

    AKS už nepodporuje nástroj pro vyrovnávání zatížení Basic. Pokud váš cluster používá základní Load Balancer, upgradujte na Standard Load Balancer před konfigurací statické veřejné IP adresy.

  3. Pomocí příkazu získejte statickou veřejnou IP adresu az network public-ip show . Zadejte název skupiny prostředků uzlu a veřejnou IP adresu, kterou jste vytvořili, a vyhledejte ipAddress.

    az network public-ip show --resource-group <node resource group name> --name myAKSPublicIP --query ipAddress --output tsv
    

Vytvoření služby Kubernetes se statickou IP adresou

  1. Vytvořte soubor s názvem load-balancer-service.yaml a zkopírujte do obsahu následujícího souboru YAML. Zadejte název prostředku veřejné IP adresy(myAKSPublicIP), který jste vytvořili v oddílu Vytvořit statickou IP adresu a název skupiny prostředků uzlu.

    Identita řídicí roviny AKS má ve výchozím nastavení oprávnění Přispěvatel ve skupině prostředků uzlu, takže veřejná IP adresa, kterou vytvoříte v tomto článku, nevyžaduje další přiřazení role. Pokud používáte příchozí nebo odchozí veřejnou IP adresu v jiné skupině prostředků, udělte identitě řídicí roviny požadovaná oprávnění pro tuto skupinu prostředků. Další informace najdete v tématu Spravované identity v AKS.

    Důležité

    Vlastnost loadBalancerIP v manifestu služby Kubernetes je po upstreamu Kubernetes zastaralá. Stávající služby nadále fungují bez úprav, ale místo toho používají poznámky ke službám.

    Annotation Purpose
    service.beta.kubernetes.io/azure-pip-name Zadejte název prostředku veřejné IP adresy.
    service.beta.kubernetes.io/azure-load-balancer-ipv4 Zadejte adresu IPv4.
    service.beta.kubernetes.io/azure-load-balancer-ipv6 Zadejte adresu IPv6.
    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    

    Poznámka

    Přidáním anotace service.beta.kubernetes.io/azure-pip-name zajistíte nejúčinnější vytváření vyrovnávače zatížení a důrazně se doporučuje, aby se zabránilo potenciálnímu omezování.

  2. Nastavte pro službu popisek DNS veřejně přístupný pomocí poznámky ke službě service.beta.kubernetes.io/azure-dns-label-name . Tím se publikuje plně kvalifikovaný název domény (FQDN) pro vaši službu pomocí veřejných serverů DNS Azure a domény nejvyšší úrovně. Hodnota poznámky musí být v rámci umístění Azure jedinečná, proto doporučujeme použít dostatečně kvalifikovaný popisek. Azure automaticky připojí výchozí příponu do vybraného umístění, například <location>.cloudapp.azure.comk zadanému názvu, a vytvoří plně kvalifikovaný název domény.

    Poznámka

    Pokud chcete publikovat službu ve vlastní doméně, podívejte se na Azure DNS a projekt external-dns .

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
        service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
        service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
      name: azure-load-balancer
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: azure-load-balancer
    
  3. Před vytvořením služby se ujistěte, že váš cluster obsahuje úlohu s pody, které používají label app: azure-load-balancer. Manifest služby vybírá pody s tímto štítkem, ale nevytváří Deployment.

  4. Vytvořte službu pomocí kubectl apply příkazu.

    kubectl apply -f load-balancer-service.yaml
    
  5. Ověřte, že služba vybere alespoň jeden běžící a připravený pod.

    kubectl get pods -l app=azure-load-balancer
    
  6. Pokud chcete zobrazit popisek DNS vašeho nástroje pro vyrovnávání zatížení, použijte kubectl describe příkaz.

    kubectl describe service azure-load-balancer
    

    Popisek DNS bude uvedený pod položkou Annotations, jak je znázorněno v následujícím zhuštěném příkladu výstupu:

    Name:                    azure-load-balancer
    Namespace:               default
    Labels:                  <none>
    Annotations:             service.beta.kubernetes.io/azure-dns-label-name: <unique-service-label>
    

Řešení potíží

V této části se předpokládá, že jste dokončili vytvoření statické IP adresy, pokusili jste se provést kroky ve službě Kubernetes se statickou IP adresou a máte spuštěný cluster AKS. Chcete-li získat název skupiny prostředků uzlu, použijte az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv.

Pokud prostředek veřejné IP adresy uvedený v anotaci service.beta.kubernetes.io/azure-pip-name neexistuje ve skupině prostředků zadané pomocí service.beta.kubernetes.io/azure-load-balancer-resource-group nebo identita řídicí roviny AKS nemá přístup k této skupině prostředků, vytvoření služby Load Balancer se nezdaří. Při řešení potíží zkontrolujte anotace služby a události vytvoření pomocí příkazu kubectl describe. Zadejte název služby zadané v manifestu YAML, jak je znázorněno v následujícím příkladu:

kubectl describe service azure-load-balancer

Výstup ukazuje informace o prostředku služby Kubernetes. Následující příklad výstupu ukazuje Warning v Events: „user supplied IP address was not found.“ V tomto scénáři zajistěte, aby anotace azure-pip-name odpovídala názvu prostředku statické veřejné IP adresy a anotace azure-load-balancer-resource-group odpovídala skupině prostředků, která ho obsahuje.

Name:                     azure-load-balancer
Namespace:                default
Labels:                   <none>
Annotations:              service.beta.kubernetes.io/azure-load-balancer-resource-group: <node resource group name>
                          service.beta.kubernetes.io/azure-pip-name: myAKSPublicIP
Selector:                 app=azure-load-balancer
Type:                     LoadBalancer
IP:                       10.0.18.125
IP:                       40.121.183.52
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  32582/TCP
Endpoints:                <pod-ip>:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type     Reason                      Age               From                Message
  ----     ------                      ----              ----                -------
  Normal   CreatingLoadBalancer        7s (x2 over 22s)  service-controller  Creating load balancer
  Warning  CreatingLoadBalancerFailed  6s (x2 over 12s)  service-controller  Error creating load balancer (will retry): Failed to create load balancer for service default/azure-load-balancer: user supplied IP Address 40.121.183.52 was not found

Další kroky

Pokud chcete mít větší kontrolu nad síťovým provozem do vašich aplikací, použijte doplněk směrování aplikací pro AKS. Další informace o doplňku směrování aplikací najdete v tématu Spravované příchozí přenosy dat NGINX s doplňkem směrování aplikace.