在哪里可以找到nginx.ingress.kubernetes.io/affinity注释的生成配置

时间:2019-06-19 01:28:25

标签: nginx kubernetes kubernetes-ingress nginx-ingress

设置以下注释时:

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;

1 个答案:

答案 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日志中看到有关更改的日志条目。