CLB支持在ACK集群中使用,通過LoadBalancer類型Service暴露應用。當您沒有可用的CLB實例時,Cloud Controller Manager(CCM)組件可以為LoadBalancer類型服務自動創建CLB,并對其進行管理。本文以Nginx應用為例,介紹如何通過使用自動創建CLB的服務來公開應用。
注意事項
CCM只為
Type=LoadBalancer
類型的服務配置CLB。對于非LoadBalancer類型的服務,則不會為其配置負載均衡。重要當
Type=LoadBalancer
的服務變更為其他類型時,CCM會刪除為該CLB添加的配置,從而造成無法通過該CLB訪問服務。CCM使用聲明式API,會在一定條件下自動根據服務的配置刷新CLB配置。當
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners:
設置為true
時,您自行在CLB控制臺上修改的配置均存在被覆蓋的風險。重要請勿在CLB控制臺上手動修改Kubernetes創建并維護的CLB的任何配置,否則有配置丟失的風險,造成服務不可訪問。
已創建的LoadBalancer類型Service不支持重新指定CLB。如果您需要更換CLB,請重新創建Service。
CLB配額限制
步驟一:部署示例應用
以下應用部署通過kubectl命令行方式進行。如果您需要通過控制臺部署應用,請參見創建無狀態工作負載Deployment。
使用以下示例應用的YAML內容,創建名為my-nginx.yaml文件。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: my-nginx #示例應用的名稱。 labels: app: nginx spec: replicas: 3 #設置副本數量。 selector: matchLabels: app: nginx #對應服務中Selector的值需要與其一致,才可以通過服務公開此應用。 template: metadata: labels: app: nginx spec: # nodeSelector: # env: test-team containers: - name: nginx image: registry.aliyuncs.com/acs/netdia:latest #替換為您實際的鏡像地址,格式為:<image_name:tags>。 ports: - containerPort: 80 #需要在服務中暴露該端口。
執行以下命令,部署示例應用my-nginx。
kubectl apply -f my-nginx.yaml
執行以下命令,確認示例應用狀態正常。
kubectl get deployment my-nginx
返回結果示例:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 3/3 3 3 50s
步驟二:通過使用自動創建CLB的服務公開應用
您可以通過控制臺和kubectl兩種方式來創建LoadBalancer類型的服務,并通過其公開應用。
控制臺方式
登錄容器服務管理控制臺。
在控制臺左側導航欄,單擊集群。
在集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情。
在集群管理頁左側導航欄,選擇 。
在服務頁面,單擊右上角的創建。
在創建服務對話框中,設置服務的相關參數。
參數
描述
服務名稱
輸入服務的名稱。
服務類型
選擇服務類型,即服務訪問的方式。依次選擇:負載均衡 -> 新建SLB -> 公網訪問。可以選擇按規格計費或者按量付費,本文示例選擇按量付費。
外部流量策略
設置外部流量策略。
Local:流量只發給本機的Pod。
Cluster:流量可以轉發到集群中其他節點上的Pod。
說明服務類型為節點端口或負載均衡時,才能設置外部流量策略。
服務關聯
選擇關聯該服務要綁定的后端應用。
端口映射
添加服務端口(對應Service YAML文件中的
port
)和容器端口(對應Service YAML文件中的targetPort
),容器端口需要與后端的Pod中暴露的容器端口一致。注解
為該服務添加一個注解(Annotation),配置負載均衡的參數。
標簽
為該服務添加一個標簽,標識該服務。
單擊創建。
在服務頁面,可以看到新創建的服務。
在服務頁面,單擊目標服務名稱,進入服務詳情頁面,在基本信息區域,單擊該服務的外部端點,例如39.106.XX.XX:80,訪問示例應用。
Kubectl方式
使用以下示例服務的YAML內容,創建名為my-nginx-svc.yaml的文件。
將selector修改為my-nginx.yaml示例應用文件中matchLabels的值(本示例為
app: nginx
),從而將該服務關聯至后端應用。apiVersion: v1 kind: Service metadata: labels: app: nignx name: my-nginx-svc namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
執行以下命令創建名為my-nginx-svc的服務,并通過其公開應用。
kubectl apply -f my-nginx-svc.yaml
執行以下命令確認LoadBalancer類型的服務創建成功。
kubectl get svc my-nginx-svc
返回結果示例:
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
執行curl <YOUR-External-IP>命令訪問示例應用,請將
YOUR-External-IP
替換為上面獲取到的EXTERNAL-IP
地址。