设置以下注释时:
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;
答案 0 :(得分:1)
简短的答案是,这些设置存在于nginx-ingress使用的lua nginx module的内存中。
https://kubernetes.github.io/ingress-nginx/how-it-works的文档中提供了有关此方法工作原理的更详细的答案和解释。特别是:
请务必注意,我们不会在仅影响上游配置的更改(即,部署应用程序时端点更改)上重新加载Nginx。我们使用https://github.com/openresty/lua-nginx-module实现这一目标。请查看下面的内容,以了解有关操作方法的更多信息。
下面引用的部分提到:
在每个端点更改上,控制器都会从其看到的所有服务中获取端点并生成相应的Backend对象。然后,将这些对象发送到在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日志中看到有关更改的日志条目。