大家都知道rancher默认端口是80/443,而且rancher必须在HTTPS协议下面工作,也就是说rancher必须通过HTTPS协议在443端口上面发布。
这个比较恶心,因为rancher属于集群管理总控制台,这么重要的服务怎么可以开放到公网上面去呢?
福哥想到一个办法解决这个问题,就是把rancher放到Nginx服务后面去,这样可以在Nginx里面对来访IP地址进行限制,非授权的IP地址不允许它接入进来,这样就安全了!
配置Nginx反向代理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可以根据自己的情况调整参数,同样的一个要求就是要设置容器网络为自定义网络,且自定义必须和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
Nginx的80端口让它直接转到Nginx的443端口上,也就是HTTPS协议上,让HTTPS去响应用户的请求,反正rancher也是必须用HTTPS访问的。
server {
listen 80;
server_name localhost;
rewrite ^/(.*)$ https://$host/$1;
}
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;
}
}
}
现在通过公网网卡IP访问我们的rancher后台测试看看。
没问题了!
将rancher放到了Nginx后面之后,我们就可以大肆的做文章了,可以通过Nginx的IP表进行直接管理,也可以通过Cookie判断访客是否合法,还可以通过OpenResty设置更为复杂的验证方式。