泛域名转发

    先说一种简单的方法,这也是大多数人的第一反应:配置 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):