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
地址。