本文永久链接: 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 -ehelp ()
    {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;;
    esacif [[ $1 == '' ]];thenhelp;exit;
    fiCMDOPTS="$*"
    for OPTS in $CMDOPTS;
    dokey=$(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.crtecho -e "\033[32m ---------------------------- \033[0m"
    echo -e "\033[32m       | 生成 SSL Cert |       \033[0m"
    echo -e "\033[32m ---------------------------- \033[0m"if [[ -e ./${CA_KEY} ]]; thenecho -e "\033[32m ====> 1. 发现已存在 CA 私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 \033[0m"mv ${CA_KEY} "${CA_KEY}"-bakopenssl genrsa -out ${CA_KEY} ${SSL_SIZE}
    elseecho -e "\033[32m ====> 1. 生成新的 CA 私钥 ${CA_KEY} \033[0m"openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
    fiif [[ -e ./${CA_CERT} ]]; thenecho -e "\033[32m ====> 2. 发现已存在 CA 证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 \033[0m"mv ${CA_CERT} "${CA_CERT}"-bakopenssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
    elseecho -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}"
    fiecho -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
    EOMif [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} ]]; thencat >> ${SSL_CONFIG} <<EOM
    subjectAltName = @alt_names
    [alt_names]
    EOMIFS=","dns=(${SSL_TRUSTED_DOMAIN})dns+=(${SSL_DOMAIN})for i in "${!dns[@]}"; doecho DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}doneif [[ -n ${SSL_TRUSTED_IP} ]]; thenip=(${SSL_TRUSTED_IP})for i in "${!ip[@]}"; doecho IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}donefi
    fiecho -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/^/  /'
    echoecho -e "\033[32m ====> 9. 附加 CA 证书到 Cert 文件 \033[0m"
    cat ${CA_CERT} >> ${SSL_CERT}
    echo "ssl_cert: |"
    cat $SSL_CERT | sed 's/^/  /'
    echoecho -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/

变更 Rancher Server IP 或域名相关推荐

  1. DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网...

    我自己的命令: server端: dns2tcpd -F -d 1 -f ./dns2tcpd.conf 输出: 09:08:59 : Debug options.c:97 Add resource ...

  2. nginx-配置基于ip或域名的虚拟主机

    [0]README: nginx 可以配置多种类型的虚拟主机:  类型1) 基于ip的虚拟主机: 类型2)基于域名的虚拟主机: 类型3)基于端口的虚拟主机: [1]配置基于 ip 的虚拟主机的准备工作 ...

  3. FAQ宝典之Rancher Server

    1 Docker运行Rancher Server容器应该注意什么? 需要注意运行rancher server容器时,不要使用host模式.程序中有些地方定义的是localhost或者127.0.0.1 ...

  4. 搭建个人云服务器ubuntu18+公网ip+免费域名绑定freenom+个人网盘chfs

                 搭建个人云服务器ubuntu18+公网ip+免费域名绑定freenom+个人网盘chfs 动机:网上看过一个大神用自己的服务器做备份(同时还鄙视了bdyun)正好前段时间下载 ...

  5. Tomcat配置--如何能够让外网通过公网IP或域名访问到服务器上面的项目

    今天突然想到自己还有一台服务器可以使用,于是就准备把之前做的一个网站弄上去玩玩.结果发现不知道是因为太久没用还是什么原因,出问题了.死活连不上,就重装了一下.于是就出现了这个问题,Tomcat忘记怎么 ...

  6. 制作一个ip多域名访问,或一个ip不同端口访问,或多个ip访问的网站。

    环境:windows server 2008 64位 一.在windows2008上安装IIS服务 下一步 安装完成关闭 二.搭建测试网站 127.0.0.1连接测试 域名测试 修改host文件 C: ...

  7. ASP.NET站点使用IP或域名访问的connectionStrings配置方法

    ASP.NET站点使用IP或域名访问时,connectionStrings节的设置方法,域名无需在配置文件中设置,server只在路由器上设置好转发规则(端口)即可,服务器装好域名客户端即可 IP访问 ...

  8. linux/windows_ip查看(公网ip/私网ip)/通过域名查找ip/解读tracert 的返回结果

    linux/windows_ip查看(公网ip/私网ip)/通过域名查找ip/解读tracert 的返回结果 references [How to Check the IP Address in Li ...

  9. Linux C 获取本地 ip mac 域名对应 ip

    获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...

  10. python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel

    dns tunnel确认方法,查询子域名最终的解析地址: 使用方法:python dig_trace.py  "<7cf1e56b 67fc90f8 caaae86e 0787e907 ...

最新文章

  1. 在Eclipse中导入Java程序
  2. linux 提取字符串一部分,Linux Shell 截取字符串的方法示例
  3. 1.MySQL与MongoDB的操作对比,以及区别
  4. bat脚本注释多行_cmd批处理常用符号详解
  5. ElementUI el-time-picker-只显示小时、分钟,分并添加范围校验
  6. TREX搜索的执行最后也是通过HTTP call来完成的
  7. SAP SD里CDS view对status的设计
  8. php 获取 table,php – 获取表对象(App_Model_TableName)作为获取结果(Zend Framework)
  9. 面试精讲之面试考点及大厂真题 - 分布式专栏 17 ElasticSearch解决大数据量检索难题
  10. AAAI 2020 | 首个使用 NAS 设计的 GCN,达到动作识别SOTA,代码将开源
  11. 在百度超级链Xuper上部署智能合约并实现存证功能
  12. 写在前面--点燃酱爆心中的那团火
  13. POJ NOI0105-43 质因数分解
  14. jQuery Mobile中弹窗popup的data-*选项
  15. 对比两个文件内容差异VS Visual Studio Code
  16. ajax 传文件和参数,Ajax上传文件及携带参数
  17. [转载]Ext.form.BasicForm getValues()和getFie_-Chaz-_新浪博客
  18. vue 项目实现短信发送
  19. Linux工具篇 | Ubuntu安装string命令
  20. 服务器断电mysql文件丢失_服务器断电了怎么恢复数据?

热门文章

  1. 转载:h5标签中的embed标签
  2. 互联网教育:玩法与困境
  3. 基于matlab的文字识别算法-课程设计
  4. excel----分组后统计
  5. 华硕电脑连接不上wifi_华硕电脑不能连接wifi怎么办
  6. 20172328《程序设计与数据结构》第二周学习总结
  7. HTML——倒计时制作
  8. Metricbeat监听容器CPU利用率,内存等使用情况,发送给ElasticSearch并展示在kibana
  9. No package erlang available
  10. 新版标准日本语高级_第13课