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
- Bu makalede, mevcut bir AKS kümeniz olduğu varsayılır. AKS kümesine ihtiyacınız varsa Azure CLI, Azure PowerShell veya Azure portalını kullanarak bir küme oluşturabilirsiniz.
- Azure CLI sürüm 2.0.59 veya üzeri 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. - Mevcut bir alt ağı veya kaynak grubunu kullanmak istiyorsanız AKS kümesi kimliğinin ağ kaynaklarını yönetmek için izin alması gerekir. Bilgi için bkz. AKS'de kubenet ağını kendi IP adresi aralıklarınızla kullanma veya AKS'de Azure CNI ağını yapılandırma. Yük dengeleyicinizi farklı bir alt ağda bir IP adresi kullanacak şekilde yapılandırıyorsanız AKS kümesi kimliğinin de bu alt ağa okuma erişimi olduğundan emin olun.
- İzinler hakkında daha fazla bilgi için bkz . Diğer Azure kaynaklarına AKS erişimi temsilcisi atama.
İç yük dengeleyici oluşturma
Hizmet türü
LoadBalancer
veazure-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
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
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.
IPv4 adresi ve
service.beta.kubernetes.io/azure-load-balancer-ipv6
IPv6 adresi için kullanarakservice.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
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
Azure Özel Bağlantı hizmetini iç yük dengeleyiciye bağlama
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.
Özel Bağlantı hizmet bağlantısı oluşturma
Hizmet türü
LoadBalancer
veazure-load-balancer-internal
veazure-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
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
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
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 Bağlantı hizmetine Özel Uç Nokta oluşturma
Ö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-count belirtilen 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 Primary ayarlanı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 dengeleyiciEXTERNAL-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-app
bir hizmeti doğrudan silebilirsiniz.
Sonraki adımlar
Kubernetes hizmetleri hakkında daha fazla bilgi edinmek için Kubernetes hizmetleri belgelerine bakın.
Azure Kubernetes Service