xiaods / k8e

K8E - Kubernetes Easy Engine
https://getk8e.com
Apache License 2.0
387 stars 25 forks source link

我看说明去掉servicelb了,但是测试发现LoadBalancer仍然启动了svclb #320

Closed w7team closed 10 months ago

w7team commented 1 year ago

RT

cilium 能直接实现servicelb吗?

xiaods commented 1 year ago

这块是这样,cilium 在主导 k8s 的 Gateway ingress,这个成为主流方向。并且 cilium 也实现了这方面的特性,所以我建议多思考使用 cilium 的方案。对于 servicelb 的方案,我深入看过实现,是还用 iptables 来实现的。考虑到 k8e 的设计哲学就是去掉 iptables 的依赖。所以我是去掉了 servicelb,但是你测试 LoadBalancer 还启动 svclb,应该是我心软,还没有彻底去掉。但是我已经不在宣传这个 svclb 的特性。

xiaods commented 1 year ago

另外,楼主需要的场景是什么,方便讲一下。我可以看看出一个例子方便大家一起分享

w7team commented 1 year ago

我们目前还在使用service+ingress的传统方案。在使用过程中发现,客户端 -> cni -> servicelb -> traefik 的流量走向会把客户端源ip弄丢,所以一直在寻找更完美的解决方案。不知道cilium+Gateway ingress能否解决这个问题。如果可以希望能给个使用示例研究一下。

w7team commented 1 year ago

今天查了一下资料,cilium要实现service LoadBalancer类型是不是得借助MetalLB才可以?

snakeliwei commented 1 year ago

源ip丢失是和service的externalTrafficPolicy这个配置有关,把它设置为local,但是要注意设置local后,节点不会转发NAT,需要自己处理负载均衡的问题

xiaods commented 1 year ago

今天查了一下资料,cilium要实现service LoadBalancer类型是不是得借助MetalLB才可以?

如果你真要 LB模式的服务,MetalLB 这是一种方式。搞 Gateway 呗

w7team commented 1 year ago

今天查了一下资料,cilium要实现service LoadBalancer类型是不是得借助MetalLB才可以?

如果你真要 LB模式的服务,MetalLB 这是一种方式。搞 Gateway 呗

我研究了一下,gateway好像也是走service,也得借助l7的负载均衡应用来转发,能给写个案例看看不

xiaods commented 1 year ago

今天查了一下资料,cilium要实现service LoadBalancer类型是不是得借助MetalLB才可以?

如果你真要 LB模式的服务,MetalLB 这是一种方式。搞 Gateway 呗

我研究了一下,gateway好像也是走service,也得借助l7的负载均衡应用来转发,能给写个案例看看不

最近在研究大模型,这块我找个时间搞个案例一起交流下。

xiaods commented 10 months ago

刚完成LLM的一次迭代。我后续几周抽点时间验证下这个案例,如果用cilium gateway来走流量

xiaods commented 10 months ago

已经找到 Cilium Gateway API 的部署安装文档。https://docs.cilium.io/en/latest/network/servicemesh/gateway-api/gateway-api/ 粗略看了一遍。在LoadBalancer 对象获取 IP 的时候,它直接做了处理获取公网 IP。这块我还要看看代码,回忆下这块的内容。

xiaods commented 10 months ago

通过分析,不管用那种方法,都需要有一个 svclb 服务来提供可用的 LB IP。比如 k8e 就利用了 host port + iptables 来生成。https://github.com/k3s-io/klipper-lb/blob/master/entry。因为我的本意是不要依赖这些。比如我们换成 cilium Gateway API,首先要确保能让 LoadBalancer 对象能拿到一个可以使用的 IP。对于私有云环境,cilium 只能依赖如 MetaLB 这样的组件来实现 LB 的获取。其他逻辑都是一样的。

xiaods commented 10 months ago

Deprecate MetalLB support #22246 for cilium https://github.com/cilium/cilium/issues/22246

xiaods commented 10 months ago

https://gist.github.com/hydrz/1364043149992f4f5bcc1fb12acf02f8

xiaods commented 10 months ago

把内置的 servicelb 去掉了。让 kube-vip or cilium 去干起来。

https://github.com/xiaods/k8e/pull/326

w7team commented 10 months ago

我看cilium不能直接当lb用,还需要类似MetalLB这种组件支持

xiaods commented 10 months ago

我看cilium不能直接当lb用,还需要类似MetalLB这种组件支持

cni 只能透传,lb 的能力肯定需要一个 proxy 来解决。我看了最新的 cilium 开发者说,他们的 proxy 是自己的,你在仔细看看。

xiaods commented 10 months ago

https://github.com/xiaods/k8e/pull/326 这个 PR 去除了 servicelb 的烦恼。后面全力应用 cilium lb