Nginx反向代理rancher服务器的方法【20220416】

鬼谷子叔叔 - 2022-04-14 15:17

介绍

介绍

大家都知道rancher默认端口是80/443,而且rancher必须在HTTPS协议下面工作,也就是说rancher必须通过HTTPS协议在443端口上面发布。

这个比较恶心,因为rancher属于集群管理总控制台,这么重要的服务怎么可以开放到公网上面去呢?

福哥想到一个办法解决这个问题,就是把rancher放到Nginx服务后面去,这样可以在Nginx里面对来访IP地址进行限制,非授权的IP地址不允许它接入进来,这样就安全了!

配置Nginx反向代理rancher服务器需要服务器具有双网卡,一个内网,一个公网,如果服务器不具备这个条件的话,后面就没必要看了!

安装

安装Rancher

安装rancher可以根据自己的情况调整参数,唯一的要求就是要设置容器的网络为自定义网络,这样可以在Nginx里面直接访问rancher容器。

为了安全考虑,rancher容器要把端口映射到内网网卡对应的网络上面,后面添加主机节点的时候也是通过内网网络进行通信的!

福哥的内网网络的网段是192.168.168.x,内网网卡IP是192.168.168.116。

docker run -tid \
--name nginx \
-h nginx \
--net bridge2 \
-p 192.168.4.116:80:80 \
-p 192.168.4.116:443:443 \
--memory 256m \
--memory-swap -1 \
--restart unless-stopped \
nginx:1.20

安装Nginx

安装nginx可以根据自己的情况调整参数,同样的一个要求就是要设置容器网络为自定义网络,且自定义必须和Rancher使用的网络是同一个网络。

nginx容器要不端口映射到公网网卡对应的网络上面,这样我们才能在外面访问rancher后台!

福哥的公网网络的网段是192.168.4.x,公网网卡IP是192.168.4.116。

docker run -tid \
--name ttt \
-h ttt \
--net bridge2 \
-p 192.168.4.116:80:80 \
-p 192.168.4.116:443:443 \
--restart always \
nginx:1.20

配置

HTTP

Nginx的80端口让它直接转到Nginx的443端口上,也就是HTTPS协议上,让HTTPS去响应用户的请求,反正rancher也是必须用HTTPS访问的。

server {
    listen       80;
    server_name  localhost;

    rewrite ^/(.*)$ https://$host/$1;
}

home/topic/2022/0420/10/27d34362e7301e4122cc992018f5049e.png

HTTPS

Nginx的443端口让它转发给rancher的443端口上,这里需要设置SSL相关参数,还需要准备一套SSL证书。

福哥是SSL

server {
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate     rancher.tongfu.net.crt;
    ssl_certificate_key rancher.tongfu.net.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass   https://rancher-rancher;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
        add_header 'Access-Control-Allow-Credentials' 'true';
        if ( $request_method = 'OPTIONS' ) {
            return 200;
        }
    }
}

home/topic/2022/0420/11/7087ff5602ee3b2f5d2efe3407264de9.png

测试

现在通过公网网卡IP访问我们的rancher后台测试看看。


没问题了!

总结

将rancher放到了Nginx后面之后,我们就可以大肆的做文章了,可以通过Nginx的IP表进行直接管理,也可以通过Cookie判断访客是否合法,还可以通过OpenResty设置更为复杂的验证方式。