xiaods / k8e

K8E - Kubernetes Easy Engine

Home Page:https://getk8e.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

目前主流的几款cni插件都不支持proxyProtocol,无法获取客户端源ip

w7team opened this issue · comments

Calico、Cilium、Flannel目前都不支持proxyProtocol,没办法把真实的客户端ip加到头部信息里。有没有比较好的方案,或者有解决这方面问题的cni插件

第三方反向代理么:https://github.com/flomesh-io/pipy
这块很容易的。和 cni 没啥关系

你研究一下就知道了,cni会把外部ip中转一次到内部的pod,导致客户端源ip被隐藏掉

你研究一下就知道了,cni会把外部ip中转一次到内部的pod,导致客户端源ip被隐藏掉

Cilium 使用直接服务器返回(DSR)模式:
DSR模式的另一个优点是可以保留客户端的源IP地址。
https://docs.cilium.io/en/v1.12/gettingstarted/kubeproxy-free/#direct-server-return-dsr

https://blog.getambassador.io/externaltrafficpolicy-local-on-kubernetes-e66e498212f9 几种解决方案。

这篇文章我也看过,多节点时不友好,没有直接支持proxyProtocol效果最好。目前这个属性,只有公有云自己搞的cni插件才支持

https://blog.getambassador.io/externaltrafficpolicy-local-on-kubernetes-e66e498212f9 几种解决方案。

这篇文章我也看过,多节点时不友好,没有直接支持proxyProtocol效果最好。目前这个属性,只有公有云自己搞的cni插件才支持

你是这个方案吗:https://www.ssgeek.com/post/k8s-sheng-chan-shi-jian-zhi-huo-qu-ke-hu-duan-zhen-shi-ip/#4-%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87

我目前ingress用的traefik,traefik是支持proxyProtocol的,他可以把tcp头部信息中的源ip信息转成x-forwarded-for输出。但是前提是需要第一跳支持proxyProtocol。一般公有云自己的负载均衡器会支持这个,如果不外接负载均衡器,直通k8s的话,就需要k8s的cni插件支持这个。

cilium/cilium#21438 @w7team 看你也在社区加了标记,那就等等这个特性吧。

@w7team https://getk8e.zhubai.love/posts/2310032131440984064 使用 k8e 玩转 kube-vip with Cilium's Egress Gateway 特性, 我把 kubevip 的特性重新摸了一把,他的 ServiceLB 和 VIP 都能支持,还是很方便。

但是你需要的 Source IP 的特性,要等到 cilium cni 支持携带 proxyProtocol,我在更新。

if you use ingress service, it also support ProxyProtocol, see this commit: chaunceyjiang/cilium@24911b0

@w7team 告诉你一个好消息,cilium 支持了 Proxy 协议,可以用了。

cilium/cilium#28194

我看cilium好像连ingressController都做了,这就不需要安装nginx-ingress或者traefik了吧?

我看cilium好像连ingressController都做了,这就不需要安装nginx-ingress或者traefik了吧?

是的,但是我还没有时间去实验。你可以尝试。