Aracılığıyla paylaş


Azure Kubernetes Service (AKS) ile iç yük dengeleyici kullanma

Azure Kubernetes Service'te (AKS) uygulamalarınıza erişimi kısıtlamak için iç yük dengeleyici oluşturabilir ve kullanabilirsiniz. İç yük dengeleyicinin genel IP'si yoktur ve Kubernetes hizmetini yalnızca özel IP'ye ulaşabilen uygulamalar için erişilebilir hale getirir. Bu uygulamalar aynı sanal ağ içinde veya sanal ağ eşlemesi aracılığıyla başka bir sanal ağda olabilir. Bu makalede AKS ile iç yük dengeleyici oluşturma ve kullanma hakkında bilgi verilmektedir.

Not

Azure Load Balancer iki SKU'da kullanılabilir: Temel ve Standart. Standart SKU, aks kümesi oluşturduğunuzda varsayılan olarak kullanılır. Bir LoadBalancer hizmet türü oluşturduğunuzda, kümeyi sağladığınız zamanki yük dengeleyici türüyle aynı olursunuz. Daha fazla bilgi için bkz. Azure Load Balancer SKU karşılaştırması.

Başlamadan önce

İç yük dengeleyici oluşturma

  1. Hizmet türü LoadBalancer ve azure-load-balancer-internal ek açıklama ile adlı internal-lb.yaml bir hizmet bildirimi oluşturun.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. komutunu kullanarak iç yük dengeleyiciyi dağıtın kubectl apply . Bu komut, AKS kümenizle aynı sanal ağa bağlı düğüm kaynak grubunda bir Azure yük dengeleyici oluşturur.

    kubectl apply -f internal-lb.yaml
    
  3. komutunu kullanarak kubectl get service hizmet ayrıntılarını görüntüleyin.

    kubectl get service internal-app
    

    İç yük dengeleyicinin IP adresi, aşağıdaki örnek çıktıda EXTERNAL-IP gösterildiği gibi sütunda gösterilir. Bu bağlamda Dış, yük dengeleyicinin dış arabirimini ifade eder. Bu, genel, dış IP adresi aldığı anlamına gelmez. Bu IP adresi, AKS kümesiyle aynı alt ağdan dinamik olarak atanır.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.248.59   10.240.0.7    80:30555/TCP   2m
    

IP adresi belirtme

Yük dengeleyici için bir IP adresi belirttiğinizde, belirtilen IP adresi AKS kümesiyle aynı sanal ağda bulunmalıdır, ancak sanal ağdaki başka bir kaynağa atanamaz. Örneğin, AKS kümesindeki Kubernetes alt ağı için belirlenen aralıkta bir IP adresi kullanmamalısınız. Aynı sanal ağdaki başka bir kaynağa zaten atanmış bir IP adresi kullanmak yük dengeleyiciyle ilgili sorunlara neden olabilir.

Sanal ağınızdaki alt ağları almak için Azure CLI komutunu veya Get-AzVirtualNetworkSubnetConfig PowerShell cmdlet'ini kullanabilirsinizaz network vnet subnet list.

Alt ağlar hakkında daha fazla bilgi için bkz . Benzersiz bir alt ağa sahip düğüm havuzu ekleme.

Yük dengeleyici ile belirli bir IP adresi kullanmak istiyorsanız iki seçeneğiniz vardır: hizmet ek açıklamalarını ayarlama veya LoadBalancerIP özelliğini yük dengeleyici YAML bildirimine ekleme.

Önemli

LoadBalancerIP özelliğini 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.

  1. IPv4 adresi ve service.beta.kubernetes.io/azure-load-balancer-ipv6 IPv6 adresi için kullanarak service.beta.kubernetes.io/azure-load-balancer-ipv4 hizmet ek açıklamaları ayarlayın.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  1. komutunu kullanarak kubectl get service hizmet ayrıntılarını görüntüleyin.

    kubectl get service internal-app
    

    Sütundaki EXTERNAL-IP IP adresi, aşağıdaki örnek çıktıda gösterildiği gibi belirtilen IP adresinizi yansıtmalıdır:

    NAME           TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.0.184.168   10.240.0.25   80:30225/TCP   4m
    

Yük dengeleyicinizi farklı bir alt ağda yapılandırma hakkında daha fazla bilgi için bkz. Farklı bir alt ağ belirtme

