本文最后更新于145 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
CM 全局必要配置
# 在ingress configmap配置文件data下添加 use-forwarded-headers: 'true',来获取客户端IP
# 这样在每个ingress上只需要使用 nginx.ingress.kubernetes.io/whitelist-source-range 添加白名单地址就可以了
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: gray-01
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
compute-full-forwarded-for: 'true'
forwarded-for-header: X-Forwarded-For
use-forwarded-headers: 'true'
新版本可以生效
# 如果需要配置全局的白名单,就更改ingress 的 configmap 配置 nginx-configuration
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: gray-01
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
whitelist-source-range: 192.168.208.1/24,xx.xx.xx.xx
whitelist-source-range: 183.134.214.162,172.16.11.171,172.16.17.169,172.16.17.214,172.16.17.178/25172.16.216.17,172.16.216.8,172.16.216.20/15,172.16.216.9,172.16.216.47,172.16.216.4,210.77.190.119,210.77.190.147,210.77.190.149,210.77.190.155,210.77.190.151
block-cidrs: 192.168.208.1
- 扩展
-
- 如果在集群中,有AB两个服务,外部有负载均衡SLB,而且B的ingress的backend的后端service是nodeport类型的svc,那么A服务通过负载均衡访问B服务的时候,会失败? 或者白名单会失效,需要进一步了解原理
老版本需要在开放白名单的Ingress中单独配置
# 强制覆盖403界面
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
# 强制覆盖默认 403 页面
error_page 403 =200 /empty;
location = /empty {
internal;
return 200 "";
}
nginx.ingress.kubernetes.io/whitelist-source-range: |
172.16.11.171,
172.16.17.169,
172.16.17.214,
172.16.17.178/25,
172.16.216.17,
172.16.216.8,
172.16.216.20/15,
172.16.216.9,
172.16.216.47,
172.16.216.4,
210.77.190.119,
210.77.190.147,
210.77.190.149,
210.77.190.155,
210.77.190.151,
183.134.214.162,
172.17.195.136,
172.16.106.88,
172.17.27.68
原理:
error_page 403 =200 /empty:将 403 错误映射到一个返回空内容的内部路径/empty。return 200 "":直接返回 HTTP 200 和空内容,浏览器显示空白页。
效果:
- 非白名单 IP 访问时,无任何内容返回(类似
ERR_EMPTY_RESPONSE)。 - 完全隐藏 Nginx 标识和 403 页面。