需求
容器化dns app比如bind,保留客户端地址,k8s服务对外一个地址,need lb service
可能的方案讨论
-
service type cluster ip方式
默认保留客户端ip;只能集群内部访问。 -
对clusterip 设置static route从外网访问,方案不好
-
service type nodeport方式
默认不保留。但service.spec.externalTrafficPolicy=local就可以了;前面加lb可以做到对外一个ip地址,但问题多多。 -
service type loadbalancer方式
默认不保留客户端IP地址。
云厂商如google/aws支持保留客户端地址,但采用metallb(onpremis)的方式暂时不支持。- metallb
- lay2 arp
目前不支持保留客户端ip。保留客户端的方式,正在开发中,时间不可估。
metallb本身暂时不支持proxy protocol协议,bind也暂时不支持proxy protocol协议。所以proxy protocol方式也不可以。 - BGP 支持保留客户端ip
需要BGP路由器。软件BGP路由器可行吗?
- lay2 arp
- metallb
-
ingress nginx,nodeport方式(onpremis)
- proxy protocol
not support udp
can deveploment upd ,but also need nginx udp protocol dev - proxy bind ip透明方式 or dsr
需要 container/pod后端和nginx端需要设置路由等
需要先熟悉基本的ingress nginx 然后探索方便的方法进行container端的网络设置?有吗?
- proxy protocol
-
其他ingress方式如haproxy,envoy,traefik 目前都不支持upd负载均衡。
-
一种基于ecmp的方法
https://github.com/Mirantis/k8s-externalipcontroller/blob/master/doc/ecmp-load-balancing.md
有必要探索
todo
- 先走通ingress nginx
- 采用nodeport,因为我们只是单机集群,多个机器的k8s就不好使了。
- 采用kubectl forward proxy方式 有什么缺点呢?
- 探索最后一种基于ecmp的方法同时进行metalb的开发。
analysis
some solutions,efailovr=eternalfailover ifailover=internalfailover ,same as loadbalance eloadbalance=elb
- nginx ingress(nodeport) + dns service(no elb,no efailover, no considering ingress nignx’s lb feature;);
- keepalive-vip + nginx ingress(nodeport) + dns service , only efailover,nignx ingree add lb feature ;
- keepalive-vip + dns service(nodeport) ,no elb,only efailover;
- metalb bgp + nginx ingress(loadbalance type) +dns service (have elb and efailover,and ingress add lb feature);
- metalb bgp + dns service(few compotent compared with above,have elb + efailover)
- metalb layer2 + dns service(few compotent compared with above,have efailover,no elb )
- metalb layer2 + nginx ingress(loadbalance type) +dns service (have efailover but ingress add lb feature);
- k8s-externalipcontroller ?need explore later
we need presever client ip,need elb feature,so i think those three solutions are promising.
2,but ingress nginx need config upd proxy bind.
5,look simple ,but need bgp things
7,use layer2,but now have not impl preserver ip.