TKE nginx-ingress 开启ip白名单限制和透传client源IP
背 景
最近TKE迎来了nginx-ingress 插件的到来,此篇文章将结合TKE nginx-ingress插件,实现IP白名单配置和service透传client源IP的功能
在传统nginx上,如果想要对nginx 里面的虚拟主机做白名单访问控制很easy。但在kubernetes中,如何通过 ingress resource配置文件来达到这个效果呢?
安装nginx-ingress
1, 控制台 组件管理 中点击”新建“找到 nginxingress组件,勾选 点击”完成“ 进行安装nginx-ingress 插件
注意: 如果nginxingress 插件是灰色的,且无法勾选,请联系腾讯云助手开白,开白后在执行安装。
安装完成具体表现:kube-system命名空间下deployment下创建一个tke-ingress-nginx-controller-operator的pod。
创建 nginx-ingress-controller
1,TKEk控制台操作:
控制台-组件管理 ——》 点击 nginx-ingress-controller ——》跳转页面
点击 新增nginx-ingress实例 ——》弹出页面
配置nginx-ingress-controller
nginx-ingress-controller 创建成功的表现是:
kube-system命名空间下有一个 <name>+ingress-nginx-controller 的pod (实践表现为: ng-ing-ingress-nginx-controller)
2,nginx-ingress-controller配置X-Forwarded-For
X-Forwarded-For
(XFF) 在客户端访问服务器的过程中如果需要经过HTTP代理或者负载均衡服务器,可以被用来获取最初发起请求的客户端的IP地址,这个消息首部成为事实上的标准。在消息流从客户端流向服务器的过程中被拦截的情况下,服务器端的访问日志只能记录代理服务器或者负载均衡服务器的IP地址。如果想要获得最初发起请求的客户端的IP地址的话,那么 X-Forwarded-For 就派上了用场。
修改nginx-ingress-controller 的cm配置文件
由于TKE 控制台无法编辑kube-system命名空间下的configmap,目前通过登入节点,命令行编辑nginx-ingress-controller 的configmap ,data下添加参数 use-forwarded-headers: "true"
TKE 控制台操作:
2,TKE控制台 配置service
透传Client源IP到pod,是在创建后端service时选择ExternalTrafficPolicy:Local, 支持此参数设置的service类型是: 公网访 问,VPC内网访问,主机端口访问。 本次测试选择公网访问类型的
创建ingress 配置白名单
1,配置 ingress
访问地址: http://115.159.130.14
配置白名单: 添加方式直接写annotation,
添加参数为: nginx.ingress.kubernetes.io/whitelist-source-range: 192.168.4.15 (允许Client IP为192.168.4.15的主机访问)
测试
1,白名单IP限制
[root@vm-4-15-centos ~]# hostname -I #此主机IP为开白主机
192.168.4.15
[root@vm-4-15-centos ~]# curl http://115.159.130.14/ # 可以正常访问nginx服务
Hello Word
[root@vm-4-15-centos ~]# ssh root@192.168.4.3 #登入192.168.4.3主机访问
root@192.168.4.3's password:
Last failed login: Wed Dec 30 19:00:42 CST 2020 from 117.48.234.141 on ssh:notty
There were 17 failed login attempts since the last successful login.
Last login: Wed Dec 30 19:00:04 2020 from 192.168.4.15
[root@VM-4-3-centos ~]# curl http://115.159.130.14/ #拒绝此主机访问
curl: (7) Failed connect to 115.159.130.14:80; 拒绝连接
白名单IP访问,非白名单IP拒绝访问 测试成功 !
2,透传client源IP测试
[root@vm-4-15-centos ~]# curl 115.159.130.14 #测试访问
Hello Word
查看nginx access.log
测试完成!
参考文档: