Import 集群更新 CA 证书后 Rancher 端所需操作配置
如果没有映射目录,那么需要执行以下步骤进行备份:
Copy
1.2. HA 部署备份
指定 rke 配置文件进行 local 集群备份:
./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:
kubeconfig=xxx.yaml
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
之后,取值token
并base64 -d
解密后备用。
Copy
2.4. 获取新的 CA 证书
kubeconfig=xxx.yaml
cattle_token=$( kubectl --kubeconfig=${kubeconfig} -n cattle-system get secret | grep 'cattle-token-' | awk '{print $1}' )
Copy
在重建 Agent Pod 后,cluster agent 运行起来后会自动获取新cattle-token-xxx
中的ca
和token
并上报给 rancher,并保存在 clusters crd 资源中。
在 local 集群中执行以下命令查看对应集群的 CRD 配置 YAML 文件中和caCert
是否有更新。
serviceAccountToken
对应上面步骤获取的token
,caCert
对应CA
证书,可以通过对比工具对比一下。
- 备份 crd clusters 资源
local_kubeconfig=xxx.yaml
Cluster_ID= #浏览器地址栏查看集群ID
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 集群。