- 已编辑
KubeSphere 版本 : v3.4.1 使用项目网关 查看日至,日至中,无法获取客户端真实IP,这个能解决吗
而且后面的应用也拿不到客户端真实IP
KubeSphere 版本 : v3.4.1 使用项目网关 查看日至,日至中,无法获取客户端真实IP,这个能解决吗
而且后面的应用也拿不到客户端真实IP
网关 配置选项 中添加 compute-full-forwarded-for: ‘true’
forwarded-for-header: X-Forwarded-For
网关使用nodeport 这样配置也拿不到
请问解决了了,我也遇到了这个问题
参考网站:https://kubesphere.io/zh/blogs/how-to-get-real-ip-in-pod/
我发现将 集群网关(或者项目网关)副本个数设置成集群个数,并在容器中设置勾选同步主机时区,副本需要设置反亲和性,保证在每个后端节点上都有 Ingress Controller,最后将 网关的 svc 的 externalTrafficPolicy 设置为 Local 模式,而 我们的部署应用服务 Service 可以不必设置为 Local 模式。ingress 上也不用配置其他参数,就可以在集群网关日志中获取到 真实的ip
我网关访问模式选择的 nodeport
通过这种配置,我发现之前不能用的白名单功能,也能使用了
应用路由配置
白名单配置
从上面的日志中可以看到 我两个不同的主机访问这个域名地址,返回码 不一样,一个200 ,一个403,因为我在测试中将上面配置的ip 也拒绝在白名单之外,所以有的访问被拦截,有的正常
经过测试,发现:只要将域名解析到master节点的ip,然后将网关pods调度设置到master节点就行,网关pods 个数不需要一定要满足集群节点个数,最好是将个数设置成master的个数,因为master的个数一般不会变,大多数都是3个节点,如果master 节点有污点,工作负载中可能需要配置容忍度
(以集群网关为例)在工作负载中,选择 kubesphere-router-kubesphere-system 网关pods 调度只需要添加设置就行:
nodeSelector:
node-role.kubernetes.io/master: ''
因为我master 节点的污点如下图,所以不需要在配置容忍的
如果有其他污点,需要添加如下配置
# 下面的配置根据具体情况添加 tolerations: - key: “node-role.kubernetes.io/master” operator: “Exists” # 操作符"Exists"表示只要有这个键的污点即可容忍,不论值是什么 effect: “NoSchedule” # 效应"NoSchedule"意味着Pod可以被调度到带有此污点的节点上
chengjun 这个问题解决了吗? 你集群网关用的是NodePort模式还是LoadBalancer模式?