Başlamadan önce

  • Kubernetes sürüm 1.22.x veya üzeri gerekir.
  • Sanal ağ ve alt ağa sahip mevcut bir kaynak grubuna ihtiyacınız vardır. Bu kaynak grubu, özel uç noktayı oluşturduğunuz yerdir. Bu kaynaklara sahip değilseniz bkz . Sanal ağ ve alt ağ oluşturma.
  1. Hizmet türü LoadBalancer ve azure-load-balancer-internal ve azure-pls-create ek açıklamaları ile adlı internal-lb-pls.yaml bir hizmet bildirimi oluşturun. Diğer seçenekler için Azure Özel Bağlantı Hizmet Tümleştirmesi tasarım belgesine bakın.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
        service.beta.kubernetes.io/azure-pls-create: "true"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    
  2. komutunu kullanarak iç yük dengeleyiciyi dağıtın kubectl apply . Bu komut, AKS kümenizle aynı sanal ağa bağlı düğüm kaynak grubunda bir Azure yük dengeleyici oluşturur. Ayrıca Kubernetes hizmetiyle ilişkili yük dengeleyicinin ön uç IP yapılandırmasına bağlanan bir Özel Bağlantı Service nesnesi oluşturur.

    kubectl apply -f internal-lb-pls.yaml
    
  3. komutunu kullanarak kubectl get service hizmet ayrıntılarını görüntüleyin.

    kubectl get service internal-app
    

    İç yük dengeleyicinin IP adresi, aşağıdaki örnek çıktıda EXTERNAL-IP gösterildiği gibi sütunda gösterilir. Bu bağlamda Dış, yük dengeleyicinin dış arabirimini ifade eder. Bu, genel, dış IP adresi aldığı anlamına gelmez.

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    internal-app   LoadBalancer   10.125.17.53  10.125.0.66   80:30430/TCP   64m
    
  4. komutunu kullanarak Özel Bağlantı Service nesnesinin az network private-link-service list ayrıntılarını görüntüleyin.

    # Create a variable for the node resource group
    
    AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
    
    # View the details of the Private Link Service object
    
    az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
    

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    Name      Alias
    --------  -------------------------------------------------------------------------
    pls-xyz   pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
    

Özel Uç Nokta, oluşturduğunuz Özel Bağlantı Hizmeti aracılığıyla Kubernetes hizmet nesnenize özel olarak bağlanmanızı sağlar.

  • komutunu kullanarak az network private-endpoint create özel uç nokta oluşturun.

    # Create a variable for the private link service
    
    AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv)
    
    # Create the private endpoint
    
    $ az network private-endpoint create \
        -g myOtherResourceGroup \
        --name myAKSServicePE \
        --vnet-name myOtherVNET \
        --subnet pe-subnet \
        --private-connection-resource-id $AKS_PLS_ID \
        --connection-name connectToMyK8sService
    

Ek Açıklamalar Aracılığıyla PLS Özelleştirmeleri

Aşağıda, PLS kaynağını özelleştirmek için kullanılabilecek ek açıklamalar yer alır.

Annotation Value Açıklama Zorunlu Varsayılan
service.beta.kubernetes.io/azure-pls-create "true" PLS'nin oluşturulması gerekip gerekmediğini gösteren Boole değeri. Zorunlu
service.beta.kubernetes.io/azure-pls-name <PLS name> Oluşturulacak PLS kaynağının adını belirten dize. İsteğe bağlı "pls-<LB frontend config name>"
service.beta.kubernetes.io/azure-pls-resource-group Resource Group name PLS kaynağının oluşturulacağı Kaynak Grubunun adını belirten dize İsteğe bağlı MC_ resource
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet <Subnet name> PLS'nin dağıtılacağı alt ağı gösteren dize. Bu alt ağ, arka uç havuzuyla aynı sanal ağda bulunmalıdır. PLS NAT IP'leri bu alt ağ içinde ayrılır. İsteğe bağlı ise service.beta.kubernetes.io/azure-load-balancer-internal-subnet, bu ILB alt ağı kullanılır. Aksi takdirde, yapılandırma dosyasından varsayılan alt ağ kullanılır.
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count [1-8] Ayrılacak özel NAT IP'lerinin toplam sayısı. İsteğe bağlı 1
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address "10.0.0.7 ... 10.0.0.10" Ayrılacak statik IPv4 IP'lerinin boşlukla ayrılmış listesi. (IPv6 şu anda desteklenmiyor.) Toplam IP sayısı, içinde service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-countbelirtilen IP sayısından büyük olmamalıdır. Daha az IP belirtilmişse, geri kalanı dinamik olarak ayrılır. Listedeki ilk IP olarak Primaryayarlanır. İsteğe bağlı Tüm IP'ler dinamik olarak ayrılır.
service.beta.kubernetes.io/azure-pls-fqdns "fqdn1 fqdn2" PLS ile ilişkili fqdn'lerin boşlukla ayrılmış listesi. İsteğe bağlı []
service.beta.kubernetes.io/azure-pls-proxy-protocol "true" veya "false" Bağlantı kimliği ve kaynak IP adresi de dahil olmak üzere bağlantı bilgilerini geçirmek için PLS'de TCP PROXY protokolunun etkinleştirilip etkinleştirilmeydiğini gösteren Boole. Arka uç hizmetinin ARA SUNUCU protokollerini desteklemeSI GEREKTİRİR aksi takdirde bağlantıların başarısız olacağını unutmayın. İsteğe bağlı false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" veya "*" Özel bağlantı hizmetinin görünür olduğu Azure abonelik kimliklerinin boşlukla ayrılmış listesi. PLS'yi tüm alt bileşenlerde kullanıma açmak için kullanın "*" (En az kısıtlayıcı). İsteğe bağlı Yalnızca rol tabanlı erişim denetimini gösteren boş liste [] : Bu özel bağlantı hizmeti yalnızca dizininizde rol tabanlı erişim denetimi izinlerine sahip kişiler tarafından kullanılabilir. (En kısıtlayıcı)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" Azure abonelik kimliklerinin boşlukla ayrılmış listesi. Bu, PLS'ye listelenen aboneliklerden gelen PE bağlantı isteklerinin otomatik olarak onaylanmasını sağlar. Bu yalnızca görünürlük "*" olarak ayarlandığında çalışır. İsteğe bağlı []

