Mik*_*ski 3 interpolation nginx kubernetes
我在Kubernetes上运行Nginx.
当我使用以下proxy_pass指令时,它按预期工作:
proxy_pass "http://service-1.default";
Run Code Online (Sandbox Code Playgroud)
但是以下不起作用:
set $service "service-1";
proxy_pass "http://$service.default";
Run Code Online (Sandbox Code Playgroud)
我收到一个错误说 no resolver defined to resolve service-1.default
据我所知proxy_pass,收到完全相同的字符串,为什么它表现不同?
我需要使用变量,因为我正在使用正则表达式从URL动态获取服务名称.
我找到了原因和解决方案.
Nginx检测是否正在使用变量proxy_pass(我不知道它是如何做的).如果没有变量,则在启动时解析主机名并缓存IP地址.如果有变量,它使用解析器(DNS服务器)在运行时查找IP.
所以解决方案是指定Kube DNS服务器,如下所示:
resolver kube-dns.kube-system.svc.cluster.local valid=5s;
set $service "service-1";
proxy_pass "http://$service.default.svc.cluster.local";
Run Code Online (Sandbox Code Playgroud)
请注意,必须使用服务的完整本地DNS名称,您可以通过运行获得该名称nslookup service-1.
| 归档时间: |
|
| 查看次数: |
1945 次 |
| 最近记录: |