tke集群nginx-ingress无法reload全局配置

使用nginx-ingress的时候,我们需要加一些nginx的全局配置,一般都是加到nginx-ingress-controller启动参数指定的configmap下

上面的例子就是修改kube-system命令空间下的nginx-intranet-ingress-nginx-controller这个configmap,修改后,nginx-ingress默认会自动重新加载生效,所支持配置的参数,可以参考官网文档https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/

但是有时候会发现,修改了对应的configmap,nginx-ingress controller并不会自动reload加载最新的配置,这是什么原因呢?

1. 问题现象

集群下创建了2个nginx-ingress controller实例,A实例是监听所有命名空间,B实例监听单个命名空间weixnie。

A实例的启动参数

B实例启动参数,如果是监听单个命名空间,则加上--watch-namespace参数

当我修改了A实例的全局配置,也就是kube-system命名空间下的nginx-intranet-ingress-nginx-controller这个configmap时候,nginx-ingress controller对应的pod会自动reload配置生效,但是修改B实例的全局配置,也就是kube-system命名空间下的nginx-ingress-nginx-controller这个configmap时候,nginx-ingress controller对应的pod不会自动reload配置生效,还是之前的旧配置,这是什么原因呢?

2. 问题原因

从上面现象分析下,对比2个nginx-ingress controller实例的配置,B实例只比A实例多加了一个配置,就是监听指定命名空间,这里去官网上找了下这个参数的说明

--watch-namespace string   Namespace the controller watches for updates to Kubernetes objects.
                           This includes Ingresses, Services and all configuration resources. All
                           namespaces are watched if this parameter is left empty.

当指定了这个参数时候,控制器只会监听对应命名空间下ingress、service和所有的资源配置,也就是说只会监听weixnie这个命名空间下资源变化,然后动态加载生效,但是我们修改的nginx-ingress controller全局configmap是在kube-system命名空间下,因此修改了全局配置,并不会自动加载生效。

3. 解决方案

既然分析出原因了,这里的解决方案就是:

  • 监听的命名空间加上kube-system
  • 重建controller的pod来让配置生效

从字段解释看,watch-namespace对应值类型是string,因此没法配置多个namespace,当前只能重建controller的pod来让全局配置生效。

版权声明:
作者:聂伟星
链接:https://jkboy.com/archives/14824.html
来源:随风的博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
tke集群nginx-ingress无法reload全局配置
使用nginx-ingress的时候,我们需要加一些nginx的全局配置,一般都是加到nginx-ingress-controller启动参数指定的config...
<<上一篇
下一篇>>