• 网关路由未解决
  • kubesphere 中部署的应用如何获取客户端ip,kubesphere的网关架构是什么样的?

操作系统信息
虚拟机,Centos7.9,8C/32G

Kubernetes版本信息
Server Version: version.Info{Major:“1”, Minor:“22”, GitVersion:“v1.22.12”, GitCommit:“b058e1760c79f46a834ba59bd7a3486ecf28237d”, GitTreeState:“clean”, BuildDate:“2022-07-13T14:53:39Z”, GoVersion:“go1.16.15”, Compiler:“gc”, Platform:“linux/amd64”}

容器运行时
docker version / crictl version / nerdctl version 结果贴在下方

Version: 20.10.14

KubeSphere版本信息

v3.4.1 在线安装, 使用kk安装

问题是什么
在ks中部署的应用获取客户端访问ip是集群内的ip,如何获取客户端真实ip

目前我的应用的网络结构如下:

项目网关(基于NodePort暴露) ->应用路由 -> Service -> Pod(whoami)

目前使用whoami获取到的ip如下:

请问如何获取到真实的客户端ip, 另外网关架构拓扑是什么样的, 因为我在原生k8s下的ingress设置了

compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"

这三个值是可以获取到真实客户端ip的,但是在kubesphere中却获取不到。

hongzhouzi 我这边 是 Ingress(应用路由,NodePort) -> svc -> pod 好像跟你文档里的结构不一样

13 天 后

环境上有几个 Node 呢?有可能是请求落在了没有 ingress controller 的 Node 上就不能正常访问到。设置成 Local 时需要保证每个 Node 上都有 ingress controller 才可以,因为这样设置就意味着它只能本 节点访问,而请求落在了这个节点上,但又找不到 ingress controller 的pod就会无法访问。

    hongzhouzi 有5个 意思是 我要五个node都创建ingress controller 吗 。 我使用的是应用路由 网关是给我分配的node2 那我要怎么创建应用路由 ??

      hongzhouzi 能不能给一个在kubesphere上使用的流程 图文教程 这样大家配置起来也比较容易理解和使用

      pod是动态创建的,ip可能会变动,外部访问要么通过service,要么就通过ingress controller去进行路由,它们指向的都是工作负载,然后工作负载再去路由pod

      ivanmissu 应该调整副本数到 Node 个数就可以了。里面默认的亲和性配置会将 pod 均匀调度到不同的 Node 上,这样每个 Node 上就都有网关的 pod 了。

        hongzhouzi 你是说我需要把网关对应的deployment的副本和节点数量一致是吗 类似下面这个要改为5个吗?

        下面这个deployment不能改成5好像 改完以后立马副本就被重置为1 ?? 具体可以在哪里改?

        @hongzhouzi 麻烦看一下

          11 天 后

          ivanmissu 在网关设置(网关设置->管理->查看详情->资源状态)中修改网关的副本数,直接修改网关 Deploy 中的副本数是会被重置掉的。
          如下位置:

            5 天 后

            hongzhouzi

            感谢,可以了

            再问一下, 还有其他方式获取客户端ip吗, 这种如果我以后节点多了 网关要开很多 感觉还是有点浪费资源的