一、 变更原因
1、 前向兼容:兼容最新版ULB API,新增了ListenType、IPVersion、ShareBandWidth等字段。原Vserver中的ListenType字段基本废弃,或者说必须与ULB的ListenType字段一致。
2、需求迭代:1)请求代理模式下,支持tcp协议;2)支持内网ULB7;3)外网ULB7支持防火墙;4) 支持指定VPC和子网;
二、 当前业务逻辑
当前Service Controller支持并可处理的参数如下:
service.beta.kubernetes.io/ucloud-load-balancer-type
# 代表ULB网络类型,outer为外网,inner为内网;outer为默认值,此处可省略。
service.beta.kubernetes.io/ucloud-load-balancer-subnet-id
# 创建ULB时指定的子网,不填写使用VPC默认子网
-----------------我是分割线,以下参数为Vserver参数----------------------
service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol
# 协议类型,tcp和udp均表示ULB4,https和http均表示ULB7,部分情况下默认值为tcp
service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-cert
# ssl证书id
service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-port
# 开启ssl协议的端口,多个用","分隔开,必须和ssl-cert同时指定
service.beta.kubernetes.io/ucloud-load-balancer-vserver-method
# VServer负载均衡模式
service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-type
## VServer会话保持方式
service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-info
## 用户自定义String,会话保持方式为userdefined有效
service.beta.kubernetes.io/ucloud-load-balancer-vserver-client-timeout
## 空闲连接的回收时间
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-type
## 健康检查类型,枚举值为
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-domain
## HTTP检查域名
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-path
## HTTP检查路径
-----------------我是分割线,以下参数仅ULB类型为外网时生效----------------------
service.beta.kubernetes.io/ucloud-load-balancer-eip-paymode
# 支持traffic、bandwidth、sharebandwidth,默认为bandwidth
service.beta.kubernetes.io/ucloud-load-balancer-eip-sharebandwidthid
# 共享带宽id
service.beta.kubernetes.io/ucloud-load-balancer-eip-bandwidth
# 共享带宽模式下无需指定,或者配置为0,bandwidth下默认为2Mbps
service.beta.kubernetes.io/ucloud-load-balancer-eip-chargetype
# 付费模式,支持month,year,dynamic
service.beta.kubernetes.io/ucloud-load-balancer-eip-quantity
# 付费时长,默认为1,chargetype为dynamic时无需填写。
ServiceController当前是不需要用户传ListenType字段的,而是根据Vserver_Protocol的值来判断创建何种类型的Vserver。即: 如果service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol为tcp或者udp,则vserver的ListenType为报文转发,否则为请求代理。——这个设定导致请求代理模式下的TCP协议不被支持。(待优化问题1)
另外由于ULB的逻辑变更(ULB API现在将监听器类型从CreateVserver前置到CreateULB阶段),目前的ServiceController在“指定ULB”的处理中,不会判断ULB的类型为报文转发还是请求代理.——-service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol的协议不被ULB所支持,则会报错。(待优化问题2)
目前针对非“指定ULB”的场景,如果创建出来的是外网请求代理模式的ULB,未支持指定防火墙。(待优化问题3)
三、变更后业务逻辑
变更目标:
1、新的业务逻辑需要确保前向兼容,即用户更新Service Controller后,不会导致Service对应的ULB被删除或者不符合预期更新。
2、支持“指定ULB”的前置检查;
3、兼容ULB的新参数;
ServiceController应处理的字段如下:
service.beta.kubernetes.io/ucloud-load-balancer-type
# 代表ULB网络类型,outer为外网,inner为内网;outer为默认值,此处可省略。
service.beta.kubernetes.io/ucloud-load-balancer-subnet-id
# 创建ULB时指定的子网,不填写使用VPC默认子网
-----------------我是分割线,以下参数为Vserver参数----------------------
service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol
# 协议类型,tcp和udp均表示ULB4,https和http均表示ULB7,部分情况下默认值为tcp
service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-cert
# ssl证书id
service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-port
# 开启ssl协议的端口,多个用","分隔开,必须和ssl-cert同时指定
service.beta.kubernetes.io/ucloud-load-balancer-vserver-method
# VServer负载均衡模式
service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-type
## VServer会话保持方式
service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-info
## 用户自定义String,会话保持方式为userdefined有效
service.beta.kubernetes.io/ucloud-load-balancer-vserver-client-timeout
## 空闲连接的回收时间
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-type
## 健康检查类型,枚举值为
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-domain
## HTTP检查域名
service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-path
## HTTP检查路径
-----------------我是分割线,以下参数仅ULB类型为外网时生效----------------------
service.beta.kubernetes.io/ucloud-load-balancer-eip-paymode
# 支持traffic、bandwidth、sharebandwidth,默认为bandwidth
service.beta.kubernetes.io/ucloud-load-balancer-eip-sharebandwidthid
# 共享带宽id
service.beta.kubernetes.io/ucloud-load-balancer-eip-bandwidth
# 共享带宽模式下无需指定,或者配置为0,bandwidth下默认为2Mbps
service.beta.kubernetes.io/ucloud-load-balancer-eip-chargetype
# 付费模式,支持month,year,dynamic
service.beta.kubernetes.io/ucloud-load-balancer-eip-quantity
# 付费时长,默认为1,chargetype为dynamic时无需填写。
-----------------我是分割线,我是新增字段----------------------
service.beta.kubernetes.io/ucloud-load-balancer-vserver-listentype
# 监听器类型,不指定时根据vserver-protocol插入值
service.beta.kubernetes.io/ucloud-load-balancer-firewallid
# 防火墙类型,当且仅当ULB为外网,且vserver-listentype为requestproxy时处理
service.beta.kubernetes.io/ucloud-load-balancer-vpc-id
# 创建ULB时指定的子网,一般情况下用户不需要填写。根据集群所在VPCID自动插入
service.beta.kubernetes.io/ucloud-load-balancer-business-id
# 创建ULB时指定的业务组
service.beta.kubernetes.io/ucloud-load-balancer-iswafon
# 是否开启waf,枚举值为yes or no(待定支持)
初次创建时业务逻辑: