首页 > 解决方案 > 在哪里可以找到为 nginx.ingress.kubernetes.io/affinity 注释生成的配置

问题描述

设置以下注释时:

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;

标签: nginxkuberneteskubernetes-ingressnginx-ingress

解决方案


简短的回答是这些设置存在于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 日志中看到更改的日志条目。


推荐阅读