通过阿里云传统型负载均衡CLB(Classic Load Balancer)暴露的服务(Service),在集群外可通过CLB域名或的方式访问服务,在集群内可通过
的方式访问服务。本文以Nginx应用为例,介绍如何通过使用已有CLB的服务来公开应用。
前提条件
已存在通过CLB控制台创建的CLB实例,且该实例与Kubernetes集群处于同一地域。如果没有创建,请参见创建和管理CLB实例。
背景信息
如果您集群的Cloud Controller Manager(CCM)组件版本大于等于v1.9.3,对于指定已有CLB,CCM默认不再为该CLB处理监听。您可以通过设置service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
参数来启用监听配置,或者手动配置该CLB的监听规则。
查看CCM版本的方法:
-
使用控制台:在集群组件管理页面查看CCM组件版本。
-
登录容器服务管理控制台。
-
在控制台左侧导航栏,单击集群。
-
在集群列表页面,在目标集群右侧,选择更多 > 运维管理 > 组件管理,进入组件管理页签查看CCM的版本信息。
-
-
使用kubectl命令行(仅适用于专有版集群):执行以下命令查看CCM组件版本。
kubectl get pod -n kube-system -o yaml|grep image:|grep cloud-con|uniq
注意事项
-
被复用的CLB需要满足以下限制条件:
-
支持复用通过CLB控制台创建的CLB,不支持复用CCM自动创建的CLB。
-
如果您需要在Kubernetes集群中复用私网类型的CLB,则该CLB需要和Kubernetes集群处于同一VPC下。
-
复用CLB的地址类型必须与服务的访问类型一致。当服务为公网访问(即
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"
)时,所用CLB的地址类型必须为公网;当服务为内部访问(即service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
)时,所用CLB的地址类型必须为私网。 -
多个服务不能同时使用一个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配额限制
-
CCM会为
Type=LoadBalancer
类型的Service创建CLB。默认情况下一个用户可以保有60个CLB实例。 -
CCM会根据Service中定义的端口创建CLB监听。默认情况下一个CLB实例可以添加50个监听。
-
CCM会根据Service的配置将ECS挂载到CLB后端服务器组中。
-
默认情况下一个ECS实例可挂载的后端服务器组的数量为50个。
-
默认情况下一个CLB实例可以挂载200个后端服务器。
说明
如需更大配额,您可以前往配额管理页面或配额中心,并根据控制台提示申请配额。
关于更多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 #替换为您实际的镜像地址,格式为:。 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类型的服务,并通过其公开应用。
控制台方式
-
登录容器服务管理控制台。
-
在控制台左侧导航栏,单击集群。
-
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
-
在集群管理页左侧导航栏,选择网络 > 服务。
-
在服务页面,单击右上角的创建。
-
在创建服务对话框中,设置服务的相关参数,然后单击创建。
参数
描述
示例
名称
输入服务的名称。
my-nginx-svc
类型
选择服务类型,即服务访问的方式。
强制覆盖已有监听:选择是否强制覆盖CLB上的已有监听或者为没有监听的CLB自动创建监听。
说明
-
如果已有负载均衡的监听上绑定了业务,强制覆盖可能会引发业务中断。
-
由于CCM目前支持的后端配置有限,无法处理一些复杂配置。如果有复杂的后端配置需求,可以在不覆盖监听的情况下,通过控制台自行配置监听。
如存在以上两种情况不建议强制覆盖监听;如果已有负载均衡的监听端口不再使用,则可以强制覆盖。
-
依次选择:负载均衡 > 公网访问 > 使用已有SLB > 需要使用的CLB实例。
-
本示例中的CLB实例为新创建,需要为其创建监听,因此选中强制覆盖已有监听。
关联
选择关联该服务要绑定的后端应用。若不进行关联部署,则不会创建相关的Endpoints对象,您也可自己进行绑定,请参见services-without-selectors。
my-nginx
外部流量策略
设置外部流量策略。
-
Local:流量只发给本机的Pod。
-
Cluster:流量可以转发到集群中其他节点上的Pod。
说明
您的服务类型为节点端口或负载均衡时,才能设置外部流量策略。
Local
端口映射
添加服务端口(对应Service YAML文件中的
port
)和容器端口(对应Service YAML文件中的targetPort
),容器端口需要与后端的Pod中暴露的容器端口一致。80
注解
为该服务添加一个注解(Annotation),配置负载均衡的参数。您可以选择自定义注解或阿里云注解。更多注解请参见通过Annotation配置传统型负载均衡CLB。
本示例中,将该服务的收费方式设置为按带宽收费,带宽峰值设置为2 Mbit/s,从而控制服务的流量。
-
类型:阿里云注解
-
名称:
-
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type
-
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth
-
-
值:
-
paybybandwidth
-
2
-
标签
为该服务添加一个标签,标识该服务。
无
在服务页面,可以看到新创建的服务。
-
-
单击该服务在外部端点列的39.106.XX.XX:80,访问示例应用。
Kubectl方式
-
使用以下示例服务的YAML内容,创建名为my-nginx-svc.yaml的文件。
-
修改
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id
,请替换${YOUR_LB_ID}为您通过负载均衡管理控制台创建的CLB实例ID。 -
使用已有的CLB实例时,默认情况下不会为该CLB创建监听或覆盖已有监听。如有需要,请设置
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners
为true
。本示例中,CLB实例为新创建,需要为其创建监听,因此设为true
。更多注解请参见通过Annotation配置传统型负载均衡CLB。 -
将selector修改为my-nginx.yaml示例应用文件中matchLabels的值(即:
app: nginx
),从而将该服务关联至后端应用。
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: 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替换为上面获取到的
EXTERNAL-IP
地址。curl 39.106.XX.XX
返回结果示例:
Welcome to nginx! body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; }Welcome to nginx!
If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.
For online documentation and support please refer tonginx.org.
Commercial support is available atnginx.com.Thank you for using nginx.
相关文档
-
通过Annotation配置传统型负载均衡CLB
-
通过使用自动创建CLB的服务公开应用
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/170273.html