Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无X-Forwarded-For,在裸机Kubernetes上使用Traefik 2,提供ClusterIP服务和kube keepalive vip_Kubernetes_Traefik_X Forwarded For - Fatal编程技术网

无X-Forwarded-For,在裸机Kubernetes上使用Traefik 2,提供ClusterIP服务和kube keepalive vip

无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: --

我的设置是运行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:

---
版本: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