问题描述
在 EDAS 中创建的应用绑定 SLB ( EDAS 应用基本信息 -> 应用设置页面里面的负载均衡-外网、负载均衡-内网 这两种在获取客户端 IP 这个问题上可相同对待)后,客户端通过 SLB 访问时,如何在后端 Java 代码中获取到客户端的真实 IP 哪 ?
解决办法
1、对于部署到 ECS 集群、Swarm 集群的应用
可直接在后端 Java 代码中使用下面的方式获取即可。
代码如下:
String client_ip = request.getHeader("x-forwarded-for");
另外,还可以通过获取 Http Header 中的 x-real-ip、wl-proxy-client-ip 参数来得到客户端的真实 IP 。
对于部署到在 EDAS Console 页面直接创建的 Kubernetes 集群(托管 master 节点版)
部署到该种类型的 Kubernetes 集群中的应用,由于未开放对该集群的管控功能,所以暂无法获取到客户端的真实 IP 。
而且该种类型的集群已经被 “容器服务 - Kubernetes” 中的 “Kubernetes 托管版” 替代并处于限制使用期,新用户在 EDAS Console 中已经无法直接创建该种类型的 Kubernetes 集群,所以,建议使用 “容器服务 - Kubernetes” 中的 “Kubernetes 托管版” 集群,在 “容器服务 - Kubernetes” Console中创建 “Kubernetes 托管版” 集群后,然后在 EDAS Console 的 “资源管理” -> “集群” -> “容器服务 K8S 集群” 导入新创建的 “Kubernetes 托管版”集群,接着参考下面的内容即可获取到客户端 IP 。
2、对于部署到在 容器服务 - Kubernetes Console 中创建,导入到 EDAS 集群中的 Kubernetes(完整节点)集群和 Kubernetes 托管版(托管 master 节点)集群
这两种类型的 Kubernetes 集群在获取客户端真实 IP 之前(假设你已经通过 EDAS Console 向该 Kubernetes 集群部署了应用),首先需要在 容器服务 - Kubernetes Console 的集群列表中找到你创建的 Kubernetes 集群,并点击该集群对应的 “控制台” 进入该集群的控制台页面。
在该集群的控制台页面,点击“服务发现与负载均衡” -> “服务”,然后在服务列表中找到通过 EDAS Console 部署的应用并点击进入该应用服务的详细信息页面。
在应用服务的详细信息页面点击右上角的“编辑”按钮,即会弹出修改该服务的窗口,然后找到 externalTrafficPolicy 配置参数,将该参数值由默认的 Cluster 改为 Local ,然后点击该窗口右下角的“更新”按钮,即会动态更新该服务的配置,动态生效。
接下来,在后端 Java 代码中可通过下面的方式获取到客户端的真实 IP :代码如下
String client_ip = request.getRemoteAddr();
结合上面 ECS 集群和 Docker Swarm 集群部署的应用获取客户端 IP 的方法,可通过三元运算符将这两种方式变为一行代码:
代码如下
String client_ip = request.getHeader("x-forwarded-for") == null ? request.getRemoteAddr() : request.getHeader("x-forwarded-for");
即可适配 EDAS 中不同的集群类型。
另外,该参数的修改还可以通过 kubectl 命令的方式(前提是已经参见 Kubernetes 集群基本信息页面的“通过 kubectl 连接 Kubernetes 集群”部分配置好了KubeConfig):
代码如下
kubectl patch svc
以上回复如果还未能解决您的问题,请联系凯铧互联售后技术支持。以上总结了通过 SLB 访问应用时在代码中如何获取到客户端 IP 说明。阿里云代理商凯铧互联提供阿里云服务器/企业邮箱等产品的代购服务,同样的品质,更多贴心的服务,更实惠的价格。 阿里云代理商凯铧互联会为您提供一对一专业全面的技术服务,同时还能为您提供阿里云其他产品购买的专属折扣优惠。通过凯铧互联购买可以获得折上折优惠!若您需要帮助可以直接联系我方客服,阿里云代理商凯铧互联专业技术团队为您提供全面便捷专业的7x24技术服务。 电话专线:136-5130-9831,QQ:3398234753。
为什么选择我们:
北京凯铧互联科技有限公司(简称凯铧互联)由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、腾讯等,作为阿里云,腾讯云百度云,金山云,华为云重要的合作伙伴,专注于为企业用户提供云计算及云计算的解决方案。总部设在,并在内蒙设有办事处。做为一家综合性方案商,凯铧互联向各行业用户提供基于云计算的各种解决方案。为用户获得优质服务的同时,秉承"专业规划、周到服务"的服务理念,根据用户的实际情况,充分考虑各种网络资源的特点及功效,为用户量身定北京做一套适合于其实际应用需求的网络应用方案。帮助用户利用互联网的力量展开新的营销方式,并大大缩短了项目实施周期,获得用户的一致好评。
[2019-04-18 11:09:06]
扫一扫
凯铧科技
服务QQ
3287819116