当您没有可用的负载均衡时,cloud-controller-manager(CCM)组件自动为LoadBalancer类型的服务创建并管理负载均衡,该实例类型包含:传统型负载均衡CLB(Classic Load Balancer)和网络型负载均衡NLB(Network Load Balancer)。本文以Nginx应用为例,介绍如何通过使用自动创建负载均衡的服务来公开应用。
注意事项
CCM管理负载均衡时注意事项
CCM只为
Type=LoadBalancer
类型的Service配置负载均衡,对于非LoadBalancer类型的Service则不会为其配置负载均衡。CCM使用声明式API,会在一定条件下自动根据Service的配置刷新负载均衡配置。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners:
设置为"true"
时,您自行在负载均衡控制台上修改的配置均存在被覆盖的风险。
当Type=LoadBalancer
的Service变更为Type!=LoadBalancer
时,CCM会删除为该负载均衡添加的配置,从而造成无法通过该负载均衡访问Service。
请勿在负载均衡控制台上手动修改ACK创建并维护的负载均衡的任何配置,否则有配置丢失的风险,造成Service不可访问。
负载均衡
步骤一:部署示例应用
本文以Nginx无状态应用为例,指导您如何在ACK中通过负载均衡类型的Service暴露应用。
控制台操作指导
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面,单击使用镜像创建,配置应用的基本信息、容器配置、高级配置等。
在应用基本信息页签中,配置应用名称,本示例为my-nginx,其他参数保持默认值,然后单击下一步。
在容器配置页签中,设置容器镜像名称、端口,其他参数保持默认值,然后单击下一步。
配置项
取值
镜像名称
单击选择镜像,在选择镜像及版本对话框单击制品中心页签,然后搜索
nginx
,选择名称为openanolis/nginx的镜像仓库,单击选择镜像版本,设置镜像的版本,完成后单击确定。端口
名称:nginx。
容器端口:80。
在高级配置页签中,保持默认,单击创建,完成Nginx应用的创建。
kubectl操作指导
使用以下示例应用的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: 2 # 设置副本数量。 selector: matchLabels: app: nginx # 对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。 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 # 需要在服务中暴露该端口。
执行以下命令,部署示例应用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
步骤二:通过使用自动创建负载均衡的服务公开应用
您可以通过控制台和kubectl两种方式来创建LoadBalancer类型的服务,并通过其公开应用。
控制台操作指导
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在服务页面,单击创建,在创建服务对话框中设置服务相关的参数。
配置项
描述
示例
服务名称
输入Service(服务)的名称。
my-nginx-svc
服务类型
选择Service类型,Service网络支持以下模式,分别对接不同来源和类型的客户端的访问,包括:
选择负载均衡的服务类型。
单击新建CLB,选择公网访问,本示例使用默认规格(slb.s1.small)。
外部流量策略
您的服务类型为节点端口或负载均衡时,才能设置外部流量策略。关于外部流量策略的详细介绍,请参见Service快速入门。
Local:流量只发给本节点的Pod。
Cluster:流量可以转发到集群中其他节点上的Pod。
Local
服务关联
选择服务要绑定的后端应用。若不进行关联部署,则不会创建相关的Endpoints对象。关于服务关联的详细介绍,请参见services-without-selectors。
名称:app
值:my-nginx
端口映射
添加服务端口(对应Service YAML文件中的
port
)和容器端口(对应Service YAML文件中的targetPort
),容器端口需要与后端的Pod中暴露的容器端口一致。80
注解
为该服务添加一个注解(Annotation),配置负载均衡的参数。更多参数,请参见通过Annotation配置传统型负载均衡CLB和通过Annotation配置网络型负载均衡NLB。
无
标签
为该服务添加一个标签,标识该服务。
无
配置参数完,单击确定。
在服务页面,单击目标服务名称,进入服务详情页面,在基本信息区域,单击该服务的外部端点,例如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> # 请将<YOUR-External-IP>替换为上面获取到的EXTERNAL-IP地址。
预期输出:
<!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 href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
- 本页导读 (1)