2 - 七层负载均衡Helm HA部署
二、配置负载均衡器(以NGINX为例)
默认情况下,rancher容器会将80端口上的请求重定向到443端口上。如果rancher server通过负载均衡器来代理,这个时候请求是通过负载均衡器发送给rancher server,而并非客户端直接访问rancher server。在非全局的环境中,如果以外部负载均衡器作为ssl终止,这个时候通过负载均衡器的https
请求将需要被反向代理到rancher server http(80)上。在负载均衡器上配置X-Forwarded-Proto: https
参数,rancher server http(80)上收到负载均衡器的请求后,就不会再重定向到https(443)上。
负载均衡器或代理必须支持以下参数:
- WebSocket 连接
- SPDY/HTTP/2协议
- 传递/设置以下headers:
# 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_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;
参考
三、安装配置Helm
参考
使用helm repo add
命令添加Rancher chart仓库,访问了解Rancher tag和Chart版本。
Rancher server设计默认需要开启SSL/TLS配置来保证安全。
根据配置
服务证书
和私钥
;安装rancher server
修改
# 指定配置文件
export KUBECONFIG=xxx/xxx/xx.kubeconfig.yaml
helm --kubeconfig=$KUBECONFIG install rancher-stable/rancher \
--name rancher --namespace cattle-system \
--set hostname=<您自己的域名> \
--set tls=external
如果没有自签名ssl证书,可以参考自签名ssl证书,一键生成ssl证书;
一键生成ssl自签名证书脚本将自动生成
tls.crt、tls.key、cacerts.pem
三个文件,文件名称不能修改。如果使用您自己生成的自签名ssl证书,则需要将服务证书
和CA中间证书链
合并到tls.crt
文件中,将私钥
复制到或者重命名为tls.key
文件,将CA证书
复制到或者重命名为cacerts.pem
。使用
kubectl
在命名空间cattle-system
中创建tls-ca
secret。
注意:
ca
文件名称必须是cacerts.pem
。
- 安装rancher server
# 指定配置文件
export KUBECONFIG=xxx/xxx/xx.kubeconfig.yaml
helm --kubeconfig=$KUBECONFIG install rancher-stable/rancher \
--set hostname=<您自己的域名> \
--set privateCA=true
注意: 1.证书对应的
域名
需要与hostname
选项匹配,否则ingress
将无法代理访问Rancher。
Rancher chart有许多配置选项,可用于自定义安装以适合您的特定环境,点击查看
五、(可选)为Agent Pod添加主机别名(/etc/hosts)
如果您没有内部DNS服务器而是通过添加/etc/hosts
主机别名的方式指定的Rancher server域名,那么不管通过哪种方式(自定义、导入、Host驱动等)创建K8S集群,K8S集群运行起来之后,因为cattle-cluster-agent Pod
和cattle-node-agent
无法通过DNS记录找到Rancher server
,最终导致无法通信。
可以通过给cattle-cluster-agent Pod
和cattle-node-agent
添加主机别名(/etc/hosts),让其可以正常通信(前提是IP地址可以互通)
。
- cattle-cluster-agent pod
- cattle-node-agent pod
#指定kubectl配置文件
export kubeconfig=xxx/xxx/xx.kubeconfig.yaml
kubectl --kubeconfig=$kubeconfig -n cattle-system \
patch daemonsets cattle-node-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"xxx.rancher.com"
],
"ip": "192.168.1.100"
}
]
}
}
}