Rancher使用NGINX进行反向代理无效

Rancher Server 设置

  • Rancher 版本:
  • 安装选项 (Docker install/Helm Chart):
    • Helm Chart 安装
    • Local集群 RKE1
    • 在线部署

Rancher Server 部署的服务器IP
192.168.100.54
192.168.100.96
192.168.100.98

Nginx 部署的服务器IP
192.168.100.125

问题描述:

目前Rancher Server 已经可以正常使用, 修改hosts文件后, 通过域名访问可以正常登录Rancher

但是使用官网提供的方法用docker部署nginx服务器, 反向代理一直不生效

Nginx配置 nginx.conf:

worker_processes 4;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

stream {
    upstream rancher_servers_http {
        least_conn;
        server 192.168.100.54:80 max_fails=3 fail_timeout=5s;
        server 192.168.100.96:80 max_fails=3 fail_timeout=5s;
        server 192.168.100.98:80 max_fails=3 fail_timeout=5s;
    }
    server {
        listen 80;
        proxy_pass rancher_servers_http;
    }

    upstream rancher_servers_https {
        least_conn;
        server 192.168.100.54:443 max_fails=3 fail_timeout=5s;
        server 192.168.100.96:443 max_fails=3 fail_timeout=5s;
        server 192.168.100.98:443 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     443;
        proxy_pass rancher_servers_https;
    }

}

使用Docker启动Nginx服务:

docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /root/nginx.conf:/etc/nginx/nginx.conf \
  nginx:1.14 

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED       STATUS       PORTS                                      NAMES
8915ed0ea109   nginx:1.14   "nginx -g 'daemon of…"   3 hours ago   Up 3 hours   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   friendly_sammet

修改hosts文件

192.168.100.125 rancher.example.org

结果如下:

请问是否是nginx.conf 的配置错误? 该如何才能使用Nginx反向代理Rancher Server 呢?

这个得逐步的去排查:

  1. 首先,得确认你的 local 集群的 ingress 是否正常启动,因为rancher ha 依靠 ingress 去转发,或者 local 集群其他的 pod 是否都正常启动,可在 local 集群 执行 kubectl get pods -A 去查看。
  2. 其次,确认 Rancher server 的 pod 是否正常启动,可以通过 kubectl logs -f -l app=rancher -n cattle-system 去查看是否有异常。
  3. 然后,再去排查 nginx 的日志是否正常启动,也就是查看 nginx 的 log
  4. 也可以直接将 域名(rancher.example.org)映射到 某个 local 集群的节点上,查看是否可以访问,这样能排除掉是否是 nginx 导致的问题。

通过修改hosts文件的方式, 域名访问单节点可以正常登录Rancher

# 查看ingress
[root@master ~]# kubectl get ing -A
NAMESPACE       NAME      CLASS   HOSTS                 ADDRESS                                        PORTS     AGE
cattle-system   rancher   nginx   rancher.example.org   192.168.100.54,192.168.100.96,192.168.100.98   80, 443   70m

# 查看cattle-system下的所有pod
[root@master ~]# kubectl get pod -n cattle-system
helm-operation-2qm47               0/2     Completed   0             56m
helm-operation-7v8zq               0/2     Completed   0             54m
helm-operation-hndbf               0/2     Completed   0             55m
helm-operation-kvxjv               1/2     Error       0             53m
helm-operation-l2lm9               0/2     Completed   0             53m
rancher-69c8c74777-p9759           1/1     Running     6 (60m ago)   72m
rancher-69c8c74777-rqsmb           1/1     Running     6 (59m ago)   72m
rancher-69c8c74777-t7lpc           1/1     Running     7             72m
rancher-webhook-6958cfcddf-qrbvx   1/1     Running     0             54m

# 查看docker中nginx的日志 日志为空
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED        STATUS        PORTS                                      NAMES
89509fcea188   nginx:1.14   "nginx -g 'daemon of…"   16 hours ago   Up 16 hours   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   vibrant_volhard
[root@localhost ~]# docker logs vibrant_volhard 
[root@localhost ~]# 

之前以为是在用官方文档中生成自签名证书的时候没有添加NGINX服务器为信任的IP, 又修改了证书, 发现还是不行😂