|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
更新SUSE Rancher Prime证书
更新私有CA证书
按照以下步骤轮换Rancher 安装在Kubernetes集群上使用的SSL证书和私有CA,或迁移到由私有CA签署的SSL证书。
步骤摘要如下:
-
使用新证书和私钥创建或更新`tls-rancher-ingress` Kubernetes密文对象。
-
使用根CA证书创建或更新`tls-ca` Kubernetes密文对象(仅在使用私有CA时需要)。
-
使用Helm CLI更新Rancher安装。
-
重新配置Rancher代理以信任新的CA证书。
-
选择强制更新Fleet集群以将fleet-agent连接到Rancher。
这些说明的详细信息如下。
1.创建/更新证书密文对象
首先,将服务器证书与任何中间证书连接到一个文件名为`tls.crt`的文件中,并在文件名为`tls.key`的文件中提供相应的证书密钥。
使用以下命令在Rancher(本地)管理集群中创建`tls-rancher-ingress`密文对象:
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
或者,更新现有的`tls-rancher-ingress`密文对象:
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key \
--dry-run --save-config -o yaml | kubectl apply -f -
2.创建/更新CA证书密文对象
如果新证书是由私有CA签署的,您需要将相应的根CA证书复制到文件名为`cacerts.pem`的文件中,并在`cattle-system`名称空间中创建或更新`tls-ca`密文对象。如果证书是由中间CA签署的,则`cacerts.pem`必须包含中间CA和根CA证书(按此顺序)。
要创建初始`tls-ca`密文对象:
kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem
要更新现有的`tls-ca`密文对象:
kubectl -n cattle-system create secret generic tls-ca \
--from-file=cacerts.pem \
--dry-run --save-config -o yaml | kubectl apply -f -
3.重新配置Rancher部署
如果证书来源保持不变(例如,secret),请按照步骤3a中的步骤进行操作。
但是,如果证书来源发生变化(例如,从`letsEncrypt`到`secret`),请按照步骤3b中的步骤进行操作。
3a.重新部署Rancher pods
当证书来源保持不变,但CA证书正在更新时,此步骤是必需的。
在这种情况下,需要重新部署Rancher pods,因为`tls-ca`密文对象在启动时被Rancher pods读取。
可以使用以下命令重新部署Rancher pods:
kubectl rollout restart deploy/rancher -n cattle-system
更改完成后,导航到`\https://<rancher_server_url>/v3/settings/cacerts`以验证该值是否与之前在`tls-ca`密文对象中写入的CA证书匹配。CA `cacerts`值可能在所有重新部署的Rancher pods启动之前不会更新。
3b.更新Rancher的Helm值
如果证书来源发生变化,则此步骤是必需的。如果Rancher之前配置为使用默认的自签名证书(ingress.tls.source=rancher)或Let’s Encrypt(ingress.tls.source=letsEncrypt),而现在使用由私有CA签署的证书(ingress.tls.source=secret)。
以下步骤更新Rancher图表的Helm值,以便Rancher pods和入口重新配置为使用在步骤1和2中创建的新私有CA证书。
-
调整初始安装时使用的值,使用以下命令存储当前值:
helm get values rancher -n cattle-system -o yaml > values.yaml -
检索当前部署的Rancher图表的版本字符串,以便在下面使用:
helm ls -n cattle-system -
更新`values.yaml`文件中的当前Helm值,以包含:
ingress: tls: source: secret privateCA: true重要说明:由于证书是由私有CA签署的,因此确保在`values.yaml`文件中设置{xref-helm-chart-options}#_common_options[`privateCA: true`]是很重要的。 -
使用`values.yaml`文件和当前图表版本升级Helm应用实例。版本必须匹配,以防止Rancher升级。
helm upgrade rancher rancher-prime/rancher \ --namespace cattle-system \ -f values.yaml \ --version <DEPLOYED_RANCHER_VERSION>
更改完成后,导航到`\https://<rancher_server_url>/v3/settings/cacerts`以验证该值是否与之前在`tls-ca`密文对象中写入的CA证书匹配。CA `cacerts`值可能在所有Rancher pods启动之前不会更新。
4.重新配置Rancher代理以信任私有CA
本节介绍三种方法,以重新配置Rancher代理以信任私有CA。如果以下任一情况成立,则此步骤是必需的:
-
Rancher之前配置为使用Rancher自签名证书(
ingress.tls.source=rancher)或使用Let’s Encrypt颁发的证书(ingress.tls.source=letsEncrypt) -
证书是由不同的私有CA签署的
为什么需要此步骤?
当Rancher配置为使用由私有CA签署的证书时,Rancher代理容器信任CA证书链。代理将下载的证书的校验和与`CATTLE_CA_CHECKSUM`环境变量进行比较。这意味着,当Rancher使用的私有CA证书发生更改时,环境变量`CATTLE_CA_CHECKSUM`必须相应更新。
我应该选择哪种方法?
方法1是最简单的,但要求在证书轮换后所有集群都连接到Rancher。如果在更新或重新部署Rancher部署(步骤3)后立即执行此过程,通常会出现这种情况。
如果集群与Rancher失去连接,但所有集群上都启用了授权集群端点(ACE),则选择方法2。
如果方法1和方法2不可行,则可以使用方法3作为后备。
方法 1:强制重新部署Rancher代理
对于每个下游集群,使用Rancher(本地)管理集群的Kubeconfig文件运行以下命令。
kubectl annotate clusters.management.cattle.io <CLUSTER_ID> io.cattle.agent.force.deploy=true
|
找到下游集群的集群ID(c-xxxxx),在Rancher UI的集群管理下查看集群时,可以在浏览器的URL栏中看到。 |
此命令将导致代理清单重新应用新证书的校验和。
方法 2:手动更新校验和环境变量
通过将`CATTLE_CA_CHECKSUM`环境变量更新为与新CA证书的校验和匹配的值,手动修补代理Kubernetes对象。生成新的校验和值,如下所示:
curl -k -s -fL <RANCHER_SERVER_URL>/v3/settings/cacerts | jq -r .value | sha256sum | awk '{print $1}'
使用每个下游集群的Kubeconfig更新两个代理部署的环境变量。如果集群启用了 ACE,可以调整 kubectl 上下文 以直接连接到下游集群。
kubectl edit -n cattle-system ds/cattle-node-agent
kubectl edit -n cattle-system deployment/cattle-cluster-agent
方法 3:手动重新部署 Rancher 代理
通过在每个下游集群的控制平面节点上运行一组命令,使用此方法重新应用 Rancher 代理。
对每个下游集群重复以下步骤:
-
检索代理注册 kubectl 命令:
-
找到下游集群的集群 ID (c-xxxxx),在 Rancher UI 的集群管理中查看集群时可以在 URL 中看到。
-
将 Rancher 服务器 URL 和集群 ID 添加到以下 URL:
https://<rancher_server_url>/v3/clusterregistrationtokens?clusterId=<CLUSTER_ID> -
从
insecureCommand字段复制命令,此命令用于因为正在使用私有 CA。
-
-
使用以下方法之一,使用下游集群的 kubeconfig 运行上一步的 kubectl 命令:
5.强制更新 SUSE® Rancher Prime: Continuous Delivery 集群以重新连接 fleet-agent 到 Rancher。
在 Rancher UI 的 持续交付 视图中选择“强制更新”以允许下游集群中的 fleet-agent 成功连接到 Rancher。
从私有 CA 证书更新到公共 CA 证书
按照以下步骤执行与上述相反的过程,将证书从私有 CA 颁发更改为公共或自签名 CA。
1.创建/更新证书密文对象
首先,将服务器证书与任何中间证书连接到一个名为`tls.crt`的文件中,并在名为`tls.key`的文件中提供相应的证书密钥。
使用以下命令在Rancher(本地)管理集群中创建`tls-rancher-ingress`密文对象:
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key
或者,更新现有的`tls-rancher-ingress`密文对象:
kubectl -n cattle-system create secret tls tls-rancher-ingress \
--cert=tls.crt \
--key=tls.key \
--dry-run --save-config -o yaml | kubectl apply -f -
2.删除 CA 证书密文对象
您将删除位于`cattle-system`名称空间中的`tls-ca`密文对象,因为它不再需要。如果需要,您也可以选择保存 `tls-ca`密文对象的副本。
要保存现有的 `tls-ca`密文对象:
kubectl -n cattle-system get secret tls-ca -o yaml > tls-ca.yaml
要删除现有的 `tls-ca`密文对象:
kubectl -n cattle-system delete secret tls-ca
3.重新配置Rancher部署
如果证书来源发生变化,则此步骤是必需的。在这种情况下,可能只是因为 Rancher 之前配置为使用默认的自签名证书 (ingress.tls.source=rancher)。
以下步骤更新 Rancher chart 的 Helm 值,以便 Rancher pod 和 ingress 重新配置为使用在步骤 1 中创建的新证书。
-
调整初始安装时使用的值,使用以下命令存储当前值:
helm get values rancher -n cattle-system -o yaml > values.yaml -
还获取当前部署的 Rancher chart 的版本字符串:
helm ls -n cattle-system -
更新
values.yaml文件中的当前 Helm 值:-
由于不再使用私有 CA,请去除
privateCA: true字段,或将其设置为false -
根据需要调整
ingress.tls.source字段。请 参考 chart 选项 获取更多详细信息。以下是一些示例:-
如果使用公共 CA,请继续使用值:
secret -
如果使用 Let’s Encrypt,请将值更新为:
letsEncrypt
-
-
-
使用
values.yaml文件更新 Rancher chart 的 Helm 值,以及当前 chart 版本以防止升级:helm upgrade rancher rancher-prime/rancher \ --namespace cattle-system \ -f values.yaml \ --version <DEPLOYED_RANCHER_VERSION>
5.强制更新 SUSE® Rancher Prime: Continuous Delivery 集群以重新连接 fleet-agent 到 Rancher。
在 Rancher UI 的 持续交付 视图中选择“强制更新”以允许下游集群中的 fleet-agent 成功连接到 Rancher。