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 potřebujete instalovat nebo upgradovat, podívejte se na Install 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 cluster AKS 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
    

    Note

    Pokud v clusteru AKS používáte nástroj pro vyrovnávání zatížení skladové položky Basic, při definování veřejné IP adresy použijte pro parametr Basic--sku. S modelem vyrovnávání zatížení SKU Basic fungují jen IP adresy SKU Basic a pouze IP adresy SKU Standard fungují s modely vyrovnávání zatížení SKU Standard.

  3. Pomocí příkazu získejte statickou veřejnou IP adresu az network public-ip list . 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 pomocí statické IP adresy

  1. Nejprve určete, jaký typ spravované identity váš cluster AKS používá, přiřazený systémem nebo přiřazený uživatelem. Pokud si nejste jisti, zavolejte příkaz az aks show a zadejte dotaz na vlastnost identifikátoru type.

    az aks show \
        --name myAKSCluster \
        --resource-group myResourceGroup \
        --query identity.type \
        --output tsv       
    

    Pokud cluster používá spravovanou identitu, hodnota vlastnosti typu bude buď SystemAssigned , nebo UserAssigned.

    Pokud cluster používá instanční objekt, hodnota vlastnosti typu bude null. Zvažte upgrade clusteru tak, aby používal spravovanou identitu.

  2. Pokud váš cluster AKS používá systémem spravovanou identitu, zadejte dotaz na ID principalu identity následujícím způsobem:

    # Get the principal ID for a system-assigned managed identity.
    CLIENT_ID=$(az aks show \
        --name myAKSCluster \
        --resource-group myNetworkResourceGroup \
        --query identity.principalId \
        --output tsv)
    

    Pokud váš cluster AKS používá spravovanou identitu přiřazenou uživatelem, bude ID hlavního objektu zabezpečení null. Místo toho zadejte dotaz na ID klienta spravované identity přiřazené uživatelem:

    # Get the client ID for a user-assigned managed identity.
    CLIENT_ID=$(az aks show \
        --name myAKSCluster \
        --resource-group myNetworkResourceGroup \
        --query identity.userAssignedIdentities.*.clientId \
        --output tsv    
    
  3. Přiřaďte delegovaná oprávnění pro spravovanou identitu používanou clusterem AKS pro skupinu prostředků veřejné IP adresy voláním az role assignment create příkazu.

    # Get the resource ID for the node resource group.
    RG_SCOPE=$(az group show \
        --name <node resource group> \
        --query id \
        --output tsv)
    
    # Assign the Network Contributor role to the managed identity,
    # scoped to the node resource group.
    az role assignment create \
        --assignee ${CLIENT_ID} \
        --role "Network Contributor" \
        --scope ${RG_SCOPE}
    

    Important

    Pokud jste přizpůsobili odchozí IP adresu, ujistěte se, že vaše identita clusteru má oprávnění k odchozí veřejné IP adrese i k příchozí veřejné IP adrese.

  4. Vytvořte soubor s názvem load-balancer-service.yaml a zkopírujte do obsahu následujícího souboru YAML a zadejte vlastní veřejnou IP adresu vytvořenou v předchozím kroku a název skupiny prostředků uzlu.

    Important

    Přidání vlastnosti loadBalancerIP do manifestu YAML pro vyrovnávání zatížení se stává zastaralým podle upstreamu Kubernetes. I když současné využití zůstává stejné a očekává se, že stávající služby budou fungovat bez úprav, důrazně doporučujeme místo toho nastavit poznámky ke službám . Pokud chcete nastavit poznámky služby, můžete použít service.beta.kubernetes.io/azure-pip-name název veřejné IP adresy nebo použít service.beta.kubernetes.io/azure-load-balancer-ipv4 pro adresu IPv4 a service.beta.kubernetes.io/azure-load-balancer-ipv6 adresu IPv6, jak je znázorněno v příkladu YAML.

    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
    

    Note

    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í.

  5. 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.

    Note

    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
    
  6. Pomocí příkazu kubectl apply vytvořte službu a nasazení.

    kubectl apply -f load-balancer-service.yaml
    
  7. Pokud chcete zobrazit popisek DNS vašeho nástroje pro vyrovnávání zatížení, použijte kubectl describe service 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.kuberenetes.io/azure-dns-label-name: <unique-service-label>
    

Troubleshoot

Pokud statická IP adresa definovaná ve loadBalancerIP vlastnosti manifestu služby Kubernetes neexistuje nebo nebyla vytvořena ve skupině prostředků uzlu a nejsou nakonfigurované žádné další delegování, vytvoření služby nástroje pro vyrovnávání zatížení selže. Při řešení potíží zkontrolujte události vytváření služby pomocí kubectl describe příkazu. 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 zobrazuje Warning v Events: "user supplied IP address was not found." V tomto scénáři se ujistěte, že jste vytvořili statickou veřejnou IP adresu ve skupině prostředků uzlu a že IP adresa zadaná v konfiguraci služby Kubernetes je správná.

Name:                     azure-load-balancer
Namespace:                default
Labels:                   <none>
Annotations:              <none>
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:                <none>
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í aplikace najdete v tématu Spravované příchozí přenosy dat NGINX pomocí doplňku směrování aplikace.