前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tke集群nginx-ingress无法reload全局配置

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

原创
作者头像
聂伟星
发布2022-07-05 10:20:43
1.3K1
发布2022-07-05 10:20:43
举报

使用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来让全局配置生效。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 问题现象
  • 2. 问题原因
  • 3. 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档