通過使用自動創(chuàng)建負(fù)載均衡的服務(wù)公開應(yīng)用
當(dāng)您沒有可用的負(fù)載均衡時(shí),cloud-controller-manager(CCM)組件自動為LoadBalancer類型的服務(wù)創(chuàng)建并管理負(fù)載均衡,該實(shí)例類型包含:傳統(tǒng)型負(fù)載均衡CLB(Classic Load Balancer)和網(wǎng)絡(luò)型負(fù)載均衡NLB(Network Load Balancer)。本文以Nginx應(yīng)用為例,介紹如何通過使用自動創(chuàng)建負(fù)載均衡的服務(wù)來公開應(yīng)用。
注意事項(xiàng)
CCM管理負(fù)載均衡時(shí)注意事項(xiàng)
CCM只為
Type=LoadBalancer
類型的Service配置負(fù)載均衡,對于非LoadBalancer類型的Service則不會為其配置負(fù)載均衡。CCM使用聲明式API,會在一定條件下自動根據(jù)Service的配置刷新負(fù)載均衡配置。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners:
設(shè)置為"true"
時(shí),您自行在負(fù)載均衡控制臺上修改的配置均存在被覆蓋的風(fēng)險(xiǎn)。
當(dāng)Type=LoadBalancer
的Service變更為Type!=LoadBalancer
時(shí),CCM會刪除為該負(fù)載均衡添加的配置,從而造成無法通過該負(fù)載均衡訪問Service。
請勿在負(fù)載均衡控制臺上手動修改ACK創(chuàng)建并維護(hù)的負(fù)載均衡的任何配置,否則有配置丟失的風(fēng)險(xiǎn),造成Service不可訪問。
負(fù)載均衡
CCM會為
Type=LoadBalancer
類型的Service創(chuàng)建負(fù)載均衡。默認(rèn)情況下一個用戶可以保留60個實(shí)例。如果需要創(chuàng)建的數(shù)量大于60,請到配額平臺提交申請。CCM會根據(jù)Service的配置將ECS掛載到負(fù)載均衡后端服務(wù)器組中。
CCM會根據(jù)Service中定義的端口創(chuàng)建監(jiān)聽。默認(rèn)情況下一個實(shí)例可以添加50個監(jiān)聽,如需添加更多監(jiān)聽,請到配額平臺提交申請。
更多負(fù)載均衡使用限制,請參見CLB使用限制和NLB使用限制。
負(fù)載均衡配額查詢請參見負(fù)載均衡配額管理。
步驟一:部署示例應(yīng)用
本文以Nginx無狀態(tài)應(yīng)用為例,指導(dǎo)您如何在ACK中通過負(fù)載均衡類型的Service暴露應(yīng)用。
控制臺操作指導(dǎo)
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在無狀態(tài)頁面,單擊使用鏡像創(chuàng)建,配置應(yīng)用的基本信息、容器配置、高級配置等。
在應(yīng)用基本信息頁簽中,配置應(yīng)用名稱,本示例為my-nginx,其他參數(shù)保持默認(rèn)值,然后單擊下一步。
在容器配置頁簽中,設(shè)置容器鏡像名稱、端口,其他參數(shù)保持默認(rèn)值,然后單擊下一步。
配置項(xiàng)
取值
鏡像名稱
單擊選擇鏡像,在選擇鏡像及版本對話框單擊制品中心頁簽,然后搜索
nginx
,選擇名稱為openanolis/nginx的鏡像倉庫,單擊選擇鏡像版本,設(shè)置鏡像的版本,完成后單擊確定。端口
名稱:nginx。
容器端口:80。
在高級配置頁簽中,保持默認(rèn),單擊創(chuàng)建,完成Nginx應(yīng)用的創(chuàng)建。
kubectl操作指導(dǎo)
使用以下示例應(yīng)用的YAML內(nèi)容,創(chuàng)建名為my-nginx.yaml文件。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx # 示例應(yīng)用的名稱。 labels: app: nginx spec: replicas: 2 # 設(shè)置副本數(shù)量。 selector: matchLabels: app: nginx # 對應(yīng)服務(wù)中Selector的值需要與其一致,才可以通過服務(wù)公開此應(yīng)用。 template: metadata: labels: app: nginx spec: # nodeSelector: # env: test-team containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # 需要在服務(wù)中暴露該端口。
執(zhí)行以下命令,部署示例應(yīng)用my-nginx。
kubectl apply -f my-nginx.yaml
執(zhí)行以下命令,確認(rèn)示例應(yīng)用狀態(tài)正常。
kubectl get deployment my-nginx
預(yù)期輸出:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 2/2 2 2 50s
步驟二:通過使用自動創(chuàng)建負(fù)載均衡的服務(wù)公開應(yīng)用
您可以通過控制臺和kubectl兩種方式來創(chuàng)建LoadBalancer類型的服務(wù),并通過其公開應(yīng)用。
控制臺操作指導(dǎo)
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在服務(wù)頁面,單擊創(chuàng)建,在創(chuàng)建服務(wù)對話框中設(shè)置服務(wù)相關(guān)的參數(shù)。
配置項(xiàng)
描述
示例
服務(wù)名稱
輸入Service(服務(wù))的名稱。
my-nginx-svc
服務(wù)類型
選擇Service類型,Service網(wǎng)絡(luò)支持以下模式,分別對接不同來源和類型的客戶端的訪問,包括:
虛擬集群IP(ClusterIP)主要服務(wù)于集群內(nèi)部通信,僅當(dāng)服務(wù)類型設(shè)置為虛擬的ClusterIP時(shí),才支持服務(wù)實(shí)例之間的發(fā)現(xiàn)。通過使用無頭服務(wù)Headless Service,您可以與其他服務(wù)發(fā)現(xiàn)機(jī)制互動,而不必依賴Kubernetes默認(rèn)提供的基于ClusterIP的服務(wù)發(fā)現(xiàn)和負(fù)載均衡。
負(fù)載均衡提供了一種方法,通過集成阿里云負(fù)載均衡CLB(Classic Load Balancer)及網(wǎng)絡(luò)型負(fù)載均衡NLB(Network Load Balancer),可以將集群內(nèi)部應(yīng)用對外暴露。相比于NodePort方式,能夠顯著提升應(yīng)用的可用性和性能。支持配置如下類型:
CLB:配置請參見傳統(tǒng)型負(fù)載均衡CLB。
NLB:配置請參見網(wǎng)絡(luò)型負(fù)載均衡NLB。
節(jié)點(diǎn)端口(NodePort)提供了一種便捷的方式,使得外部用戶可以通過節(jié)點(diǎn)的IP地址和指定的端口來訪問集群中的服務(wù)。通過訪問
<NodeIP>:<NodePort>
,用戶能夠連接到NodePort服務(wù),但是實(shí)現(xiàn)負(fù)載均衡的配置則需要您自己手動完成。選擇負(fù)載均衡的服務(wù)類型。
單擊使用已有CLB,然后在下拉列表選擇已創(chuàng)建的CLB實(shí)例。
本示例中的CLB實(shí)例為新創(chuàng)建,需要為其創(chuàng)建監(jiān)聽,因此選中強(qiáng)制覆蓋已有監(jiān)聽。
外部流量策略
您的服務(wù)類型為節(jié)點(diǎn)端口或負(fù)載均衡時(shí),才能設(shè)置外部流量策略。關(guān)于外部流量策略的詳細(xì)介紹,請參見Service快速入門。
Local:流量只發(fā)給本節(jié)點(diǎn)的Pod。
Cluster:流量可以轉(zhuǎn)發(fā)到集群中其他節(jié)點(diǎn)上的Pod。
Local
服務(wù)關(guān)聯(lián)
選擇服務(wù)要綁定的后端應(yīng)用。若不進(jìn)行關(guān)聯(lián)部署,則不會創(chuàng)建相關(guān)的Endpoints對象。關(guān)于服務(wù)關(guān)聯(lián)的詳細(xì)介紹,請參見services-without-selectors。
名稱:app
值:my-nginx
端口映射
添加服務(wù)端口(對應(yīng)Service YAML文件中的
port
)和容器端口(對應(yīng)Service YAML文件中的targetPort
),容器端口需要與后端的Pod中暴露的容器端口一致。80
注解
為該服務(wù)添加一個注解(Annotation),配置負(fù)載均衡的參數(shù)。更多參數(shù),請參見通過Annotation配置傳統(tǒng)型負(fù)載均衡CLB和通過Annotation配置網(wǎng)絡(luò)型負(fù)載均衡NLB。
重要請勿復(fù)用集群的API Server的負(fù)載均衡實(shí)例,否則將導(dǎo)致集群訪問異常
本示例中,將該服務(wù)的收費(fèi)方式設(shè)置為按帶寬收費(fèi),帶寬峰值設(shè)置為2 Mbit/s,從而控制服務(wù)的流量。如下所示:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidth
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2
標(biāo)簽
為該服務(wù)添加一個標(biāo)簽,標(biāo)識該服務(wù)。
無
服務(wù)刪除保護(hù)
為關(guān)鍵業(yè)務(wù)和敏感數(shù)據(jù)的Service開啟刪除保護(hù),以避免誤刪帶來的維護(hù)成本。啟用后,僅在手動關(guān)閉刪除保護(hù)后,資源才能被刪除。
說明該功能需先安裝容器安全策略的policy-template-controller和gatekeeper組件,您可以單擊立即安裝完成組件的部署。
關(guān)閉
配置參數(shù)完成后,單擊確定。
在服務(wù)頁面,單擊目標(biāo)服務(wù)名稱,進(jìn)入服務(wù)詳情頁面,在基本信息區(qū)域,單擊該服務(wù)的外部端點(diǎn),例如39.106.XX.XX:80,訪問示例應(yīng)用。
kubectl操作指導(dǎo)
使用以下示例服務(wù)的YAML內(nèi)容,創(chuàng)建名為my-nginx-svc.yaml的文件。
將selector修改為my-nginx.yaml示例應(yīng)用文件中matchLabels的值(本示例為
app: nginx
),從而將該服務(wù)關(guān)聯(lián)至后端應(yīng)用。apiVersion: v1 kind: Service metadata: labels: app: nginx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
執(zhí)行以下命令,創(chuàng)建名為my-nginx-svc的服務(wù),并通過其公開應(yīng)用。
kubectl apply -f my-nginx-svc.yaml
執(zhí)行以下命令,確認(rèn)LoadBalancer類型的服務(wù)已成功創(chuàng)建。
kubectl get svc my-nginx-svc
預(yù)期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc LoadBalancer 172.21.5.82 39.106.XX.XX 80:30471/TCP 5m
執(zhí)行以下命令,訪問示例應(yīng)用。
curl <YOUR-External-IP> # 請將<YOUR-External-IP>替換為上面獲取到的EXTERNAL-IP地址。
預(yù)期輸出:
<!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 >nginx.org</a>.<br/> Commercial support is available at <a >nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
傳統(tǒng)型負(fù)載均衡CLB
新建CLB資源
新建CLB(Classic Load Balancer)時(shí),您可以根據(jù)新建CLB資源描述進(jìn)行創(chuàng)建。更多信息,請參見創(chuàng)建和管理CLB實(shí)例。
名稱 | 描述 |
名稱 | 自定義CLB的名稱。 |
訪問方式 | 根據(jù)需要可選擇公網(wǎng)訪問和私網(wǎng)訪問。 |
計(jì)費(fèi)方式 | 根據(jù)需要可選按規(guī)格計(jì)費(fèi)(PayBySoec)和按量計(jì)費(fèi)(PayByCLCU)更多信息,請參見CLB計(jì)費(fèi)概述。 |
IP版本 | 根據(jù)需要可選擇IPv4和IPv6。 |
調(diào)度算法 | 支持輪詢(RR)或加權(quán)輪詢(WRR)兩種策略。RR(默認(rèn)取值):按照訪問順序依次將外部請求依序分發(fā)到后端服務(wù)器;WRR:權(quán)重值越高的后端服務(wù)器,被輪詢到的次數(shù)(概率)也越高。 |
訪問控制 | 提供監(jiān)聽級別的訪問控制。詳細(xì)信息,請參見訪問控制。 |
健康檢查 | 支持TCP和HTTP協(xié)議。開啟健康檢查后,您可以通過健康檢查來判斷后端服務(wù)器的業(yè)務(wù)可用性。健康檢查原理,請參見CLB健康檢查工作原理。 |
其他 | 您還可以通過Annotation配置傳統(tǒng)型負(fù)載均衡。詳細(xì)信息,請參見通過Annotation配置傳統(tǒng)型負(fù)載均衡CLB。 |
使用已有資源
您可以從下拉菜單中選擇已有的CLB(Classic Load Balancer)實(shí)例進(jìn)行復(fù)用。可以選擇是否勾選強(qiáng)制覆蓋已有監(jiān)聽,更多信息請參見,使用已有的負(fù)載均衡,并強(qiáng)制覆蓋已有監(jiān)聽。
復(fù)用CLB實(shí)例存在一些限制,以及相關(guān)的注意事項(xiàng),詳細(xì)信息請參見哪些負(fù)載均衡可以被復(fù)用?。
配置相關(guān)資源
名稱 | 描述 |
調(diào)度算法 | 支持輪詢(RR)或加權(quán)輪詢(WRR)兩種策略。RR(默認(rèn)取值):按照訪問順序依次將外部請求依序分發(fā)到后端服務(wù)器;WRR:權(quán)重值越高的后端服務(wù)器,被輪詢到的次數(shù)(概率)也越高。 |
訪問控制 | 提供監(jiān)聽級別的訪問控制。詳細(xì)信息,請參見訪問控制。 |
健康檢查 | 支持TCP和HTTP協(xié)議。開啟健康檢查后,您可以通過健康檢查來判斷后端服務(wù)器的業(yè)務(wù)可用性。健康檢查原理,請參見負(fù)載均衡健康檢查工作原理。 |
其他 | 您還可以通過Annotation配置傳統(tǒng)型負(fù)載均衡。詳細(xì)信息,請參見通過Annotation配置傳統(tǒng)型負(fù)載均衡CLB。 |
網(wǎng)絡(luò)型負(fù)載均衡NLB
新建NLB資源
新建網(wǎng)絡(luò)型負(fù)載均衡NLB(Network Load Balancer ),您可以根據(jù)新建NLB資源描述進(jìn)行創(chuàng)建。更多信息,請參見創(chuàng)建和管理NLB實(shí)例。
名稱 | 描述 |
名稱 | 自定義NLB的名稱。僅新建NLB需要配置。 |
訪問方式 | 根據(jù)需要可選擇公網(wǎng)訪問和私網(wǎng)訪問。 |
計(jì)費(fèi)方式 | 按量計(jì)費(fèi)。更多信息,請參見NLB產(chǎn)品計(jì)費(fèi)。 |
IP版本 | 根據(jù)需要可選擇IPv4和雙棧。 |
調(diào)度算法 | 選擇一種調(diào)度算法。
|
健康檢查 | 開啟或關(guān)閉健康檢查。
|
其他 | 您還可以通過Annotation配置網(wǎng)絡(luò)型負(fù)載均衡。詳細(xì)信息請參見通過Annotation配置網(wǎng)絡(luò)型負(fù)載均衡NLB。 |
專有網(wǎng)絡(luò) | 集群默認(rèn)專有網(wǎng)絡(luò)地域和VPC ID。 |
虛擬交換機(jī) | 您可以選擇集群默認(rèn)專有網(wǎng)絡(luò)下,已支持的可用區(qū)對應(yīng)的虛擬交換機(jī),還可以單擊創(chuàng)建虛擬交換機(jī)選擇新建。 |
使用已有資源
您可以從下拉菜單中選擇已有的NLB(Network Load Balancer)實(shí)例進(jìn)行復(fù)用。還可以根據(jù)需要是否勾選強(qiáng)制覆蓋已有監(jiān)聽,詳細(xì)信息請參見使用已有的負(fù)載均衡。
復(fù)用NLB實(shí)例存在一些限制,以及相關(guān)的注意事項(xiàng),詳細(xì)信息請參見哪些負(fù)載均衡可以被復(fù)用?
配置相關(guān)資源
名稱 | 描述 |
調(diào)度算法 | 選擇一種調(diào)度算法。
|
健康檢查 | 開啟或關(guān)閉健康檢查。
|
其他 | 您還可以通過Annotation配置網(wǎng)絡(luò)型負(fù)載均衡。詳細(xì)信息請參見通過Annotation配置網(wǎng)絡(luò)型負(fù)載均衡NLB。 |
專有網(wǎng)絡(luò) | 集群默認(rèn)專有網(wǎng)絡(luò)地域和VPC ID。 |
虛擬交換機(jī) | 您可以選擇集群默認(rèn)專有網(wǎng)絡(luò)下,已支持的可用區(qū)對應(yīng)的虛擬交換機(jī),還可以單擊創(chuàng)建虛擬交換機(jī)選擇新建。 |
后續(xù)操作
如果您有查看、更新、刪除Service的需求,例如需要修改Service所關(guān)聯(lián)的公網(wǎng)負(fù)載均衡,可通過如下操作實(shí)現(xiàn)。
控制臺操作指導(dǎo)
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在服務(wù)頁面,單擊目標(biāo)服務(wù)操作列的更新或刪除,對Service進(jìn)行查看、更新、刪除操作。
kubectl操作指導(dǎo)
更新Service
方式1:執(zhí)行以下命令,更新Service。
kubectl edit service my-nginx-svc
方式2:手動刪除舊的Service,修改YAML文件后,重新創(chuàng)建Service。
kubectl apply -f my-nginx-svc.yaml
查看Service
執(zhí)行以下命令,查看Service。
kubectl get service my-nginx-svc
預(yù)期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-svc LoadBalancer 172.21.XX.XX 192.168.XX.XX 80:31599/TCP 5m
刪除Service
執(zhí)行以下命令,刪除Service。
kubectl delete service my-nginx-svc