Nginx Ingress Controller官方网站给出了Ingress白名单配置的一般方法:
● 通过Annotation配置单个Ingress,作用范围是本Ingress,对应的Annotation:nginx.ingress.kubernetes.io/whitelist-source-range,值填写CIDR,用逗号分隔符分隔,如“192.168.0.0/24, 10.0.0.10”。
● 配置到nginx-configuration里,作用范围为全局,参数:whitelist-source-range。要说明的一点是,全局参数会被Annotation的设置覆盖。
Ingress白名单的原理是判断客户端真实IP地址是否在白名单列表里,所以Ingress-nginx能否正确获取客户端的真实IP地址,是白名单能否生效的关键。因此,只要解决了Ingress-nginx如何获取客户端真实IP地址的问题,那么Ingress白名单问题就迎刃而解。
前面讲了Ingress-nginx无法获取客户端真实IP地址的一些典型场景,比如:nginx-ingress-lb的ExternalTrafficPolicy是Cluster,需要改为Local;nginx-ingress-lb的SLB是七层的,需要手动设置X-Forwarded-For;nginx-ingress-lb前面还存在代理等。前面已经讲过如何获取客户端真实IP地址,这里不再赘述。
Ingress-nginx的新版本实现比较简单,Ingress控制器直接在nginx.conf的location下面添加:

对于老版本的Ingress-nginx,是通过Nginx的Geo模块实现的,通常配置成这样:

$the_real_ip如果落在110.110.0.0/24中,则放行(0),否则进入“default”,即拒绝(1)。可以通过查看Ingress-nginx的配置文件来确认白名单是否配置成功,配置文件路径为/etc/nginx/nginx.conf。