负载均衡( LoadBalancer )可以通过弹性负载均衡从公网访问到工作负载,与弹性IP方式相比提供了高可靠的保障,一般用于系统中需要暴露到公网的服务。
负载均衡访问方式由公网弹性负载均衡ELB服务地址以及设置的访问端口组成,例如“10.117.117.117:80”。
可以在创建工作负载时通过CCE控制台设置Service访问方式,本节以nginx为例进行说明。
负载均衡配置:
根据业务需求选择“公网”或“私网”,详情请参见公网和私网负载均衡器。
如果帐号下无共享型负载均衡,请通过新建共享型弹性负载均衡创建,完成后单击刷新按钮。
您可以在工作负载创建完成后对Service进行配置,此配置对工作负载状态无影响,且实时生效。具体操作如下:
负载均衡配置:
根据业务需求选择“公网”或“私网”,详情请参见公网和私网负载均衡器。
如果帐号下无共享型负载均衡,请通过新建共享型弹性负载均衡创建,完成后单击刷新按钮。
您可以在添加完Service后,更新此Service的端口配置。操作如下:
负载均衡配置:
您可以在创建工作负载时通过kubectl命令行设置Service访问方式。本节以nginx为例,说明kubectl命令实现负载均衡 ( LoadBalancer )访问的方法。
前提条件
请参见通过kubectl或web-terminal插件操作CCE集群配置kubectl命令,使弹性云服务器连接集群。
操作步骤
其中,nginx-deployment.yaml和nginx-elb-svc.yaml为自定义名称,您可以随意命名。
vi nginx-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret
vi nginx-elb-svc.yaml
若需要开启会话保持,需要满足如下条件:
apiVersion: v1 kind: Service metadata: annotations: kubernetes.io/elb.class: union kubernetes.io/session-affinity-mode: SOURCE_IP kubernetes.io/elb.id: 3c7caa5a-a641-4bff-801a-feace27424b6 kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 labels: app: nginx name: nginx spec: loadBalancerIP: 10.78.42.242 externalTrafficPolicy: Local ports: - name: service0 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
参数 |
是否必填 |
参数类型 |
描述 |
---|---|---|---|
kubernetes.io/elb.class |
否 |
String |
请根据不同的应用场景和功能需求选择合适的负载均衡器类型。 取值如下:
默认值:union |
kubernetes.io/session-affinity-mode |
否 |
String |
负载均衡监听是基于IP地址的会话保持,即来自同一IP地址的访问请求转发到同一台后端服务器上。
|
kubernetes.io/elb.session-affinity-option |
否 |
表2 Object |
ELB会话保持配置选项,可设置会话保持的超时时间。 |
kubernetes.io/elb.id |
是 |
String |
为共享型负载均衡实例的ID,取值范围:1-100字符。 在关联已有ELB时:必填。 获取方法: 在控制台的“服务列表”中,单击“网络 > 弹性负载均衡 ELB”,单击ELB的名称,在ELB详情页的“基本信息”页签下找到“ID”字段复制即可。 |
kubernetes.io/elb.subnet-id |
- |
String |
为集群所在子网的ID,取值范围:1-100字符。
|
kubernetes.io/elb.eip-id |
- |
String |
为弹性公网IP地址的ID,取值范围:1-100字符。 非自动创建elb时:可选。 获取方法: 在控制台的“服务列表”中,单击“网络 > 弹性公网IP EIP”,单击EIP的名称,在EIP详情页的“基本信息”中找到“ID”字段复制即可。 |
kubernetes.io/elb.enterpriseID |
否 |
String |
v1.15及以上版本的集群支持此字段,v1.15以下版本默认创建到default项目下。 为ELB企业项目ID,选择后可以直接创建在具体的ELB企业项目下。 取值范围:1-100字符。 获取方法: 登录华为云控制台后,单击顶部菜单右侧的“企业 > 项目管理”,在打开的企业项目列表中单击要加入的企业项目名称,进入企业项目详情页,找到“ID”字段复制即可。 |
kubernetes.io/elb.lb-algorithm |
否 |
String |
默认值:“ROUND_ROBIN”,为后端云服务器组的负载均衡算法。 取值范围:
当该字段的取值为SOURCE_IP时,后端云服务器组绑定的后端云服务器的weight字段无效。 |
kubernetes.io/elb.health-check-flag |
否 |
String |
默认开启,为是否开启ELB健康检查功能。
|
kubernetes.io/elb.health-check-option |
否 |
表3 Object |
ELB健康检查配置选项。 |
kubernetes.io/hws-hostNetwork |
否 |
String |
为标记工作负载服务是否使用主机网络模式。 默认是未使用主机网络,取值范围:“true”或者“false” |
loadBalancerIP |
否 |
String |
配置为ELB的IP地址,私网ELB配置私有IP,公网ELB配置为公网IP。 |
externalTrafficPolicy |
否 |
String |
若需要开启会话保持,需增加该参数,表示请求转到固定节点;若某个服务发布成ELB服务且为Local模式,客户端如果在集群内,那么必须与服务端在同一个节点上才能正常访问。 |
port |
是 |
Integer |
集群虚拟IP的访问端口,也是注册到负载均衡上的端口。 |
targetPort |
是 |
String |
对应界面上的容器端口。 |
参数 |
是否必填 |
参数类型 |
描述 |
---|---|---|---|
persistence_timeout |
是 |
String |
当elb.session-affinity-mode是“SOURCE_IP”时生效,设置会话保持的超时时间(秒)。 默认值为:60,取值范围:1-60。 |
参数 |
是否必填 |
参数类型 |
描述 |
---|---|---|---|
delay |
否 |
String |
开始健康检查的初始等待时间(秒) 默认值:5,取值范围:1-50 |
timeout |
否 |
String |
健康检查的超时时间(秒) 默认值:10,取值范围1-50 |
max_retries |
否 |
String |
健康检查的最大重试次数 默认值:3,取值范围1-10 |
protocol |
否 |
String |
健康检查的协议 默认值:取关联服务的协议 取值范围:“TCP”、“UDP_CONNECT”或者“HTTP” |
path |
否 |
String |
健康检查的URL,协议是“HTTP”时配置 默认值:“/” 取值范围:1-10000字符 |
kubectl create -f nginx-deployment.yaml
回显如下,表示工作负载已开始创建。
deployment "nginx" created
kubectl get pod
回显如下,工作负载状态为Running状态,表示工作负载已运行中。
NAME READY STATUS RESTARTS AGE etcd-0 0/1 ImagePullBackOff 0 1h icagent-m9dkt 0/0 Running 0 3d nginx-2601814895-c1xhw 1/1 Running 0 6s
kubectl create -f nginx-elb-svc.yaml
回显如下,表示服务已创建。
service "nginx" created
kubectl get svc
回显如下,表示工作负载访问方式已设置成功,工作负载可访问。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE etcd-svc ClusterIP None <none> 3120/TCP 1h kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3d nginx LoadBalancer 10.247.130.196 10.78.42.242 80:31540/TCP 51s
可成功访问nginx。
您可以在创建工作负载时通过kubectl命令行设置Service访问方式。本节以nginx为例,说明kubectl命令实现负载均衡 ( LoadBalancer )访问的方法。
前提条件
请参见通过kubectl或web-terminal插件操作CCE集群配置kubectl命令,使弹性云服务器连接集群。
操作步骤
其中,nginx-deployment.yaml和nginx-elb-svc.yaml为自定义名称,您可以随意命名。
vi nginx-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx imagePullPolicy: Always name: nginx imagePullSecrets: - name: default-secret
vi nginx-elb-svc.yaml
若需要开启会话保持,需要满足如下条件:
apiVersion: v1 kind: Service metadata: annotations: kubernetes.io/elb.class: union kubernetes.io/session-affinity-mode: SOURCE_IP kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0 kubernetes.io/elb.enterpriseID: debb7ae2-6d2f-4e6c-a0aa-1ccafd92b8eb kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"cce-bandwidth-1551163379627","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}' labels: app: nginx name: nginx spec: externalTrafficPolicy: Local ports: - name: service0 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: LoadBalancer
参数 |
是否必填 |
参数类型 |
描述 |
---|---|---|---|
kubernetes.io/elb.autocreate |
是 |
elb.autocreate object |
自动创建service关联的ELB 示例: |
参数 |
是否必填 |
参数类型 |
描述 |
---|---|---|---|
name |
否 |
String |
自动创建的负载均衡的名称。 取值范围:1-64个字符,小写字母,数字,下划线,小写字母开头,小写字母或者数字结尾。 默认名称:cce-lb+service.UID |
type |
否 |
String |
负载均衡实例网络类型,公网或者私网。
默认类型:inner |
bandwidth_name |
是 |
String |
带宽的名称,默认值为:cce-bandwidth-******。 取值范围:1-64个字符,小写字母,数字,下划线,小写字母开头,小写字母或者数字结尾。 |
bandwidth_chargemode |
是 |
String |
带宽付费模式。
|
bandwidth_size |
是 |
Integer |
带宽大小,请根据Region带宽支持范围设置,具体请参见申请弹性公网IP中表4 bandwidth字段说明中size字段。 |
bandwidth_sharetype |
是 |
String |
带宽共享方式。
|
eip_type |
是 |
String |
弹性公网IP类型,请参考ELB支持的弹性公网IP类型,具体请参见申请弹性公网IP中表3 publicip字段说明type字段。 |
kubectl create -f nginx-deployment.yaml
回显如下,表示工作负载已开始创建。
deployment "nginx" created
kubectl get po
回显如下,工作负载状态为Running状态,表示工作负载已运行中。
NAME READY STATUS RESTARTS AGE etcd-0 0/1 ImagePullBackOff 0 1h icagent-m9dkt 0/0 Running 0 3d nginx-2601814895-c1xhw 1/1 Running 0 6s
kubectl create -f nginx-elb-svc.yaml
回显如下,表示服务已创建。
service "nginx" created
kubectl get svc
回显如下,表示工作负载访问方式已设置成功,工作负载可访问。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE etcd-svc ClusterIP None <none> 3120/TCP 1h kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3d nginx LoadBalancer 10.247.130.196 10.78.42.242 80:31540/TCP 51s
可成功访问nginx。
吴雪军(东锤) 一、2020数据已经成为生产要素 数据中台为什么成为企业增长的刚需...
本文转载自微信公众号「大数据DT」,作者高聪 王忠民 等 。转载本文请联系大数据...
依然是Hadoop组件的讲解,今天说到HBase 架构,都是一字一句打出来的,希望各位...
1. 接口描述 接口请求域名: lighthouse.tencentcloudapi.com 。 本接口 (Create...
作者:阿里波特 来源:阿里云研究公众号 基于阿里云在行业的相关实践,以及对商...
服务器租用 是指用户无须自己购买服务器,只需根据自己业务的需要,提出对硬件配...
用云服务器托管一个小型网站,有哪些日常运维建议? 维护网站应用时,您可以参考...
一、 《阿里巴巴大数据及AI实战》 在阿里云提供的统一技术平台上 阿里巴巴的各个...
TOP云 (west.cn)9月23日消息,今年以来,已有多个三字母 .com域名 遭遇仲裁案...
组织如今面临着越来越多的挑战,需要在多个云平台管理数据,为此需要了解要在多...