一、 变更原因

1、 前向兼容:兼容最新版ULB API,新增了ListenType、IPVersion、ShareBandWidth等字段。原Vserver中的ListenType字段基本废弃,或者说必须与ULB的ListenType字段一致。

2、需求迭代:1)请求代理模式下,支持tcp协议;2)支持内网ULB7;3)外网ULB7支持防火墙;4) 支持指定VPC和子网;

二、 当前业务逻辑

当前Service Controller支持并可处理的参数如下:

  1. service.beta.kubernetes.io/ucloud-load-balancer-type
  2. # 代表ULB网络类型,outer为外网,inner为内网;outer为默认值,此处可省略。
  3. service.beta.kubernetes.io/ucloud-load-balancer-subnet-id
  4. # 创建ULB时指定的子网,不填写使用VPC默认子网
  5. -----------------我是分割线,以下参数为Vserver参数----------------------
  6. service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol
  7. # 协议类型,tcp和udp均表示ULB4,https和http均表示ULB7,部分情况下默认值为tcp
  8. service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-cert
  9. # ssl证书id
  10. service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-port
  11. # 开启ssl协议的端口,多个用","分隔开,必须和ssl-cert同时指定
  12. service.beta.kubernetes.io/ucloud-load-balancer-vserver-method
  13. # VServer负载均衡模式
  14. service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-type
  15. ## VServer会话保持方式
  16. service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-info
  17. ## 用户自定义String,会话保持方式为userdefined有效
  18. service.beta.kubernetes.io/ucloud-load-balancer-vserver-client-timeout
  19. ## 空闲连接的回收时间
  20. service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-type
  21. ## 健康检查类型,枚举值为
  22. service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-domain
  23. ## HTTP检查域名
  24. service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-path
  25. ## HTTP检查路径
  26. -----------------我是分割线,以下参数仅ULB类型为外网时生效----------------------
  27. service.beta.kubernetes.io/ucloud-load-balancer-eip-paymode
  28. # 支持traffic、bandwidth、sharebandwidth,默认为bandwidth
  29. service.beta.kubernetes.io/ucloud-load-balancer-eip-sharebandwidthid
  30. # 共享带宽id
  31. service.beta.kubernetes.io/ucloud-load-balancer-eip-bandwidth
  32. # 共享带宽模式下无需指定,或者配置为0,bandwidth下默认为2Mbps
  33. service.beta.kubernetes.io/ucloud-load-balancer-eip-chargetype
  34. # 付费模式,支持month,year,dynamic
  35. service.beta.kubernetes.io/ucloud-load-balancer-eip-quantity
  36. # 付费时长,默认为1,chargetype为dynamic时无需填写。

image.png
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应处理的字段如下:

  1. service.beta.kubernetes.io/ucloud-load-balancer-type
  2. # 代表ULB网络类型,outer为外网,inner为内网;outer为默认值,此处可省略。
  3. service.beta.kubernetes.io/ucloud-load-balancer-subnet-id
  4. # 创建ULB时指定的子网,不填写使用VPC默认子网
  5. -----------------我是分割线,以下参数为Vserver参数----------------------
  6. service.beta.kubernetes.io/ucloud-load-balancer-vserver-protocol
  7. # 协议类型,tcp和udp均表示ULB4,https和http均表示ULB7,部分情况下默认值为tcp
  8. service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-cert
  9. # ssl证书id
  10. service.beta.kubernetes.io/ucloud-load-balancer-vserver-ssl-port
  11. # 开启ssl协议的端口,多个用","分隔开,必须和ssl-cert同时指定
  12. service.beta.kubernetes.io/ucloud-load-balancer-vserver-method
  13. # VServer负载均衡模式
  14. service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-type
  15. ## VServer会话保持方式
  16. service.beta.kubernetes.io/ucloud-load-balancer-vserver-session-persistence-info
  17. ## 用户自定义String,会话保持方式为userdefined有效
  18. service.beta.kubernetes.io/ucloud-load-balancer-vserver-client-timeout
  19. ## 空闲连接的回收时间
  20. service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-type
  21. ## 健康检查类型,枚举值为
  22. service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-domain
  23. ## HTTP检查域名
  24. service.beta.kubernetes.io/ucloud-load-balancer-vserver-monitor-path
  25. ## HTTP检查路径
  26. -----------------我是分割线,以下参数仅ULB类型为外网时生效----------------------
  27. service.beta.kubernetes.io/ucloud-load-balancer-eip-paymode
  28. # 支持traffic、bandwidth、sharebandwidth,默认为bandwidth
  29. service.beta.kubernetes.io/ucloud-load-balancer-eip-sharebandwidthid
  30. # 共享带宽id
  31. service.beta.kubernetes.io/ucloud-load-balancer-eip-bandwidth
  32. # 共享带宽模式下无需指定,或者配置为0,bandwidth下默认为2Mbps
  33. service.beta.kubernetes.io/ucloud-load-balancer-eip-chargetype
  34. # 付费模式,支持month,year,dynamic
  35. service.beta.kubernetes.io/ucloud-load-balancer-eip-quantity
  36. # 付费时长,默认为1,chargetype为dynamic时无需填写。
  37. -----------------我是分割线,我是新增字段----------------------
  38. service.beta.kubernetes.io/ucloud-load-balancer-vserver-listentype
  39. # 监听器类型,不指定时根据vserver-protocol插入值
  40. service.beta.kubernetes.io/ucloud-load-balancer-firewallid
  41. # 防火墙类型,当且仅当ULB为外网,且vserver-listentype为requestproxy时处理
  42. service.beta.kubernetes.io/ucloud-load-balancer-vpc-id
  43. # 创建ULB时指定的子网,一般情况下用户不需要填写。根据集群所在VPCID自动插入
  44. service.beta.kubernetes.io/ucloud-load-balancer-business-id
  45. # 创建ULB时指定的业务组
  46. service.beta.kubernetes.io/ucloud-load-balancer-iswafon
  47. # 是否开启waf,枚举值为yes or no(待定支持)

初次创建时业务逻辑:
image.png