本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

更新SUSE Rancher Prime证书

更新私有CA证书

按照以下步骤轮换Rancher 安装在Kubernetes集群上使用的SSL证书和私有CA,或迁移到由私有CA签署的SSL证书。

步骤摘要如下:

  1. 使用新证书和私钥创建或更新`tls-rancher-ingress` Kubernetes密文对象。

  2. 使用根CA证书创建或更新`tls-ca` Kubernetes密文对象(仅在使用私有CA时需要)。

  3. 使用Helm CLI更新Rancher安装。

  4. 重新配置Rancher代理以信任新的CA证书。

  5. 选择强制更新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证书。

  1. 调整初始安装时使用的值,使用以下命令存储当前值:

    helm get values rancher -n cattle-system -o yaml > values.yaml
  2. 检索当前部署的Rancher图表的版本字符串,以便在下面使用:

    helm ls -n cattle-system
  3. 更新`values.yaml`文件中的当前Helm值,以包含:

    ingress:
      tls:
        source: secret
    privateCA: true
    重要说明:
    由于证书是由私有CA签署的,因此确保在`values.yaml`文件中设置{xref-helm-chart-options}#_common_options[`privateCA: true`]是很重要的。
  4. 使用`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 代理。

对每个下游集群重复以下步骤:

  1. 检索代理注册 kubectl 命令:

    1. 找到下游集群的集群 ID (c-xxxxx),在 Rancher UI 的集群管理中查看集群时可以在 URL 中看到。

    2. 将 Rancher 服务器 URL 和集群 ID 添加到以下 URL: https://<rancher_server_url>/v3/clusterregistrationtokens?clusterId=<CLUSTER_ID>

    3. insecureCommand 字段复制命令,此命令用于因为正在使用私有 CA。

  2. 使用以下方法之一,使用下游集群的 kubeconfig 运行上一步的 kubectl 命令:

    1. 如果集群启用了 ACE可以调整上下文 以直接连接到下游集群。

    2. 或者,SSH 进入控制平面节点:

      • RKE:使用 文档中的步骤 生成 kubeconfig。

      • RKE2/K3s:使用安装期间填充的 kubeconfig。

5.强制更新 SUSE® Rancher Prime: Continuous Delivery 集群以重新连接 fleet-agent 到 Rancher。

在 Rancher UI 的 持续交付 视图中选择“强制更新”以允许下游集群中的 fleet-agent 成功连接到 Rancher。

为什么需要此步骤?

在 Rancher 管理的集群中,Fleet agent 存储用于连接到 Rancher 的 kubeconfig。kubeconfig 包含一个 certificate-authority-data 字段,该字段包含 Rancher 使用的证书的 CA。更改 CA 时,需要更新此块以允许 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 中创建的新证书。

  1. 调整初始安装时使用的值,使用以下命令存储当前值:

    helm get values rancher -n cattle-system -o yaml > values.yaml
  2. 还获取当前部署的 Rancher chart 的版本字符串:

    helm ls -n cattle-system
  3. 更新 values.yaml 文件中的当前 Helm 值:

    1. 由于不再使用私有 CA,请去除 privateCA: true 字段,或将其设置为 false

    2. 根据需要调整 ingress.tls.source 字段。请 参考 chart 选项 获取更多详细信息。以下是一些示例:

      1. 如果使用公共 CA,请继续使用值:secret

      2. 如果使用 Let’s Encrypt,请将值更新为:letsEncrypt

  4. 使用 values.yaml 文件更新 Rancher chart 的 Helm 值,以及当前 chart 版本以防止升级:

    helm upgrade rancher rancher-prime/rancher \
      --namespace cattle-system \
      -f values.yaml \
      --version <DEPLOYED_RANCHER_VERSION>

4.重新配置 Rancher 代理以使用非私有/公共证书

由于不再使用私有 CA,下游集群代理上的 CATTLE_CA_CHECKSUM 环境变量应去除或设置为空字符串("")。

5.强制更新 SUSE® Rancher Prime: Continuous Delivery 集群以重新连接 fleet-agent 到 Rancher。

在 Rancher UI 的 持续交付 视图中选择“强制更新”以允许下游集群中的 fleet-agent 成功连接到 Rancher。

为什么需要此步骤?

在 Rancher 管理的集群中,Fleet agent 存储用于连接到 Rancher 的 kubeconfig。kubeconfig 包含一个 certificate-authority-data 字段,该字段包含 Rancher 使用的证书的 CA。更改 CA 时,需要更新此块以允许 fleet-agent 信任 Rancher 使用的证书。