无X-Forwarded-For,在裸机Kubernetes上使用Traefik 2,提供ClusterIP服务和kube keepalive vip
我的设置是运行Kubernetes 1.17的裸机集群。我使用Traefik 2(.3.2)作为反向代理,并使用无X-Forwarded-For,在裸机Kubernetes上使用Traefik 2,提供ClusterIP服务和kube keepalive vip,kubernetes,traefik,x-forwarded-for,Kubernetes,Traefik,X Forwarded For,我的设置是运行Kubernetes 1.17的裸机集群。我使用Traefik 2(.3.2)作为反向代理,并使用kube keepalive vip[1]为我的机器进行故障切换 --- 版本:v1 种类:配置地图 元数据: 名称:kube keepalived vip配置 名称空间:kube系统 数据: 172.111.222.33:kube系统/traefik2入口控制器 因此,我的traefik服务是默认类型的群集IP,并引用由kube keepalive vip服务提供的外部IP: --
kube keepalive vip
[1]为我的机器进行故障切换
---
版本:v1
种类:配置地图
元数据:
名称:kube keepalived vip配置
名称空间:kube系统
数据:
172.111.222.33:kube系统/traefik2入口控制器
因此,我的traefik服务是默认类型的群集IP,并引用由kube keepalive vip
服务提供的外部IP:
---
版本:v1
种类:服务
元数据:
名称:traefik2入口控制器
名称空间:kube系统
规格:
选择器:
app:traefik2入口控制器
端口:
-协议:TCP
名称:网站
港口:80
-协议:TCP
名称:webs
港口:443
外部性:
- 172.111.222.33
这就是它的工作原理。现在,我想限制我的一些应用程序只能从网络中的特定子网访问。由于我的请求由kube keepalive vip
和kube proxy
处理,因此我请求中的客户端IP不再是实际客户端的IP。但就我所得到的文档而言,kube-proxy
正在X-Forwarded-For
头中设置真正的ip。因此,我的中间件如下所示:
内部ip白名单:
IP白名单:
源范围:
-10.0.0.0/8#我的子网
-60.120.180.240#我的公共知识产权
国际战略:
深度:2#从X-Forwarded-For标头中获取第二个条目
现在,对该中间件所连接的入口的每个请求都被拒绝。我检查了Traefik日志,发现请求包含一些X-Forwarded-*
头,但没有X-Forwarded-For
:(
有没有人有这方面的经验并能指出我的错误?我的Kubernetes设置可能有问题吗?或者我的kube keepalive vip
config中缺少什么
提前谢谢
[1] 对于所有遇到这个问题的人,我同时设法解决了我的问题 主要问题是
kube proxy
。默认情况下,所有服务都通过它进行路由。而且,根据您的CNI提供商(我使用flannel
),您的呼叫客户端的信息会丢失在那里
K8s通过将.spec.externalTrafficPolicy
设置为Local
()提供了一种解决方法。但是ClusterIP
服务不支持这种方法
因此,我通过使用MetalLB()解决了这个问题,MetalLB()为裸机集群提供负载平衡。在使用之前分配给keepalived容器的虚拟IP进行设置后,我使用类型LoadBalancer
配置了traefik服务,并请求了我在MetalLB中拥有的一个IP