变更 Rancher Server IP 或域名

本文永久链接: https://www.xtplayer.cn/rancher/replace-ip-domain/

准备全部集群的直连 kubeconfig 配置文件

默认情况,在 Rancher UI 上复制的 kubeconfig 是通过 cluster agent 代理连接到 K8S 集群的。在变更 SSL 证书后,因为一些参数发送变化,需要通过 kubectl 命令行去修改配置。在变更 SSL 证书后会导致 cluster agent 无法连接 Rancher server,从而导致 kubectl 无法使用 Rancher UI 上复制的 kubeconfig 去操作 K8S 集群。因此,建议在做域名或 IP 变更之前,准备好所有集群的直连 kubeconfig 配置文件。具体可参考:恢复 kubectl 配置文件

提示

  1. 2.1.x 以前的版本,可在 Master 节点的 /etc/kubernetes/.tmp 路径下找到 kubecfg-kube-admin.yml,这个是具有集群管理员权限的直连 kubeconfig 配置文件;

  2. 操作之前备份 Rancher Server

准备证书

SSL 证书与域名或 IP 有绑定关系,客户端在访问 Server 端时,ssl 证书用于客户端访问地址的检验作用。客户端通过域名或 IP 访问 Server 端时,会先进行 SSL 证书验证,如果客户端访问的 IP 或域名与 SSL 证书中预先绑定的 IP 或域名不一致,那么 SSL 可以认为 Server 端是伪造了,SSL 验证无法通过从而导致客户端无法连接 Server 端。

