Import 集群更新 CA 证书后 Rancher 端所需操作配置

    如果没有映射目录,那么需要执行以下步骤进行备份:

    Copy

    1.2. HA 部署备份

    指定 rke 配置文件进行 local 集群备份:

    1. ./rke_linux-amd64 etcd snapshot-save --name SNAPSHOT-201903xx.db --config cluster.yml

    Copy

    RKE 会获取每个节点 etcd 的快照,并保存到每个节点的/opt/rke/etcd-snapshots目录下。

    升级完业务集群的证书之后,Rancher 中集群会报 x509 错误,需要执行以下步骤修复。

    文件准备:

    • kubeconfig: 更新证书后的集群连接配置文件

    通过以下命令删除cattle-token-xxx,它会基于最新的 CA 证书重新生成cattle-token-xxx

    2.2. 重建 Agent Pod

    因为 Agent Pod 绑定了SA,而 SA 绑定了secrets,所以当删除cattle-token-xxx后需重建 Pod,以加载新的。

    执行以下命令批量删除 Agent Pod:

    1. kubeconfig=xxx.yaml
    2. kubectl --kubeconfig=${kubeconfig} -n cattle-system get pod | grep -v 'NAME' | awk '{print $1}' | xargs kubectl --kubeconfig=${kubeconfig} -n cattle-system delete pod

    Copy

    重新生成cattle-token-xxx之后,取值tokenbase64 -d解密后备用。

    Copy

    2.4. 获取新的 CA 证书

    1. kubeconfig=xxx.yaml
    2. cattle_token=$( kubectl --kubeconfig=${kubeconfig} -n cattle-system get secret | grep 'cattle-token-' | awk '{print $1}' )

    Copy

    在重建 Agent Pod 后,cluster agent 运行起来后会自动获取新cattle-token-xxx中的catoken并上报给 rancher,并保存在 clusters crd 资源中。

    在 local 集群中执行以下命令查看对应集群的 CRD 配置 YAML 文件中和caCert是否有更新。

    serviceAccountToken对应上面步骤获取的tokencaCert对应CA证书,可以通过对比工具对比一下。

    • 备份 crd clusters 资源
    1. local_kubeconfig=xxx.yaml
    2. Cluster_ID= #浏览器地址栏查看集群ID
    3. kubectl --kubeconfig=${local_kubeconfig} get clusters ${Cluster_ID} -o yaml > ${Cluster_ID}.yaml

    Copy

    • 修改 crd clusters 资源

      • serviceAccountToken字段参数:使用上面步骤中获取的token替换;

      • caCert字段参数: 使用上面步骤获取的新 CA 证书替换;

    业务集群升级证书并按照以上步骤操作后,可以正常进入 Rancher UI,也可以正常的部署应用,但是无法查看日志和执行 web shell 终端。

    这是在 Rancher 2.1.x 版本中已知问题,因为在内存中保存着一份 CRD 资源副本,Rancher 运行时使用的内存中的 CRD 资源。在更新了 CRD 资源后,Rancher 没有感知到 CRD 资源变化,会一直使用内存中的 CRD 副本。旧 CRD 副本保存着旧的 CA 证书和 token,从而导致 Agent 无法连接 K8S 集群。