11.10. 从社区版本的 External Secrets Operator 迁移到 External Secrets Operator for Red Hat OpenShift


从社区外部 Secret Operator 迁移到 Red Hat OpenShift 支持的外部 Secret Operator。此转换为您提供企业级支持和无缝集成,用于管理外部 secret。

以下迁移版本已被完全测试。

Expand
上游版本安装方法下游版本

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 命令行工具。

流程

  1. 运行以下命令,查找社区版本的 Operator 的namespace

    $ oc get operatorconfigs.operator.external-secrets.io -A
    Copy to Clipboard Toggle word wrap

    以下是查找 namespace 的示例:

    NAMESPACE             NAME        AGE
    external-secrets      cluster     9m18s
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来删除 operatorconfig 自定义 resrouce (CR):

    $ oc delete operatorconfig <config_name> -n <operator_namespace>
    Copy to Clipboard Toggle word wrap

验证

  1. 要验证 operatorconfig CR 是否已删除,请运行以下命令:

    $ oc get operatorconfig -n <operator_namespace>
    Copy to Clipboard Toggle word wrap

    命令必须返回 no resource found

  2. 要验证旧 Webhook 是否已删除,请运行以下命令:

    $ oc get validatingwebhookconfigurations | grep external-secrets
    Copy to Clipboard Toggle word wrap
    $ oc get mutatingwebhookconfigurations | grep external-secrets
    Copy to Clipboard Toggle word wrap

    命令必须没有返回任何结果。

11.10.2. 卸载社区版的 External Secrets Operator

卸载社区外部 Secret Operator,以便在迁移到 Red Hat OpenShift 的外部 Secrets Operator 后防止冲突或意外重新创建。

您必须卸载社区版的 External Secret Operator,以防止重新创建或与新 Secret Operator 冲突。卸载步骤根据社区外部 Secret Operator 安装的方式不同,但每个的先决条件都是相同的。

删除使用 Helm 安装的社区外部 Secret Operator。这有助于您释放资源并为集群维护干净的环境。

先决条件

  • 您必须以具有 cluster-admin 角色的用户身份登录。
  • 您必须已删除 operatorconfig 自定义资源(CR)。

流程

  1. 为 Red Hat OpenShift 安装 External Secrets Operator。external-secrets-operator 命名空间必须是 null。
  2. 运行以下命令来删除 External Secrets Operator:

    $ oc helm delete <release_name> -n <operator_namespace>
    Copy to Clipboard Toggle word wrap
    注意

    使用 helm delete 可能会删除所有自定义资源定义 (CRD) 和 CR。如果命名空间 external-secrets-operator 为空,建议首先安装下游 Operator。

删除由 Operator Lifecycle Manager (OLM) 订阅安装的社区外部 Secret Operator。这有助于您释放资源并为集群维护干净的环境。

先决条件

  • 您必须以具有 cluster-admin 角色的用户身份登录。
  • 您必须已删除 operatorconfig CR。

流程

  1. 运行以下命令来查找订阅名称:

    $ oc get subscription -n <operator_namespace> | grep external-secrets
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来删除订阅:

    $ oc delete subscription <subscription_name> -n <operator_namespace>
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来删除 ClusterServiceVersion:

    $ oc delete csv <csv_name> -n <operator_namespace>
    Copy to Clipboard Toggle word wrap

删除由原始清单安装的社区外部 Secret Operator。这有助于您释放资源并为集群维护干净的环境。

先决条件

  • 您必须以具有 cluster-admin 角色的用户身份登录。
  • 您必须已删除 operatorconfig CR。

流程

  • 要删除由原始清单安装的 communiity External Secrets Operator,请运行以下命令:

    $ oc delete -f /path/to/your/old/manifests.yaml -n <operator_namespace>
    Copy to Clipboard Toggle word wrap

清理社区版本后,为 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 权限访问集群。

流程

  1. 通过定义包含以下内容的 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
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建 ExternalSecretsConfig 对象:

    $ oc create -f externalsecretsconfig.yaml
    Copy to Clipboard Toggle word wrap

验证

验证所有自定义资源(CR)是否存在,并且 API 是否使用 v1 而不是 v1beta1。CR 会被保留并由新的 Operator 自动转换。

  1. 要验证 external-secrets pod 是否处于 running 状态,请运行以下命令:

    $ oc get pods -n external-secret
    Copy to Clipboard Toggle word wrap

    以下是 external-secrets Pod 处于 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
    Copy to Clipboard Toggle word wrap
  2. 要验证 SecretStore CR 是否存在,请运行以下命令:

    $ oc get secretstores.external-secrets.io -A
    Copy to Clipboard Toggle word wrap

    以下是验证是否存在 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
    Copy to Clipboard Toggle word wrap
  3. 要验证 ExternalSecret CR 是否存在,请运行以下命令:

    $ oc get externalsecrets.external-secrets.io -A
    Copy to Clipboard Toggle word wrap

    以下是验证是否存在 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
    Copy to Clipboard Toggle word wrap
  4. 要验证 SecretStore 是否为 apiVersion: external-secrets.io/v1,请运行以下命令:

    $ oc get secretstores.external-secrets.io -n external-secrets-1 gcp-store -o yaml
    Copy to Clipboard Toggle word wrap

    以下是 SecretStoreapiVersion: 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
    Copy to Clipboard Toggle word wrap
  5. 要验证 ExternalSecret 是否为 apiVersion: external-secrets.io/v1,请运行以下命令:

    $ oc get externalsecrets.external-secrets.io -n external-secrets-1 gcp-externalsecret -o yaml
    Copy to Clipboard Toggle word wrap

    以下是 ExternalSecretapiVersion: 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
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat