环境是 k8s ,需要多个域名对应不同的容器或 svc ,同时因为历史原因,不可能去修改业务代码兼容集群环境如通过 configmap 配置。
所以现在的能想到的配置类似如下:
map $host $svc {
a.com "vip-svc";
b.com "normal-svc";
c.com "mormal-svc";
..省略 1w 多
}
server {
location / {
proxy_pass http://$svc;
}
}
这个 svc 就是不同的 service 。通过 http://svc-name 的形式可以访问到。但是有个问题是,nginx 会在一次请求后固定这个 host 的 ip 在内存中。导致如果对应 svc 的 pod 发生轮换或扩缩容则 ip 会变,然后再来新请求就 504 了。
通过 ingress 由于 ingress 也是一个独立 pod 解决不了换 ip 的问题。
upstream 的 resolve 需要 nginx plus 才有。三方插件如 dynamic-upstream 运行一段时间后 cpu 奇高。
有什么更简单的解决方案吗。
ps: 容器中的 nginx 配置文件通过监听 redis ( confd )实时变更。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.