Aracılığıyla paylaş


Azure Kubernetes Service (AKS) yük dengeleyici ile statik genel IP adresi ve DNS etiketi kullanma

Azure Kubernetes Service (AKS) kümesinde yük dengeleyici kaynağı oluşturduğunuzda, kendisine atanan genel IP adresi yalnızca bu kaynağın kullanım ömrü için geçerlidir. Kubernetes hizmetini silerseniz ilişkili yük dengeleyicisi ve IP adresi de silinir. Belirli bir IP adresi atamak veya yeniden dağıtılan Kubernetes hizmetleri için bir IP adresini korumak istiyorsanız, statik bir genel IP adresi oluşturabilir ve kullanabilirsiniz.

Bu makalede statik genel IP adresi oluşturma ve Bunu Kubernetes hizmetinize atama gösterilmektedir.

Başlamadan önce

  • Azure CLI sürüm 2.0.59 veya üzerinin yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
  • Bu makale, Standart SKU yük dengeleyici ile Standart SKU IP'sini kullanmayı kapsar. Daha fazla bilgi için bkz . Azure'da IP adresi türleri ve ayırma yöntemleri.

AKS kümesi oluşturma

  1. komutunu kullanarak az group create bir Azure kaynak grubu oluşturun.

    az group create --name myNetworkResourceGroup --location eastus
    
  2. komutunu kullanarak az aks create bir AKS kümesi oluşturun.

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

Statik IP adresi oluşturma

  1. özelliği için komutunu ve sorgusunu az aks show nodeResourceGroup kullanarak düğüm kaynak grubunun adını alın.

    az aks show --name myAKSCluster --resource-group myNetworkResourceGroup --query nodeResourceGroup -o tsv
    
  2. komutunu kullanarak az network public ip create düğüm kaynak grubunda statik bir genel IP adresi oluşturun.

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

    Not

    AKS kümenizde Temel SKU yük dengeleyici kullanıyorsanız genel IP tanımlarken parametresi için --sku Basic kullanın. Yalnızca Temel SKU IP'leri Temel SKU yük dengeleyici ile ve yalnızca Standart SKU IP'leri Standart SKU yük dengeleyicilerle çalışır.

  3. komutunu kullanarak az network public-ip list statik genel IP adresini alın. Düğüm kaynak grubunun adını ve oluşturduğunuz genel IP adresini belirtin ve için sorgu yapın ipAddress.

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

