阿里云容器服务Ingress设置原IP透传

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ### 问题 在很多业务场景里,我们都需要知道客户端的真实IP来控制业务逻辑。但是从客户到真正的服务,中间总会进过多层的SLB(负载均衡),那么如何才能获取到客户的真实IP呢? 在Kubernetes容器的环境下,通常一个客户端访问到业务要经过云的SLB,Ingress才能达到业务的应用。

问题

在很多业务场景里,我们都需要知道客户端的真实IP来控制业务逻辑。但是从客户到真正的服务,中间总会进过多层的SLB(负载均衡),那么如何才能获取到客户的真实IP呢?
在Kubernetes容器的环境下,通常一个客户端访问到业务要经过云的SLB,Ingress才能达到业务的应用。所以我们需要每一层都能够透传客户端的IP才行。

原理

在基于HTTP的协议里,对于客户端原IP的透传,可以参考: RFC7239(Forwarded HTTP Extension, https://tools.ietf.org/html/rfc7239) 标准。没经过一层链路,都会把对应地址加入到X-Forwarded-For这个http的扩展头里,以逗号隔开,最早的客户端是第一个地址。

例如:

X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17

根据RFC7239规范,有个需要注意:如果请求中只有X-Forwarded-For,而没有其它的X-xxxxx的扩展头,则规范是建议将其转为

Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"

阿里云Kubernetes Ingress实践

大家或许知道,在阿里云的Kubernetes容器服务里,公有云SLB和Ingress是已经自动在安装的时候配置好的,但是如果需要透传客户端的IP,则必须针对ingress controller的service做些改动,具体如下:

kubectl edit service/nginx-ingress-lb -n kube-system

将下图对应的红色框的内容从Cluster改为Local
Snip20180709_162.png

原因是参见Kubernetes官网的文档说明:
Snip20180709_161.png

该参数主要是保护客户端IP,避免loadbalancer/nodeport的服务的第二跳。这样nodeport的服务路口只会去找本节点的pod服务。如果本节点没有对应的pod(部署的deployment的实例数少于节点数),则请求将路由不到服务上。为此阿里云的Cloud Provider专门做了优化,只会把有pod的节点注!册到阿里云的SLB上,避免该问题。

这样,Ingress controller被rolling update后就可以提供原IP给容器的应用了

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5月前
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
29天前
|
Shell Docker 容器
10-19|使用date命令: 你可以在容器内使用date命令来设置时间,但为了防止这个更改影响宿主机,你不能以特权模式运行容器。我没有加特权模式的时候,使用此命令告诉我没权限啊
10-19|使用date命令: 你可以在容器内使用date命令来设置时间,但为了防止这个更改影响宿主机,你不能以特权模式运行容器。我没有加特权模式的时候,使用此命令告诉我没权限啊
|
2月前
|
Shell Docker 容器
docker给容器分配固定ip
docker给容器分配固定ip
425 3
|
2月前
|
Kubernetes 负载均衡 安全
【技术揭秘】阿里云容器服务Ingress高级玩法:如何轻松实现客户端原始IP透传,提升应用安全性与用户体验!
【8月更文挑战第17天】本文介绍如何在阿里云容器服务中配置Ingress以透传客户端原始IP地址。通过Ingress可实现HTTP负载均衡等功能。需在Ingress定义文件中添加特定注解,如`nginx.ingress.kubernetes.io/real-ip-header: X-Real-IP`。创建并应用Ingress配置后,后端服务可通过读取`X-Real-IP`头获取真实IP。此举有助于安全审计及流量分析。
71 2
|
3月前
|
Ubuntu Devops 云计算
ubuntu docker-compose编排容器并且设置自启动
使用Docker Compose编排容器并设置为Ubuntu系统的自启动服务,不仅优化了应用的部署流程,也提升了运行时的可管理性和可靠性。通过上述步骤,您可以轻松实现这一目标。维护此类服务时,记得定期检查和更新您的 `docker-compose.yml`文件,确保所有的服务都符合当前的业务需求和技术标准。在云计算和微服务架构不断演进的今天,掌握Docker Compose等工具对于DevOps和软件工程师来说,变得尤为重要。
169 3
|
5月前
|
Docker 容器
【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)
【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)
64 1
|
5月前
|
安全 Linux Nacos
如何在CentOS使用Docker运行Nacos容器并实现无公网IP远程访问UI界面
如何在CentOS使用Docker运行Nacos容器并实现无公网IP远程访问UI界面
|
5月前
|
运维 Kubernetes 监控
本地CentOS安装轻量级容器PaaS平台KubeSphere并实现无公网IP远程访问
本地CentOS安装轻量级容器PaaS平台KubeSphere并实现无公网IP远程访问
74 0
|
5月前
|
存储 安全 文件存储
如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问
如何在群辉NAS使用Docker搭建容器魔方并实现无公网ip远程访问
263 0
|
1月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践

相关产品

  • 容器计算服务