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:
    1. # Gzip Settings
    2. gzip on;
    3. gzip_disable "msie6";
    4. gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    5. gzip_vary on;
    6. gzip_static on;
    7. gzip_proxied any;
    8. gzip_min_length 0;
    9. gzip_comp_level 8;
    10. gzip_buffers 16 8k;
    11. gzip_types
    12. text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml application/font-woff
    13. text/javascript application/javascript application/x-javascript
    14. text/x-json application/json application/x-web-app-manifest+json
    15. text/css text/plain text/x-component
    16. font/opentype application/x-font-ttf application/vnd.ms-fontobject font/woff2
    17. image/x-icon image/png image/jpeg;

    参考

    三、安装配置Helm

    参考

    使用helm repo add命令添加Rancher chart仓库,访问了解Rancher tag和Chart版本

    Rancher server设计默认需要开启SSL/TLS配置来保证安全。

    • 根据配置服务证书私钥

    • 安装rancher server

    修改

    1. # 指定配置文件
    2. export KUBECONFIG=xxx/xxx/xx.kubeconfig.yaml
    3. helm --kubeconfig=$KUBECONFIG install rancher-stable/rancher \
    4. --name rancher --namespace cattle-system \
    5. --set hostname=<您自己的域名> \
    6. --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-casecret。

    注意: ca文件名称必须是cacerts.pem

    • 安装rancher server
    1. # 指定配置文件
    2. export KUBECONFIG=xxx/xxx/xx.kubeconfig.yaml
    3. helm --kubeconfig=$KUBECONFIG install rancher-stable/rancher \
    4. --set hostname=<您自己的域名> \
    5. --set privateCA=true

    注意: 1.证书对应的域名需要与hostname选项匹配,否则ingress将无法代理访问Rancher。

    Rancher chart有许多配置选项,可用于自定义安装以适合您的特定环境,点击查看

    五、(可选)为Agent Pod添加主机别名(/etc/hosts)

    如果您没有内部DNS服务器而是通过添加/etc/hosts主机别名的方式指定的Rancher server域名,那么不管通过哪种方式(自定义、导入、Host驱动等)创建K8S集群,K8S集群运行起来之后,因为cattle-cluster-agent Podcattle-node-agent无法通过DNS记录找到Rancher server,最终导致无法通信。

    可以通过给cattle-cluster-agent Podcattle-node-agent添加主机别名(/etc/hosts),让其可以正常通信(前提是IP地址可以互通)

    • cattle-cluster-agent pod
    • cattle-node-agent pod
    1. #指定kubectl配置文件
    2. export kubeconfig=xxx/xxx/xx.kubeconfig.yaml
    3. kubectl --kubeconfig=$kubeconfig -n cattle-system \
    4. patch daemonsets cattle-node-agent --patch '{
    5. "spec": {
    6. "template": {
    7. "spec": {
    8. "hostAliases": [
    9. {
    10. "hostnames":
    11. [
    12. "xxx.rancher.com"
    13. ],
    14. "ip": "192.168.1.100"
    15. }
    16. ]
    17. }
    18. }
    19. }