Statik IP adresini kullanarak hizmet oluşturma

  1. İlk olarak, AKS kümenizin hangi tür yönetilen kimliği kullandığını, sistem tarafından atandığını veya kullanıcı tarafından atandığını belirleyin. Emin değilseniz kimliğin type özelliği için az aks show komutunu ve sorgusunu çağırın.

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

    Küme yönetilen kimlik kullanıyorsa type özelliğinin değeri SystemAssigned veya UserAssigned olur.

    Küme bir hizmet sorumlusu kullanıyorsa type özelliğinin değeri null olur. Yönetilen kimlik kullanmak için kümenizi yükseltmeyi göz önünde bulundurun.

  2. AKS kümeniz sistem tarafından atanan bir yönetilen kimlik kullanıyorsa, yönetilen kimliğin asıl kimliğini aşağıdaki gibi sorgulayın:

    # 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)
    

    AKS kümeniz kullanıcı tarafından atanan bir yönetilen kimlik kullanıyorsa, asıl kimlik null olur. Bunun yerine kullanıcı tarafından atanan yönetilen kimliğin istemci kimliğini sorgula:

    # 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. komutunu çağırarak AKS kümesi tarafından genel IP'nin kaynak grubu için kullanılan yönetilen kimlik için temsilci izinleri atayın az role assignment create .

    # 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}
    

    Önemli

    Giden IP'nizi özelleştirdiyseniz, küme kimliğinizin hem giden genel IP hem de gelen genel IP için izinleri olduğundan emin olun.

  4. Adlı bir dosya load-balancer-service.yaml oluşturun ve önceki adımda oluşturulan kendi genel IP adresinizi ve düğüm kaynak grubu adını sağlayarak aşağıdaki YAML dosyasının içeriğine kopyalayın.

    Önemli

    loadBalancerIP Özelliği yük dengeleyici YAML bildirimine eklemek, yukarı akış Kubernetes'in ardından kullanımdan kaldırılıyor. Geçerli kullanım aynı kalır ve mevcut hizmetlerin değişiklik yapılmadan çalışması beklenir, ancak bunun yerine hizmet ek açıklamalarını ayarlamanızı kesinlikle öneririz. Hizmet ek açıklamalarını ayarlamak için, genel IP adı için veya service.beta.kubernetes.io/azure-pip-name örnek YAML'de gösterildiği gibi bir IPv4 adresi ve service.beta.kubernetes.io/azure-load-balancer-ipv6 bir IPv6 adresi için kullanabilirsinizservice.beta.kubernetes.io/azure-load-balancer-ipv4.

    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
    

    Not

    Ek açıklamanın service.beta.kubernetes.io/azure-pip-name eklenmesi en verimli LoadBalancer oluşturma işlemini sağlar ve olası azaltmayı önlemek için kesinlikle önerilir.

  5. Hizmet ek açıklamasını kullanarak service.beta.kubernetes.io/azure-dns-label-name hizmete genel kullanıma yönelik bir DNS etiketi ayarlayın. Bu, Azure'ın genel DNS sunucularını ve en üst düzey etki alanını kullanarak hizmetiniz için tam etki alanı adı (FQDN) yayımlar. Ek açıklama değeri Azure konumunda benzersiz olmalıdır, bu nedenle yeterli nitelenmiş bir etiket kullanmanızı öneririz. Azure, seçtiğiniz konuma otomatik olarak varsayılan bir sonek ekler; örneğin <location>.cloudapp.azure.com, sağladığınız ada FQDN'yi oluşturur.

    Not

    Hizmeti kendi etki alanınızda yayımlamak istiyorsanız bkz . Azure DNS ve dış dns projesi.

    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. komutunu kullanarak kubectl apply hizmeti ve dağıtımı oluşturun.

    kubectl apply -f load-balancer-service.yaml
    
  7. Yük dengeleyicinizin DNS etiketini görmek için komutunu kullanın kubectl describe service .

    kubectl describe service azure-load-balancer
    

    DNS etiketi, aşağıdaki sıkıştırılmış örnek çıktıda gösterildiği gibi altında Annotationslistelenir:

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

Sorun giderme

Kubernetes hizmet bildiriminin özelliğinde loadBalancerIP tanımlanan statik IP adresi yoksa veya düğüm kaynak grubunda oluşturulmadıysa ve yapılandırılmış başka temsilci yoksa yük dengeleyici hizmeti oluşturma işlemi başarısız olur. Sorun gidermek için komutunu kullanarak hizmet oluşturma olaylarını kubectl describe gözden geçirin. Aşağıdaki örnekte gösterildiği gibi YAML bildiriminde belirtilen hizmetin adını belirtin:

kubectl describe service azure-load-balancer

Çıkışta Kubernetes hizmet kaynağıyla ilgili bilgiler gösterilir. Aşağıdaki örnek çıktıda : "user supplied IP address was not found." içinde Eventsbir Warning gösterilir. Bu senaryoda, düğüm kaynak grubunda statik genel IP adresini oluşturduğunuzdan ve Kubernetes hizmet bildiriminde belirtilen IP adresinin doğru olduğundan emin olun.

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

Sonraki adımlar

Uygulamalarınıza yönelik ağ trafiği üzerinde daha fazla denetim için AKS için uygulama yönlendirme eklentisini kullanın. Uygulama yönlendirme eklentisi hakkında daha fazla bilgi için bkz . Uygulama yönlendirme eklentisiyle yönetilen NGINX girişi.