设置以下注释时:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "ALPHA"
nginx.ingress.kubernetes.io/session-cookie-path: /
他们最终在nginx.conf中在哪里?
我正在使用difftool比较nginx.conf之前和之后,但配置是相同的。
如果我例如添加一个:
nginx.ingress.kubernetes.io/rewrite-target /$1
nginx.conf 得到更新。
结果:
rewrite "(?i)/myapp(/|$)(.*)" /$2 break;
简短的回答是,这些设置存在于nginx-ingress使用的lua nginx模块的内存中。
有关其工作原理的较长答案和解释,请参见 https://kubernetes.github.io/ingress-nginx/how-it-works 的文档。特别:
但请务必注意,我们不会在仅影响上游配置的更改(即部署应用时端点更改)时重新加载 Nginx。我们使用 https://github.com/openresty/lua-nginx-module 来实现这一点。请查看以下内容以了解有关其完成方式的更多信息。
下面引用的部分随后提到:
在每个端点更改时,控制器都会从它看到的所有服务中获取端点,并生成相应的后端对象。然后,它将这些对象发送到在 Nginx 中运行的 Lua 处理程序。Lua 代码反过来将这些后端存储在共享内存区域中。然后balancer_by_lua,对于在上下文中运行的每个请求,Lua 代码会检测它应该从哪些端点中选择上游对等体,并应用配置的负载均衡算法来选择对等方。
有问题的后端对象具有会话和 Cookie 信息。接收此消息的代码位于 https://github.com/kubernetes/ingress-nginx/blob/57a0542fa356c49a6afb762cddf0c7dbf0b156dd/rootfs/etc/nginx/lua/balancer/sticky.lua#L151-L166。特别是,同步函数中有这样一行:
ngx_log(INFO, string_format("[%s] nodes have changed for backend %s", self.name, backend.name))
这表明在对后端进行此类更改时,您应该在nginx日志中看到更改的日志条目。