11.10. 从社区版本的 External Secrets Operator 迁移到 External Secrets Operator for Red Hat OpenShift
从社区外部 Secret Operator 迁移到 Red Hat OpenShift 支持的外部 Secret Operator。此转换为您提供企业级支持和无缝集成,用于管理外部 secret。
以下迁移版本已被完全测试。
| 上游版本 | 安装方法 | 下游版本 |
|---|---|---|
| 0.11.0 | OLM | v1.0.0 GA |
| 0.19.0 | Helm | v1.0.0 GA |
迁移不支持回滚。
External Secrets Operator for Red Hat OpenShift 基于上游版本 0.19.0。不要尝试从外部 Secrets Operator 的更高版本进行迁移。
11.10.1. 删除社区外版本的 External Secrets Operator 复制链接链接已复制到粘贴板!
删除 community Operator 的配置资源,以便完全删除旧应用程序。此操作可防止在为 Red Hat OpenShift 安装外部 Secret Operator 前发生冲突。
先决条件
-
您必须以具有
cluster-admin角色的用户身份登录。 -
您必须安装并配置
oc命令行工具。
流程
运行以下命令,查找社区版本的 Operator 的
namespace:$ oc get operatorconfigs.operator.external-secrets.io -A以下是查找
namespace的示例:NAMESPACE NAME AGE external-secrets cluster 9m18s运行以下命令来删除
operatorconfig自定义 resrouce (CR):$ oc delete operatorconfig <config_name> -n <operator_namespace>
验证
要验证
operatorconfigCR 是否已删除,请运行以下命令:$ oc get operatorconfig -n <operator_namespace>命令必须返回
no resource found。要验证旧 Webhook 是否已删除,请运行以下命令:
$ oc get validatingwebhookconfigurations | grep external-secrets$ oc get mutatingwebhookconfigurations | grep external-secrets命令必须没有返回任何结果。
11.10.2. 卸载社区版的 External Secrets Operator 复制链接链接已复制到粘贴板!
卸载社区外部 Secret Operator,以便在迁移到 Red Hat OpenShift 的外部 Secrets Operator 后防止冲突或意外重新创建。
您必须卸载社区版的 External Secret Operator,以防止重新创建或与新 Secret Operator 冲突。卸载步骤根据社区外部 Secret Operator 安装的方式不同,但每个的先决条件都是相同的。
11.10.2.1. 卸载 helm 安装的社区外部 Secret Operator 复制链接链接已复制到粘贴板!
删除使用 Helm 安装的社区外部 Secret Operator。这有助于您释放资源并为集群维护干净的环境。
先决条件
-
您必须以具有
cluster-admin角色的用户身份登录。 -
您必须已删除
operatorconfig自定义资源(CR)。
流程
-
为 Red Hat OpenShift 安装 External Secrets Operator。
external-secrets-operator命名空间必须是 null。 运行以下命令来删除 External Secrets Operator:
$ oc helm delete <release_name> -n <operator_namespace>注意使用
helm delete可能会删除所有自定义资源定义 (CRD) 和 CR。如果命名空间external-secrets-operator为空,建议首先安装下游 Operator。
删除由 Operator Lifecycle Manager (OLM) 订阅安装的社区外部 Secret Operator。这有助于您释放资源并为集群维护干净的环境。
先决条件
-
您必须以具有
cluster-admin角色的用户身份登录。 -
您必须已删除
operatorconfigCR。
流程
运行以下命令来查找订阅名称:
$ oc get subscription -n <operator_namespace> | grep external-secrets运行以下命令来删除订阅:
$ oc delete subscription <subscription_name> -n <operator_namespace>运行以下命令来删除
ClusterServiceVersion:$ oc delete csv <csv_name> -n <operator_namespace>
11.10.2.3. 卸载安装社区外部 Secret Operator 的原始清单 复制链接链接已复制到粘贴板!
删除由原始清单安装的社区外部 Secret Operator。这有助于您释放资源并为集群维护干净的环境。
先决条件
-
您必须以具有
cluster-admin角色的用户身份登录。 -
您必须已删除
operatorconfigCR。
流程
要删除由原始清单安装的 communiity External Secrets Operator,请运行以下命令:
$ oc delete -f /path/to/your/old/manifests.yaml -n <operator_namespace>
清理社区版本后,为 Red Hat OpenShift 安装 External Secrets Operator。这会建立用于管理集群中 secret 的官方支持的服务。如需更多信息,请参阅安装 External Secrets Operator for Red Hat OpenShift。
11.10.4. 创建 ExternalSecretsConfig Operator 复制链接链接已复制到粘贴板!
创建 ExternalSecretsConfig 资源,以安装和配置核心 external-secrets 组件。此设置有助于确保正确启用 Bitwarden 和 cert-manager 支持等功能。
先决条件
- 已安装 External Secrets Operator for Red Hat OpenShift。
- 已安装 cert-manager Operator for Red Hat OpenShift。
-
您可以使用
cluster-admin权限访问集群。
流程
通过定义包含以下内容的 YAML 文件来创建
externalsecretsconfig文件:apiVersion: operator.openshift.io/v1alpha1 kind: ExternalSecretsConfig metadata: labels: app.kubernetes.io/name: cluster name: cluster spec: appConfig: logLevel: 3 webhookConfig: certificateCheckInterval: 5m0s controllerConfig: certProvider: certManager: certificateDuration: 8760h0m0s certificateRenewBefore: 30m0s injectAnnotations: "true" issuerRef: group: cert-manager.io kind: Issuer name: _<created_issuer_name>_ mode: Enabled networkPolicies: - componentName: ExternalSecretsCoreController egress: - ports: - port: 443 protocol: TCP - port: 9998 protocol: TCP name: allow-external-secrets-egress plugins: bitwardenSecretManagerProvider: mode: Enabled运行以下命令来创建
ExternalSecretsConfig对象:$ oc create -f externalsecretsconfig.yaml
验证
验证所有自定义资源(CR)是否存在,并且 API 是否使用 v1 而不是 v1beta1。CR 会被保留并由新的 Operator 自动转换。
要验证
external-secretspod 是否处于running状态,请运行以下命令:$ oc get pods -n external-secret以下是
external-secretsPod 处于running状态的输出示例。NAME READY STATUS RESTARTS AGE bitwarden-sdk-server-5b4cf48766-w7zp7 1/1 Running 0 5m external-secrets-5854b85dd5-m6zf9 1/1 Running 0 5m external-secrets-webhook-5cb85b8fdb-6jtqb 1/1 Running 0 5m要验证
SecretStoreCR 是否存在,请运行以下命令:$ oc get secretstores.external-secrets.io -A以下是验证是否存在
SecretStore的输出示例:NAMESPACE NAME AGE STATUS CAPABILITIES READY external-secrets-1 gcp-store 18min Valid ReadWrite True external-secrets-2 aws-secretstore 11min Valid ReadWrite True external-secrets bitwarden-secretsmanager 20min Valid Readwrite True要验证
ExternalSecretCR 是否存在,请运行以下命令:$ oc get externalsecrets.external-secrets.io -A以下是验证是否存在
SecretStore的输出示例:NAMESPACE NAME STORE REFRESH INTERVAL STATUS READY external-secrets-1 gcp-externalsecret gcp-store 1hr SecretSynced True external-secrets-2 aws-external-secret aws-secret-store 1hr SecretSynced True external-secrets bitwarden bitwarden-secretsmanager 1hr SecretSynced True要验证
SecretStore是否为apiVersion: external-secrets.io/v1,请运行以下命令:$ oc get secretstores.external-secrets.io -n external-secrets-1 gcp-store -o yaml以下是
SecretStore为apiVersion: external-secrets.io/v1的输出示例。apiVersion: external-secrets.io/v1 kind: SecretStore metadata: creationTimestamp: "2025-10-27T11:38:19Z" generation: 1 name: gcp-store namespace: external-secrets-1 resourceVersion: "104519" uid: 7bccb0cc-2557-4f4a-9caa-1577f0108f4b spec: . . . status: capabilities: ReadWrite conditions: - lastTransitionTime: "2025-10-27T11:38:19Z" message: store validated reason: Valid status: "True" type: Ready要验证
ExternalSecret是否为apiVersion: external-secrets.io/v1,请运行以下命令:$ oc get externalsecrets.external-secrets.io -n external-secrets-1 gcp-externalsecret -o yaml以下是
ExternalSecret为apiVersion: external-secrets.io/v1的输出示例。apiVersion: external-secrets.io/v1 kind: ExternalSecret metadata: creationTimestamp: "2025-10-27T11:39:03Z" generation: 1 name: gcp-externalsecret namespace: external-secrets-1 resourceVersion: "104532" uid: 93a3295a-a3ad-4304-90e1-1328d951e5fb spec: . . . status: binding: name: k8s-secret-gcp conditions: - lastTransitionTime: "2025-10-27T11:39:03Z" message: secret synced reason: SecretSynced status: "True" type: Ready refreshTime: "2025-10-27T12:13:15Z" syncedResourceVersion: 1-f47fe3c0b255b6dd8047cdffa772587bb829efe7a1cb70febeda2eb2