大部分的配置都是基于需要使用LB插件对应Service的
Annotation
,简单来讲,Annotation
记录了关于当前服务的额外配置信息,参考https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/了解如何使用
-
ServiceAnnotationLoadBalancerType
:在Service的annotations
中添加此Key,表示使用yunify负载均衡器,不添加此Key的Service在Event中会有错误。其值范围和create_loadbalancer中的type相同。 -
青云负载均衡器支持http/s协议的负载均衡,如果想要使用青云负载均衡器更多的功能,请将服务的特定的端口name写为
http
或https
,如下:
kind: Service
apiVersion: v1
metadata:
name: mylbapp
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http #这里指定port name,如果有多个http端口,都可以指定为http
port: 8088
targetPort: 80
将ServicePort命名为http之后,就可以在青云控制台上查看http监控。更多的功能支持诸如转发规则定义
、透明代理
等功能还在开发中
使用青云负载均衡器时需要配合一个公网ip,cloud-controller带有IP管理功能。
这是本插件的默认方式,即用户需要在Service中添加公网ip的annotation。首先在Service annotation中添加如下key: service.beta.kubernetes.io/qingcloud-load-balancer-eip-source
,并设置其值为mannual
。如果不设置此Key,默认是mannual
。然后必须继续添加service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids
的key,其值公网IP的ID,如果需要绑定多个IP,以逗号分隔。请确保此IP处于可用状态。如下:
kind: Service
apiVersion: v1
metadata:
name: mylbapp
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: "eip-xxxxx" #这里设置EIP
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8088
targetPort: 80
自动获取ip有三种方式,分别是:
- 自动获取当前账户下处于可用的EIP,如果找不到返回错误。
- 自动获取当前账户下处于可用的EIP,如果找不到则申请一个新的
- 不管账户下有没有可用的EIP,申请一个新EIP
如果开启EIP的自动获取的功能,需满足两个条件:
- 集群的配置文件中
/etc/kubernetes/qingcloud.conf
配置userID
,是因为一些用户API权限较大,会获取到其他用户的IP。 - 配置Service Annotations中的
service.beta.kubernetes.io/qingcloud-load-balancer-eip-source
不为mannual
,上述三种方式对应的值分别为:use-available
auto
allocate
参考下面样例:
kind: Service
apiVersion: v1
metadata:
name: mylbapp
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-source: "auto" #也可以填use-available,allocate
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8088
targetPort: 80
由于公网IP是稀缺资源,我们提供了多个Service共享一个EIP的模式。使用这个模式有一定限制:
- EIP被设置为多个Service共享模式之后,所有手动指定这个EIP且不设置共享的Service将无法正确获取LB
- 多个Service对外暴露的端口不能冲突,例如不能有两个Service同时暴露8080端口,这种情况下,我们建议将其中一个改为8081
- 一个EIP最多能被十个端口共享,即如果一个Service只需要对外暴露一个端口的话,那么可以最多有10个Service共享这个EIP
service.beta.kubernetes.io/qingcloud-load-balancer-eip-source
必须为manual
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids
中填入共享的EIP IDservice.beta.kubernetes.io/qingcloud-load-balancer-eip-strategy
设置为reuse
参考下面的例子,下面两个service共有了一个EIP
kind: Service
apiVersion: v1
metadata:
name: reuse-eip1
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: "eip-xxxxxx"
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
service.beta.kubernetes.io/qingcloud-load-balancer-eip-strategy: "reuse"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8089
targetPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: reuse-eip2
annotations:
service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids: "eip-xxxxxx"
service.beta.kubernetes.io/qingcloud-load-balancer-type: "0"
service.beta.kubernetes.io/qingcloud-load-balancer-eip-strategy: "reuse"
spec:
selector:
app: mylbapp
type: LoadBalancer
ports:
- name: http
port: 8090
targetPort: 80