Özel ağları kullanma

AKS kümenizi oluştururken gelişmiş ağ ayarlarını belirtebilirsiniz. Bu ayarlar, kümeyi mevcut bir Azure sanal ağına ve alt ağlarına dağıtmanıza olanak tanır. Örneğin, AKS kümenizi şirket içi ortamınıza bağlı özel bir ağa dağıtabilir ve yalnızca dahili olarak erişilebilen hizmetleri çalıştırabilirsiniz.

Daha fazla bilgi için bkz . Kubenet veya Azure CNI ile kendi sanal ağ alt ağlarınızı yapılandırma.

AKS kümesinde özel ağ kullanan bir iç yük dengeleyiciyi dağıtmak için önceki adımlarda herhangi bir değişiklik yapmanız gerekmez. Yük dengeleyici AKS kümenizle aynı kaynak grubunda oluşturulur, ancak aşağıdaki örnekte gösterildiği gibi bunun yerine özel sanal ağınıza ve alt ağınıza bağlıdır:

$ kubectl get service internal-app

NAME           TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
internal-app   LoadBalancer   10.1.15.188   10.0.0.35     80:31669/TCP   1m

Not

AKS kümesi tarafından kullanılan küme kimliği en azından sanal ağ kaynağında Ağ Katkıda Bulunanı rolüne sahip olmalıdır. komutunu kullanarak az aks show küme kimliğini görüntüleyebilirsiniz, örneğin az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity". Komutunu kullanarak az role assignment create Ağ Katkıda Bulunanı rolünü atayabilirsiniz, örneğin az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor".

Bunun yerine özel bir rol tanımlamak istiyorsanız aşağıdaki izinlere ihtiyacınız vardır:

  • Microsoft.Network/virtualNetworks/subnets/join/action
  • Microsoft.Network/virtualNetworks/subnets/read

Daha fazla bilgi için bkz . Sanal ağ alt ağı ekleme, değiştirme veya silme.

Farklı bir alt ağ belirtme

  • azure-load-balancer-internal-subnet Yük dengeleyiciniz için bir alt ağ belirtmek üzere ek açıklamayı hizmetinize ekleyin. Belirtilen alt ağ AKS kümenizle aynı sanal ağda olmalıdır. Dağıtıldığında, yük dengeleyici EXTERNAL-IP adresi belirtilen alt ağın bir parçasıdır.

    apiVersion: v1
    kind: Service
    metadata:
      name: internal-app
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
        service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet"
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: internal-app
    

Yük dengeleyiciyi silme

Yük dengeleyici, tüm hizmetleri silindiğinde silinir.

Tüm Kubernetes kaynaklarında olduğu gibi, temel alınan Azure yük dengeleyiciyi de silen gibi kubectl delete service internal-appbir hizmeti doğrudan silebilirsiniz.

Sonraki adımlar

Kubernetes hizmetleri hakkında daha fazla bilgi edinmek için Kubernetes hizmetleri belgelerine bakın.