因此,如果更换了 Server 端的 IP 或域名,一般就会涉及到 SSL 证书更换,除非在最开始生成 SSL 证书的时候加入了后期可能需要更换的 IP 或域名

  • 自签名 ssl 证书

    复制以下代码另存为 create_self-signed-cert.sh 或者其他您喜欢的文件名。修改代码开头的 CN(域名),如果需要使用 ip 去访问 Rancher Server,那么需要给 ssl 证书添加扩展 IP,多个 IP 用逗号隔开。如果想实现多个域名访问 Rancher Server,则添加扩展域名(SSL_DNS),多个 SSL_DNS 用逗号隔开。

    #!/bin/bash -e
    
    help ()
    {
        echo  ' ================================================================ '
        echo  ' --ssl-domain: 生成 ssl 证书需要的主域名,如不指定则默认为 www.rancher.local,如果是 ip 访问服务,则可忽略;'
        echo  ' --ssl-trusted-ip: 一般 ssl 证书只信任域名的访问请求,有时候需要使用 ip 去访问 server,那么需要给 ssl 证书添加扩展 IP,多个 IP 用逗号隔开;'
        echo  ' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN),多个扩展域名用逗号隔开;'
        echo  ' --ssl-size: ssl 加密位数,默认 2048;'
        echo  ' --ssl-cn: 国家代码(2 个字母的代号),默认 CN;'
        echo  ' 使用示例:'
        echo  ' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com \ '
        echo  ' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
        echo  ' ================================================================'
    }
    
    case "$1" in
        -h|--help) help; exit;;
    esac
    
    if [[ $1 == '' ]];then
        help;
        exit;
    fi
    
    CMDOPTS="$*"
    for OPTS in $CMDOPTS;
    do
        key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
        value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
        case "$key" in
            --ssl-domain) SSL_DOMAIN=$value ;;
            --ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
            --ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
            --ssl-size) SSL_SIZE=$value ;;
            --ssl-date) SSL_DATE=$value ;;
            --ca-date) CA_DATE=$value ;;
            --ssl-cn) CN=$value ;;
        esac
    done
    
    # CA 相关配置
    CA_DATE=${CA_DATE:-3650}
    CA_KEY=${CA_KEY:-cakey.pem}
    CA_CERT=${CA_CERT:-cacerts.pem}
    CA_DOMAIN=cattle-ca
    
    # ssl 相关配置
    SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
    SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
    SSL_DATE=${SSL_DATE:-3650}
    SSL_SIZE=${SSL_SIZE:-2048}
    
    ## 国家代码(2 个字母的代号),默认 CN;
    CN=${CN:-CN}
    
    SSL_KEY=$SSL_DOMAIN.key
    SSL_CSR=$SSL_DOMAIN.csr
    SSL_CERT=$SSL_DOMAIN.crt
    
    echo -e "\033[32m ---------------------------- \033[0m"
    echo -e "\033[32m       | 生成 SSL Cert |       \033[0m"
    echo -e "\033[32m ---------------------------- \033[0m"
    
    if [[ -e ./${CA_KEY} ]]; then
        echo -e "\033[32m ====> 1. 发现已存在 CA 私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 \033[0m"
        mv ${CA_KEY} "${CA_KEY}"-bak
        openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
    else
        echo -e "\033[32m ====> 1. 生成新的 CA 私钥 ${CA_KEY} \033[0m"
        openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
    fi
    
    if [[ -e ./${CA_CERT} ]]; then
        echo -e "\033[32m ====> 2. 发现已存在 CA 证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 \033[0m"
        mv ${CA_CERT} "${CA_CERT}"-bak
        openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
    else
        echo -e "\033[32m ====> 2. 生成新的 CA 证书 ${CA_CERT} \033[0m"
        openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
    fi
    
    echo -e "\033[32m ====> 3. 生成 Openssl 配置文件 ${SSL_CONFIG} \033[0m"
    cat > ${SSL_CONFIG} <<EOM
    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth, serverAuth
    EOM
    
    if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} ]]; then
        cat >> ${SSL_CONFIG} <<EOM
    subjectAltName = @alt_names
    [alt_names]
    EOM
        IFS=","
        dns=(${SSL_TRUSTED_DOMAIN})
        dns+=(${SSL_DOMAIN})
        for i in "${!dns[@]}"; do
          echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}
        done
    
        if [[ -n ${SSL_TRUSTED_IP} ]]; then
            ip=(${SSL_TRUSTED_IP})
            for i in "${!ip[@]}"; do
              echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}
            done
        fi
    fi
    
    echo -e "\033[32m ====> 4. 生成服务 SSL KEY ${SSL_KEY} \033[0m"
    openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}
    
    echo -e "\033[32m ====> 5. 生成服务 SSL CSR ${SSL_CSR} \033[0m"
    openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG}
    
    echo -e "\033[32m ====> 6. 生成服务 SSL CERT ${SSL_CERT} \033[0m"
    openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} \
        -CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} \
        -days ${SSL_DATE} -extensions v3_req \
        -extfile ${SSL_CONFIG}
    
    echo -e "\033[32m ====> 7. 证书制作完成 \033[0m"
    echo
    echo -e "\033[32m ====> 8. 以 YAML 格式输出结果 \033[0m"
    echo "----------------------------------------------------------"
    echo "ca_key: |"
    cat $CA_KEY | sed 's/^/  /'
    echo
    echo "ca_cert: |"
    cat $CA_CERT | sed 's/^/  /'
    echo
    echo "ssl_key: |"
    cat $SSL_KEY | sed 's/^/  /'
    echo
    echo "ssl_csr: |"
    cat $SSL_CSR | sed 's/^/  /'
    echo
    echo "ssl_cert: |"
    cat $SSL_CERT | sed 's/^/  /'
    echo
    
    echo -e "\033[32m ====> 9. 附加 CA 证书到 Cert 文件 \033[0m"
    cat ${CA_CERT} >> ${SSL_CERT}
    echo "ssl_cert: |"
    cat $SSL_CERT | sed 's/^/  /'
    echo
    
    echo -e "\033[32m ====> 10. 重命名服务证书 \033[0m"
    echo "cp ${SSL_DOMAIN}.key tls.key"
    cp ${SSL_DOMAIN}.key tls.key
    echo "cp ${SSL_DOMAIN}.crt tls.crt"
    cp ${SSL_DOMAIN}.crt tls.crt
    
  • 权威认证证书

    把权威证书文件重命名为需要的文件名:

    cp xxx.key tls.key
    cp xxx.crt tls.crt
    

    更新证书(可选)

提示

证书与域名或 IP 有绑定关系,一般情况更换域名或 IP 需更换证书。如果之前配置的证书是一个通配证书或者之前配置的证书已经包含了需要变更的域名或 IP,那么证书则可以不用更换。

Rancher 单节点运行(默认容器自动生成自签名 SSL 证书)

完整文章请访问:https://www.xtplayer.cn/rancher/replace-ip-domain/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪晓露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值