rancher默认会安装一个rke2-ingress-nginx在kube-system命名空间下,之后无论是rancher本体还是其他pod的负载均衡全靠这一个pod。而rke2-ingress-nginx的nginx.conf不但是动态生成的,也是由lua驱动的。这些配置文件和lua脚本可以在pod中的/etc/nginx/
下找到。
之前我都不知道confignmap的正确附加方法,只能通过在每一个负载均衡添加注释来改变nginx配置,这是非常不优雅而且繁琐的。后来我还试过在rke2-ingress-nginx直接添加注释,然后用kubectl重建pod,直接把nginx炸了。显然,这种操作方式是错的不能再错了,索性我现在发现了如何正确为rancher的ingress-nginx附加configmap。
关于configmap
当使用configmap或者负载均衡注释时,一切都是热更新的,改完不用重启pod,即时生效。不用再担心炸集群,也不用担心服务的可用性。即使配置错误也不会发生什么坏事,只是新配置无法生效而已,不过rancher的web ui在这方面没有错误提示。
ingress-nginx的configmap文档:
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
使用configmap
当在负载均衡的注释中添加配置时,需要在key中添加前缀nginx.ingress.kubernetes.io/
,而且不是所有配置项都被支持,参见ingress-nginx注释项文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/
为rke2-ingress-nginx附加配置映射(configmap)必须使用指定的名称,这个名称可以在System/kube-system/rke2-ingress-nginx-controller
工作负载的入口/命令
中找到
如图所示,rancher2.5的rke2-ingress-nginx的configmap是kube-system命名空间下名称为rke2-ingress-nginx-controller的配置映射。
正常情况下,这个configmap是不存在的,需要手动创建,在资源/配置映射
中添加相应配置映射后,直接添加键值对即可。
配置项参考上述configmap文档即可