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ğda 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.

Önemli

Azure Kubernetes Service (AKS), 30 Eylül 2025'den itibaren Temel Yük Dengeleyici'yi desteklememektedir. Olası hizmet kesintilerini önlemek için yeni dağıtımlar için Standart Load Balancer kullanmanızı ve mevcut dağıtımları Standart Load Balancer'a yükseltmenizi öneririz. Daha fazla bilgi için Kullanımdan Kaldırma GitHub konusuna ve Azure Güncelleştirmeleri kullanımdan kaldırma duyurusuna bakın. Duyurular ve güncelleştirmeler hakkında bilgi sahibi olmak için AKS sürüm notlarını izleyin.

Başlamadan önce

İç yük dengeleyici oluşturma

  1. internal-lb.yaml adlı, hizmet türü LoadBalancer olan ve azure-load-balancer-internal ek açıklamasına sahip 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, IP adresi yük dengeleyici tarafından kullanılan alt ağ içinde kullanılabilir olmalıdır. Yük dengeleyici varsayılan olarak AKS kümesiyle aynı alt ağı kullanır. Azure ayrılmış IP adresi, başka bir kaynağa atanmış bir IP adresi veya Kubernetes hizmeti CIDR'sinden bir IP adresi kullanmayın.

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

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

Yük dengeleyici YAML manifestosuna LoadBalancerIP özelliğinin eklenmesi, upstream Kubernetes doğrultusunda kullanımdan kaldırılmaktadır. 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ı hakkında daha fazla bilgi için bkz. Azure Load Balancer tarafından desteklenen ek açıklamalar.

  1. Hizmet ek açıklamalarını, IPv4 adresi için service.beta.kubernetes.io/azure-load-balancer-ipv4 ve IPv6 adresi için service.beta.kubernetes.io/azure-load-balancer-ipv6 kullanarak 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
    
  2. 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.

Önemli

Özel Bağlantı Hizmeti aşağıdaki kısıtlamalara sahiptir:

  • Özel Bağlantı Hizmeti yalnızca IPv4 trafiğini destekler ve yalnızca TCP ve UDP aktarım protokollerini destekler.
  • Hizmette externalTrafficPolicy: Local kullanılıyorsa, Özel Bağlantı Service alt ağı pod alt ağından farklı olmalıdır. Aynı alt ağı kullanmak için Cluster değerini externalTrafficPolicy olarak ayarlayın.
  • PROXY protokolunu etkinleştirir ve kullanırsanız externalTrafficPolicy: Local, varsayılan sistem durumu yoklaması başarısız olduğundan özel bir sistem durumu yoklaması yapılandırmanız gerekir.

Daha fazla bilgi için bkz. Özel Bağlantı Hizmeti sınırlamaları ve Azure Özel Bağlantı Hizmeti tümleştirme kısıtlamaları.

  1. internal-lb-pls.yaml adlı, hizmet türü LoadBalancer olan ve azure-load-balancer-internal ile azure-pls-create ek açıklamalarını içeren 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 hizmet nesnesiyle ilişkilendirilmiş iç yük dengeleyicinin ön uç IP yapılandırmasına bağlanan bir Özel Bağlantı Hizmeti 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. pls-xyz öğesini önceki adımda döndürülen Özel Bağlantı hizmeti adıyla değiştirin.

Özel uç noktayı oluşturmak istediğiniz hedef kaynak grubuna ayarlayın --resource-group . --subnet ve --vnet-name öğelerini, özel uç noktayı içeren sanal ağ ve alt ağ olarak ayarlayın. AKS_PLS_ID öğesini, --private-connection-resource-id içinden alınan Özel Bağlantı Hizmeti kaynak kimliği olarak ayarlayın.

# Create variables for the Private Link Service

AKS_PLS_NAME=pls-xyz
AKS_PLS_ID=$(az network private-link-service show -g $AKS_MC_RG --name $AKS_PLS_NAME --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

PLS kaynağını özelleştirmek için aşağıdaki ek açıklamaları kullanabilirsiniz:

Ek Açıklama Değer 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şturulduğu 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ıldığı 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ı service.beta.kubernetes.io/azure-load-balancer-internal-subnet ise 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 adreslerinin boşluklarla 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 tam nitelikli etki alanı adlarının 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ç hizmeti PROXY protokolünü desteklemelidir; aksi takdirde bağlantı başarısız olur. İsteğe bağlı false
service.beta.kubernetes.io/azure-pls-visibility "sub1 sub2 sub3 … subN" veya "*" Özel Bağlantı Hizmeti'nin 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 kiracılar genelinde yetkili kullanıcılar dahil olmak üzere gerekli Azure RBAC izinlerine sahip kullanıcılar tarafından kullanılabilir. (En kısıtlayıcı)
service.beta.kubernetes.io/azure-pls-auto-approval "sub1 sub2 sub3 … subN" PLS'ye yönelik PE bağlantı istekleri otomatik olarak onaylanan Azure abonelik kimliklerinin boşlukla ayrılmış listesi. Otomatik onay listesi görünürlük listesinin bir alt kümesi olmalıdır. İsteğe bağlı []

Özel ağlarla iç yük dengeleyici 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ümenizin düğüm kaynak grubunda oluşturulur ve aşağıdaki örnekte gösterildiği gibi özel sanal ağınıza ve alt ağınıza bağlanı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ğinin, sanal ağ kaynağı üzerinde en az Network Contributor rolüne sahip olması gerekir. 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 Sanal ağ alt ağı ekleme, değiştirme veya silme bölümüne bakın.

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

service.beta.kubernetes.io/azure-load-balancer-internal-subnet annotation değerini, "apps-subnet" gibi alt ağ adı dizesi olarak ayarlayın.

Yük dengeleyiciyi silme

Tüm Kubernetes hizmetlerini sildiğinizde yük dengeleyici silinir.

Herhangi bir Kubernetes kaynağında olduğu gibi, kubectl delete service internal-app gibi bir hizmeti doğrudan silebilirsiniz; bu işlem temel Azure yük dengeleyicisini de siler.

Sonraki adımlar

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