泛域名转发
先说一种简单的方法,这也是大多数人的第一反应:配置 Ingress 规则
假如泛域名有两个不同 Host 分别转发到不同 Service,Ingress 类似这样写:
但是!如果 Host 非常多会怎样?(比如200+)
- 每次新增 Host 都要改 Ingress 规则,太麻烦
- 单个 Ingress 上面的规则越来越多,更改规则对 LB 的压力变大,可能会导致偶尔访问不了
这个反向代理服务可以是 Nginx+Lua脚本 来实现,或者自己写个简单程序来做反向代理,这里我用 OpenResty 来实现,它可以看成是 Nginx 的发行版,自带 lua 支持。
有几点需要说明下:
- nginx 的
proxy_pass
后面跟的如果是可变的域名(非IP,需要 dns 解析),它需要一个域名解析器,不会走默认的 dns 解析,需要在 里添加resolver
配置项来设置一个外部的 dns 解析器 - 这个解析器我们是用 go-dnsmasq 来实现,它可以将集群的 dns 解析代理给 nginx,以 sidecar 的形式注入到 pod 中,监听 53 端口
nginx.conf
里关键的配置如下图所示:
下面给出完整的 yaml 示例
proxy.yaml
:
让该代理服务暴露公网访问可以用 Service 或 Ingress
用 Ingress 的示例 (ingress.yaml
):