当您没有可用的SLB时,Cloud Controller Manager(CCM)组件可以为LoadBalancer类型服务自动创建SLB,并对其进行管理。本文以Nginx应用为例,介绍如何通过使用自动创建SLB的服务来公开应用。
注意事项
-
CCM只为
Type=LoadBalancer
类型的服务配置SLB。对于非LoadBalancer类型的服务,则不会为其配置负载均衡。重要
当
Type=LoadBalancer
的服务变更为其他类型时,CCM会删除为该SLB添加的配置,从而造成无法通过该SLB访问服务。 - CCM使用声明式API,会在一定条件下自动根据服务的配置刷新SLB配置。您自行在SLB控制台上修改的配置均存在被覆盖的风险。重要 请勿在SLB控制台上手动修改Kubernetes创建并维护的SLB的任何配置,否则有配置丢失的风险,造成服务不可访问。
- 已创建的LoadBalancer类型Service不支持重新指定SLB。如果您需要更换SLB,请重新创建Service。
SLB配额限制
-
CCM会为
Type=LoadBalancer
类型的Service创建SLB。默认情况下一个用户可以保留60个SLB实例。如果需要创建的SLB数量大于60,请到配额平台提交申请。 -
CCM会根据Service的配置将ECS挂载到SLB后端服务器组中。
-
默认情况下一个ECS实例可挂载的后端服务器组的数量为50个,如果一台ECS需要挂载到更多的后端服务器组中,请到配额平台提交申请。
-
默认情况下一个SLB实例可以挂载200个后端服务器,如果需要挂载更多的后端服务器,请到配额平台提交申请。
-
-
CCM会根据Service中定义的端口创建SLB监听。默认情况下一个SLB实例可以添加50个监听,如需添加更多监听,请到配额平台提交申请。
-
更多SLB使用限制请参见使用限制。
负载均衡SLB配额查询请参见负载均衡SLB配额管理。
步骤一:部署示例应用
以下应用部署通过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
步骤二:通过使用自动创建SLB的服务公开应用
您可以通过控制台和kubectl两种方式来创建LoadBalancer类型的服务,并通过其公开应用。
控制台方式
-
登录容器服务管理控制台。
-
在控制台左侧导航栏,单击集群。
-
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
-
在集群管理页左侧导航栏,选择网络 > 服务。
- 在服务页面,单击右上角的创建。
- 在创建服务对话框中,设置服务的相关参数。
参数 描述 名称 输入服务的名称。
类型 选择服务类型,即服务访问的方式。依次选择:负载均衡 -> 公网访问 -> 新建SLB -> 单击修改选择所需的SLB规格。本示例使用默认规格:简约型I(slb.s1.small)。 关联 选择关联该服务要绑定的后端应用。若不进行关联部署,则不会创建相关的Endpoints对象,您也可自己进行绑定,请参见services-without-selectors。
外部流量策略 设置外部流量策略。
-
Local:流量只发给本机的Pod。
-
Cluster:流量可以转发到集群中其他节点上的Pod。
说明
您的服务类型为节点端口或负载均衡时,才能设置外部流量策略。
端口映射 添加服务端口(对应Service YAML文件中的
port
)和容器端口(对应Service YAML文件中的targetPort
),容器端口需要与后端的Pod中暴露的容器端口一致。注解 为该服务添加一个注解(Annotation),配置负载均衡的参数。您可以选择自定义注解或阿里云注解。更多注解请参见通过Annotation配置传统型负载均衡CLB。
标签 为该服务添加一个标签,标识该服务。
-
-
单击创建。
在服务页面,可以看到新创建的服务。
-
单击该服务在外部端点列的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: nginx 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
- 通过使用已有SLB的服务公开应用
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/168863.html