Sdílet prostřednictvím


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 i přidružený nástroj pro vyrovnávání zatížení a přidružená IP adresa. Pokud chcete znovu nasazeným službám Kubernetes přiřadit konkrétní IP adresu nebo zachovat jejich IP adresu, 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 instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
  • Tento článek popisuje použití IP adresy skladové položky Standard s nástrojem pro vyrovnávání zatížení skladové položky 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. Pomocí příkazu vytvořte cluster az aks create AKS.

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

Vytvoření statické IP adresy

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

    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
    

    Poznámka:

    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 nástrojem pro vyrovnávání zatížení skladové položky Basic fungují jenom IP adresy skladových položek Úrovně Basic a pouze IP adresy SKU Úrovně Standard fungují s nástroji pro vyrovnávání zatížení SKU Úrovně 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 zadejte dotaz na 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 jistí, zavolejte příkaz az aks show a zadejte dotaz na vlastnost typu identity.

    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á spravovanou identitu přiřazenou systémem, zadejte dotaz na ID objektu zabezpečení spravované 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 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}
    

    Důležité

    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.

    Důležité

    loadBalancerIP Přidání vlastnosti do manifestu YAML nástroje pro vyrovnávání zatížení zastaralá po 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
    

    Poznámka:

    Přidáním poznámky service.beta.kubernetes.io/azure-pip-name zajistíte nejúčinnější vytváření LoadBalanceru a důrazně se doporučuje zabránit 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.

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

    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>
    

Odstraňování potíží

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 ukazuje 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 manifestu 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.