安装方式:单节点+L7负载均衡
方案B-使用权威CA机构颁发的证书
如果您公开发布您的应用,理想情况下应该使用由权威CA机构颁发的证书。
提示
- 证书必须是
PEM格式
,PEM
只是一种证书类型,并不是说文件必须是PEM为后缀,具体可以查看证书类型- 这里的证书不需要进行
base64
加密- 给容器添加
--no-cacerts
参数禁止Rancher生成默认的CA证书
如果您使用由权威CA机构颁发的证书,则无需在Rancher容器中安装您的CA证书,只需运行下面的基本安装命令即可: 搭建rancher2.3.3,然后导入已经存在的k8s集群(v1.15.1)
docker run -d --restart=unless-stopped --name=rancher2-k8s \
-p 18080:80 -p 1443:443 \
-v /var/lib/rancher:/var/lib/rancher/ \
-v /var/log/rancher/auditlog:/var/log/auditlog \
-e CATTLE_SYSTEM_CATALOG=bundled \
-e AUDIT_LEVEL=3 \
rancher/rancher:v2.3.3 --no-cacerts
###配置七层负载均衡器
默认情况下,rancher容器会将80端口上的请求重定向到443端口上。如果Rancher Server通过负载均衡器来代理,这个时候请求是通过负载均衡器发送给Rancher Server,而并非客户端直接访问Rancher Server。在非全局https
的环境中,如果以外部负载均衡器作为ssl终止,这个时候通过负载均衡器的https
请求将需要被反向代理到Rancher Server http(80)上。在负载均衡器上配置X-Forwarded-Proto: https
参数,Rancher Server http(80)上收到负载均衡器的请求后,就不会再重定向到https(443)上。
负载均衡器或代理必须配置为支持以下内容:
- WebSocket连接
- SPDY/HTTP/2协议
- 传递/设置一下headers:
Header | Value | 描述 |
---|---|---|
Host | 传递给Rancher的主机名 | 识别客户端请求的主机名 |
X-Forwarded-Porto | https | 识别客户端用于连接负载均衡器的协议。"注意:"如果存在此标头,rancher/rancher 不会将HTTP重定向到HTTPS |
X-Forwarded-Port | Port used to reach Rancher | 识别客户端用于连接负载均衡器的端口 |
X-Forwarded-For | IP of the client connection | 识别客户端的原始IP地址 |
- Nginx配置文件示例
此Nginx配置文件在Nginx version 1.13(mainline)和1.14(stable)通过测试
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
http {
upstream rancher {
server rancher-server:80;
}
map $http_upgrade $connection_upgrade {
default Upgrade;
'' close;
}
server {
listen 443 ssl http2; # 如果是升级或者全新安装v2.2.2,需要禁止http2,其他版本不需修改。
server_name FQDN;
ssl_certificate <您自己的自签名证书>;
ssl_certificate_key <您自己的自签名证书私钥>;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://rancher;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# This allows the ability for the execute shell window to remain open for up to 15 minutes.
## Without this parameter, the default is 1 minute and will automatically close.
proxy_read_timeout 900s;
proxy_buffering off;
}
}
server {
listen 80;
server_name FQDN;
return 301 https://$server_name$request_uri;
}
}
- 为了减少网络传输的数据量,可以在七层代理的
http
定义中添加GZIP
功能
# Gzip Settings
gzip on;
gzip_disable "msie6";
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_vary on;
gzip_static on;
gzip_proxied any;
gzip_min_length 0;
gzip_comp_level 8;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml application/font-woff
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject font/woff2
image/x-icon image/png image/jpeg;