Alibaba Cloud Server Load Balancer (SLB) tarafından dışa açılan bir Service, SLB alan adı veya <IP:Service Port> kullanılarak küme dışından; <Service Name:Service Port> kullanılarak ise küme içinden erişilebilir. Bu konu, mevcut bir yük dengeleyici kullanan bir Service aracılığıyla ACS kümesindeki bir uygulamanın nasıl dışa açılacağını Nginx uygulaması örneği üzerinden açıklar.
Önkoşullar
SLB konsolunda oluşturduğunuz bir SLB örneğinizin olması gerekir. Örnek, ACS kümesiyle aynı bölgede bulunmalıdır. Bu konuda internet yönlü Classic Load Balancer (CLB) örneği kullanılmıştır. Bir CLB örneğiniz yoksa CLB örnekleri oluşturma ve yönetme konusuna bakın.
Dikkat edilmesi gerekenler
SLB yeniden kullanım sınırlamaları
-
Yeniden kullanmak istediğiniz SLB örneği aşağıdaki gereksinimleri karşılamalıdır:
Yalnızca SLB konsolunda manuel olarak oluşturduğunuz SLB örneklerini yeniden kullanabilirsiniz. Cloud Controller Manager (CCM) tarafından otomatik olarak oluşturulan veya küme API sunucusu tarafından kullanılan örnekleri yeniden kullanamazsınız.
Bir ACS kümesinde intranet SLB örneğini yeniden kullanmak için SLB örneği ile ACS kümesi aynı sanal özel bulutta (VPC) olmalıdır.
-
SLB örneğinin adres türü, Service'in erişim türüyle eşleşmelidir:
Service Public Access sağlıyorsa (
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"ek açıklamasıyla belirtilir), SLB örneğinin Address Type değeri Public Network olmalıdır.Service internal access sağlıyorsa (
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"ek açıklamasıyla belirtilir), SLB örneğinin Address Type değeri Internal Network olmalıdır.
Birden fazla Service, aynı SLB örneğinde aynı dinleyici bağlantı noktasını kullanamaz.
Bir SLB örneğini kümeler arasında yeniden kullandığınızda, her kümede ad alanı ve Service adı kombinasyonunun benzersiz olduğundan emin olun.
-
CCM, yalnızca
type: LoadBalancertüründeki bir Service için SLB örneği yapılandırır.Önemlitype: LoadBalancertüründeki bir Service'i başka bir türe değiştirirseniz CCM, SLB örneğine eklenen yapılandırmaları siler. Bu durumda Service, SLB örneği üzerinden erişilemez hale gelir. -
CCM, bildirime dayalı bir API kullanır ve belirli koşullar altında Service yapılandırmasına göre SLB yapılandırmasını otomatik olarak uzlaştırır.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"ek açıklaması ayarlandığında SLB konsolunda manuel olarak değiştirdiğiniz yapılandırmaların üzerine yazılabilir.ÖnemliACS tarafından yönetilen bir SLB örneğinin yapılandırmalarını SLB konsolunda manuel olarak değiştirmeyin. Aksi takdirde yapılandırmalar kaybolabilir ve Service erişilemez hale gelebilir.
Mevcut bir LoadBalancer hizmeti için SLB örneğini değiştiremezsiniz. SLB örneğini değiştirmek istiyorsanız yeni bir Service oluşturmanız gerekir.
SLB kota sınırlamaları
CCM, her
Type=LoadBalancerService için bir SLB örneği oluşturur. Varsayılan kota 60 CLB ve 60 NLB örneğidir. Bu kotayı artırmak için Kota Merkezi konsolunda oturum açıp başvuru gönderin.-
CCM, Service yapılandırmasına göre ECS örneklerini veya Elastic Network Interface'leri (ENI) SLB arka uç sunucu grubuna ekler ve hedefPort başına ayrı bir sunucu grubu oluşturur. Kota sınırlamaları:
Arka uç sunucu sayısı: Bir CLB örneği en fazla 200 arka uç sunucuyu destekler; bir NLB örneği ise en fazla 400 ECS, ENI veya IP tabanlı sunucuyu destekler. Kota formülü: arka uç sunucuları × targetPorts. Kotayı artırmak için önceden Kota Merkezi konsolunda oturum açıp başvuru gönderin.
Örnek başına sunucu grubu ekleri: Bir ECS örneği veya ENI, en fazla 50 CLB arka uç sunucu grubuna ve 200 NLB arka uç sunucu grubuna eklenebilir. Bu sınırı artırmak için Kota Merkezi konsolunda oturum açıp başvuru gönderin.
Aşamalı güncellemeler sırasında ek kota: Eski pod'lar yok edilmeden önce yeni pod'lar oluşturulur ve bu durum beklenenden fazla kota tüketimine neden olabilir. Yeterli kotayı önceden ayırtın.
CCM, Service bağlantı noktalarına göre dinleyiciler oluşturur. Varsayılan sınır, CLB veya NLB örneği başına 50 dinleyicidir. Daha fazlasını eklemek için Kota Merkezi konsolunda oturum açıp başvuru gönderin.
-
CLB sınırları ve NLB sınırları konularına bakın.
SLB kotalarını Server Load Balancer kota yönetimi sayfasında sorgulayabilirsiniz.
Adım 1: Örnek bir uygulama dağıtma
Aşağıdaki adımlar uygulamanın kubectl kullanılarak nasıl dağıtılacağını gösterir.
-
Aşağıdaki içeriğe sahip my-nginx.yaml adlı bir dosya oluşturun.
-
my-nginx örnek uygulamasını dağıtmak için aşağıdaki komutu çalıştırın.
kubectl apply -f my-nginx.yaml -
Uygulamanın çalıştığını doğrulamak için aşağıdaki komutu çalıştırın.
kubectl get deployment my-nginxBeklenen çıktı:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
Adım 2: Uygulamayı Service ile dışa açma
Uygulamayı dışa açmak için konsol veya kubectl kullanarak bir LoadBalancer hizmeti oluşturabilirsiniz.
Konsol
ACS konsoluna giriş yapın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.
Clusters sayfasında hedef kümenin adına tıklayın. Sol gezinme bölmesinde Network > Services seçeneğini belirleyin.
Services sayfasında sol üst köşede bulunan Create seçeneğine tıklayın.
-
Create Service iletişim kutusunda Service parametrelerini yapılandırın.
Parametre
Açıklama
Örnek
Name
Service için bir ad girin.
my-nginx-svc
Service Type
Service türünü seçin. Bu seçenek Service'e nasıl erişileceğini belirler.
Create Service:
-
Service Type: LoadBalancer
-
SLB Type: CLB
-
Select Resource: Use Existing Resource
-
Create port listener: Selected
Backend
Bir iş yükü ilişkilendirmezseniz Endpoints nesnesi oluşturulmaz ancak bunu manuel olarak bağlayabilirsiniz. Daha fazla bilgi için Seçicisiz hizmetler konusuna bakın.
+ Reference Workload Label seçeneğine tıklayıp my-nginx seçin:
-
Name: app
-
Value: nginx
Port Mapping
Bir service portu (Service YAML dosyasındaki
portalanı) ve bir konteyner portu (Service YAML dosyasındakitargetPortalanı) ekleyin. Konteyner portu, arka uç Pod'u tarafından dışa açılan portla eşleşmelidir.-
Service Port: 80
-
Container Port: 80
-
Protocol: TCP
Annotations
Yük dengeleyici için parametreleri yapılandırmak üzere Service'e bir ek açıklama ekleyin. Daha fazla bilgi için Classic Load Balancer (CLB) örneklerini yapılandırmak için ek açıklamaları kullanma konusuna bakın.
Bu örnekte Service trafiğini kontrol etmek için faturalama yöntemi bant genişliğine göre ödeme olarak ve bant genişliği sınırı 2 Mbit/s olarak ayarlanır.
Faturalama yöntemini ayarlayın:
-
Name:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type -
Value: paybybandwidth
Bant genişliğini ayarlayın:
-
Name:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth -
Value: 2
Label
Service'i tanımlamak için bir etiket ekleyin.
Yok
-
Create seçeneğine tıklayın. Services sayfasında yeni oluşturulan Service'i görüntüleyebilirsiniz.
-
External IP sütunundaki IP adresini (örneğin 39.106.XX.XX:80) kullanarak örnek uygulamaya erişin.
Uygulamaya eriştikten sonra Welcome to nginx! sayfası görüntülenir. Bu durum Nginx hizmetinin dağıtıldığını ve beklendiği gibi çalıştığını gösterir.
kubectl
-
Aşağıdaki içeriğe sahip my-nginx-svc.yaml adlı bir dosya oluşturun.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idek açıklamasının değerini güncelleyin. ${YOUR_LB_ID} yerine SLB konsolunda oluşturduğunuz SLB örneğinin ID'sini girin.Varsayılan olarak mevcut bir SLB örneğinin yeniden kullanılması dinleyicilerini oluşturmaz veya üzerine yazmaz. Gerekirse
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listenersek açıklamasınıtrueolarak ayarlayın. Bu örnekte SLB örneği yeni oluşturulmuştur ve bir dinleyici gerektirdiğinden değertrueolarak ayarlanır. Daha fazla bilgi için Classic Load Balancer (CLB) örneklerini yapılandırmak için ek açıklamaları kullanma konusuna bakın.Service'i arka uç uygulamasıyla ilişkilendirmek için
selectordeğerinimy-nginx.yamldosyasındakimatchLabelsdeğeri olanapp: nginxolarak ayarlayın.
apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true' labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer -
my-nginx-svc Service'ini oluşturmak ve uygulamayı dışa açmak için aşağıdaki komutu çalıştırın.
kubectl apply -f my-nginx-svc.yaml -
LoadBalancer hizmetinin oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın.
kubectl get svc my-nginx-svcBeklenen çıktı:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc LoadBalancer 172.21.5.82 39.106.XX.XX 80/TCP 5m -
Uygulamaya erişmek için curl <YOUR-External-IP> komutunu çalıştırın. <YOUR-External-IP> yer tutucusunu önceki adımdaki
EXTERNAL-IPdeğeriyle değiştirin.curl 39.106.XX.XXBeklenen çıktı:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>