背景

一套环境配置多个Ingress Nginx,一个是给到正式包,一个是给马甲包使用。

  • 可以让同一套后端代码同时服务于两个 App
  • ingress 不同,入口的 LB 地址也不同
  • 外界无法察觉这两个 App 其实是由同一套后端代码所提供的服务

PS: 其实这功能和 Nginx 的反向代理很像,但是在同一套 kubernetes 集群环境下,同时利用了云厂商提供的 LB 功能。

附件下载:ingress-nginx-hlzon.zip

附件配置仅供参考,我们所部署的环境是 AWS EKS,可以根据不同的云厂商设定不同 Annotations。

1. 安装 ingress nginx for hlzon

配置文件已写好,直接执行以下命令:

1
helm -n ingress-nginx install ingress-nginx-hlzon ingress-nginx/ingress-nginx -f values.hlzon.yaml --version 3.7.1

根据自身条件,适当修改一下配置文件。

若有更新 values.hlzon.yaml 文件,执行升级的命令如下:

1
2
3
helm -n ingress-nginx upgrade --install ingress-nginx-hlzon ingress-nginx/ingress-nginx -f values.hlzon.yaml --version 3.7.1

若觉得麻烦,可使用附件的 upgrade.sh 脚本

2. 控制台上启动ProxyProtocolV2协议

必须得启用这个才可以在 ingress nginx 中获取得到真实的 clientip 地址,具体操作步骤略(可以Google 搜索一下)。

3. 复制路由

1
2
cp /root/**live-prod/kube/nginx/prod-routes.yaml \
     /root/**live-prod/kube/nginx/hlzon-prod-routes.yaml

在 hlzon-prod-routes.yaml 文件中,做一下更改:

  • 所有 ingress 名字,添加 hlzon- 前缀,如 liverpool → hlzon-liverpool
  • ingress.class设定为“nginx-hlzon”
  • 所有 host 为 hilivetech.com的变更为 hlzon.com

变更示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 长连接 liverpool
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hlzon-liverpool # <-- 变更
  namespace: hilive-prod
  annotations:
    kubernetes.io/ingress.class: "nginx-hlzon" # <-- 变更
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  rules:
  - host: gw.<新域名>.com # <-- 变更
    http:
      paths:
      - path: /ws
        backend:
          serviceName: liverpool
          servicePort: 9633

4. 应用路由

1
2
kubectl -n **live-prod apply -f hlzon-prod-routes.yaml 
kubectl get ingress | grep hlzon # 查看结果