在标准版和云边协同版集群中,均支持通过设置服务(Service)的 spec.type=LoadBalancer
,来配置负载均衡器暴露应用。
在云边协同版集群中,边缘节点池的节点和云端节点存在跨地域,跨VPC的可能。在云边协同版中,会默认为 LoadBalancer
类型 Service
在云端创建SLB负载均衡器,当云边节点跨VPC时,这种负载均衡器将无法服务于边缘应用。
为了解决上述问题,ECK云边协同版本支持为边缘应用配置边缘负载均衡。
边缘负载均衡实现原理
SLB负载均衡器实例需绑定VPC使用,且只允许关联同VPC下的服务器组(在ECK云边协同版中,同一边缘节点池中的节点同属一个VPC )。ECK云边协同版支持通过 Service
上的 annotation
配置,指定 LoadBalancer
类型 Service
所属的节点池,从而指定SLB负载均衡器所绑定的VPC。
集群中的CCM(cloud-controller-manager)组件能够识别对应配置,为对应 Service
在指定的节点池上开通SLB负载均衡器,暴露节点池上的服务。
在上图示例中:
- 节点1,节点2和节点3,节点4分别属于两个边缘节点池nodepoolA和nodepoolB。
- 用户通过创建两个
LoadBalancer
类型的Service
,并通过service.beta.kubernetes.io/eck-edge-load-balancer-desired-nodepool annotation配置来指定该Service
所属的节点池。 - CCM组件基于该
Service
的配置,分别在两个节点池中创建各自的SLB负载均衡器,暴露应用。
创建边缘负载均衡服务示例
本示例将向您展示如何创建边缘负载服务。
注意 本示例会创建公网IP以及负载均衡器,产生一定的费用。
前置准备
运行本示例需要一个至少有2个节点池的ECK云边协同版本集群。如果您还没有集群,请参见【创建专有版集群】指引,创建云边协同版集群。
如果集群的kube-proxy配置的是ipvs模式,需要修改对应节点池中所有节点的yurthub配置,在启动命令中添加: --disabled-resource-filters=discardcloudservice 配置。
修改方式如下:
修改节点上的 /etc/kubernetes/manifests/yurt-hub.yaml
文件,增加 --disabled-resource-filters=discardcloudservice 配置。
注意
节点上的kubelet, coredns, kube-proxy, flannel组件通过yurthub代理与云端APIServer连接, 修改该配置会重启yurthub组件,导致连接闪断。
方式一:通过控制台创建边缘负载均衡
您可以通过设置 LoadBalancer
类型 Service
的 annotation配置
service.beta.kubernetes.io/eck-edge-load-balancer-desired-nodepool
等于对应的节点池ID,来指定负载均衡器对应的节点池。
您可以通过节点池详情页面查询节点池ID:
方式二:通过命令行方式创建边缘负载均衡
新建一个使用边缘负载均衡暴露服务的Service的YAML样例如下:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/eck-edge-load-balancer-desired-nodepool: c78b61a1-32f0-411f-b2c6-41e3212bc3f8
name: test-edge-loadbalancer
namespace: default
spec:
ports:
- name: http
port: 8089
protocol: TCP
targetPort: 80
selector:
app: nginx-test
注解说明
通过在原生的Service上添加Annotation配置边缘负载均衡,相关参数如下所示。
annotation Key | annotation Value | 说明 |
---|---|---|
service.beta.kubernetes.io/eck-edge-load-balancer-desired-nodepool | kubernetes.io/hostname节点池ID | 当Service类型为LoadBalancer,且集群为云边协同版本时生效。表示在对应节点池上创建负载均衡器暴露Service。 |
- | - | Service不做任何拓扑限制。当Service类型为LoadBalancer,且集群为云边协同版本时,表示在云端节点池创建负载均衡器暴露Service。 |