配置从多个可靠来源同步

本页面介绍了如何通过创建 RootSync 和 RepoSync 对象来配置多个根可靠来源和命名空间级可靠来源

通过根可靠来源,您可以同步集群级配置和命名空间级配置。根可靠来源可以使用管理员级凭据对应用命名空间强制执行政策,并替换从配置中声明的状态偏移的本地更改。通常由集中管理员管理根可靠来源。

命名空间级可靠来源是可选的,可以包含同步到集群中特定命名空间的命名空间级配置。您可以将命名空间级可靠来源的设置和控制权委托给非管理员用户。虽然 Config Sync 会自动检测来自可靠来源的变化,但您可以通过向命名空间级可靠来源添加准入 webhook 来额外增加一层偏移检测。如需详细了解如何执行此操作,请参阅防止配置偏移

准备工作

  • 创建非结构化可靠来源或确保您有权访问此可靠来源,其中可能包含 Config Sync 同步到的配置。Config Sync 支持将 Git 代码库、Helm 图表和 OCI 映像用作可靠来源。命名空间级可靠来源必须使用非结构化格式。
  • 创建(或确保您有权访问)位于 Google Kubernetes Engine (GKE) Enterprise 版本支持的平台和版本上并且满足 Config Sync 要求的集群。

限制

选择您的首选配置方法

选择以下用于配置来源的两种方法之一:

在根可靠来源中控制来源

在根可靠来源中控制根来源

Config Sync 支持从多个可靠来源同步。集中管理员可以使用根可靠来源来管理所有其他来源。由于 Config Sync 管理 RootSync 对象,因此该方法会阻止对集群中的 RootSync 配置进行的所有本地更改。

如需使用此方法,请完成以下任务:

  1. 将以下清单之一保存为 root-sync.yaml。请使用与配置的来源类型对应的清单版本。

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。 这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_REPOSITORY:添加要用作根代码库的 Git 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • ROOT_REVISION:添加需与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 revision 字段中指定分支名称。在 1.17.0 版或更高版本中使用哈希时,哈希必须是完整哈希,而不是缩写形式。
    • ROOT_BRANCH:添加需与其同步的代码库分支。此字段是可选字段,默认值为 master。从 Config Sync 1.17.0 版开始,为简单起见,建议使用 revision 字段指定分支名称。如果同时指定了 revision 字段和 branch 字段,则 revision 优先于 branch
    • ROOT_DIRECTORY:添加 Git 代码库中指向您要同步的配置所在的根目录的路径。此字段是可选字段,默认值为代码库的根目录 (/)。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • ssh:使用 SSH 密钥对
      • cookiefile:使用 cookiefile
      • token:使用令牌
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories。请仅在集群中未启用 Workload Identity 时选择此选项。

      如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您必须将 Secret 的公钥添加到 Git 提供商。此字段是可选字段。

    • ROOT_NO_SSL_VERIFY:如需停用 SSL 证书验证,请将此字段设置为 true。默认值为 false

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Git 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 Git 作为来源的 RootSync 对象。

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_IMAGE:要用作根代码库的 OCI 映像的网址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST
      • 如需通过 TAG 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY:添加代码库中指向您要同步的配置所在的根目录的路径。此字段是可选字段,默认值为代码库的根目录 (/)。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 OCI 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

    如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 OCI 映像作为来源的 RootSync 对象。

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_HELM_REPOSITORY:要用作根代码库的 Helm 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • HELM_CHART_NAME:添加 Helm 图表的名称。此字段为必填字段。
    • HELM_CHART_VERSION:您的图表的版本。此字段是可选字段。如果未指定任何值,则使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本的名称。此字段是可选字段。
    • HELM_RELEASE_NAMESPACE:版本的目标命名空间。它只会为模板中包含 namespace: {{ .Release.Namespace }} 的资源设置命名空间。此字段是可选字段。如果未指定任何值,则使用默认命名空间 config-management-system
    • HELM_INCLUDE_CRDS:如果您希望 Helm 模板同时也生成 CustomResourceDefinition,则设置为 true。此字段是可选字段。如果未指定任何值,则默认为 false,并且不会生成 CRD。
    • VALUE:用于替换 Helm 图表随附的默认值的值。 设置此字段的格式方式与 helm 图表的 values.yaml 文件相同。此字段是可选字段。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • token:使用用户名和密码访问私有 Helm 代码库。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:添加 Secret 名称(如果 tokenROOT_AUTH_TYPE)。此字段是可选字段。

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

    如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 Helm 作为来源的 RootSync 对象。

  2. 将更改提交到根可靠来源:

     git add .
     git commit -m 'Setting up a new root source of truth.'
     git push
    
  3. 如果您需要配置多个根来源,则可以重复执行上述步骤。 您还可以将多个 RootSync 对象的配置存储在由另一个 RootSync 对象同步的根可靠来源中,以便以 GitOps 方式集中管理多个 RootSync 对象。

在根可靠来源中控制命名空间级对象

命名空间级可靠来源可以由根可靠来源管理。由于命名空间级来源由 Config Sync 管理,因此该方法会阻止对命名空间级来源定义进行任何本地更改。

如需使用此方法,请完成以下任务:

  1. 在根可靠来源中,声明 namespace 配置:

    # ROOT_SOURCE/namespaces/NAMESPACE/namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: NAMESPACE
    

    NAMESPACE 替换为您的命名空间的名称。

  2. 在同一命名空间内的根可靠来源中创建以下 RepoSync 对象之一。请使用与配置的来源类型对应的清单:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_REPOSITORY:添加要用作命名空间代码库的 Git 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。如果您不输入协议,则网址会被视为 HTTPS 网址。此字段为必填字段。
    • NAMESPACE_REVISION:添加需与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 revision 字段中指定分支名称。在 1.17.0 版或更高版本中使用哈希时,哈希必须是完整哈希,而不是缩写形式。
    • NAMESPACE_BRANCH:添加需与其同步的代码库分支。此字段是可选字段,默认值为 master。从 Config Sync 1.17.0 版开始,为简单起见,建议使用 revision 字段指定分支名称。如果同时指定了 revision 字段和 branch 字段,则 revision 优先于 branch
    • NAMESPACE_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • ssh:使用 SSH 密钥对
      • cookiefile:使用 cookiefile
      • token:使用令牌
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories 中的代码库。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories 中的代码库。请仅在集群中未启用 Workload Identity 时选择此选项。

        如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 NAMESPACE_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:添加您要为 Secret 提供的名称。此字段是可选字段。

    • NAMESPACE_NO_SSL_VERIFY:如需停用 SSL 证书验证,请将此字段设置为 true。默认值为 false

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Git 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RepoSync 字段

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_IMAGE:要用作命名空间来源的 OCI 映像的网址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如需通过 TAG 拉取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY:添加来源中指向您要同步到的配置所在的根目录的路径。此字段是可选字段,默认值为来源的根目录 (/)。

    • NAMESPACE_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 OCI 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_REPOSITORY:要用作根代码库的 Helm 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • HELM_CHART_NAME:添加 Helm 图表的名称。此字段为必填字段。
    • HELM_CHART_VERSION:您的图表的版本。此字段是可选字段。如果未指定任何值,则使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本的名称。此字段是可选字段。
    • HELM_RELEASE_NAMESPACE:版本的目标命名空间。它只会为模板中包含 namespace: {{ .Release.Namespace }} 的资源设置命名空间。此字段是可选字段。如果未指定任何值,则使用默认命名空间 config-management-system
    • HELM_INCLUDE_CRDS:如果您希望 Helm 模板同时也生成 CustomResourceDefinition,则设置为 true。此字段是可选字段。如果未指定任何值,则默认为 false,并且不会生成 CRD。
    • VALUE:用于替换 Helm 图表随附的默认值的值。 设置此字段的格式方式与 helm 图表的 values.yaml 文件相同。此字段是可选字段。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • token:使用用户名和密码访问私有 Helm 代码库。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:添加 Secret 名称(如果 tokenROOT_AUTH_TYPE)。此字段是可选字段。

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

  3. 如果您使用 gcpserviceaccount 作为身份验证类型,并且未启用 Workload Identity,则必须在每个命名空间的 Kubernetes 服务账号和 Google 服务账号之间创建 IAM 政策绑定。有关如何创建此绑定的说明,请参阅授予对 Git 的访问权限

  4. 在根来源中,声明 RoleBinding 配置,以授予 SERVICE_ACCOUNT_NAME 服务账号管理命名空间中的对象的权限。当 RepoSync 配置同步到集群时,Config Sync 会自动创建 SERVICE_ACCOUNT_NAME 服务账号。

    RoleBinding 可以引用同一命名空间中的 Role。或者,RoleBinding 可以引用 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 的命名空间。虽然您应通过向用户定义的 Role 授予精细权限来遵循最小权限原则,不过您可以定义 ClusterRole 或使用面向用户的角色,并且跨不同命名空间在多个 RoleBindings 中引用同一 ClusterRole

    默认 ClusterRole

    您可以声明引用默认 ClusterRole(例如 adminedit)的 RoleBinding。如需了解详情,请参阅面向用户的角色

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    请替换以下内容:

    • NAMESPACE:添加您的命名空间的名称。
    • SERVICE_ACCOUNT_NAME:添加协调器的服务账号的名称。如果 RepoSync 名称为 repo-sync,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE。否则为 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH。 例如,如果您的 RepoSync 名称为 prod,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4。这里会使用整数 4,因为 prod 包含 4 个字符。
    • CLUSTERROLE_NAME:添加默认 ClusterRole 的名称。

    用户定义的角色

    您可以通过授予针对 RepoSync 对象管理的每个资源的权限列表来声明 ClusterRoleRole。这样可实现精细权限。如需了解详情,请参阅引用资源

    例如,以下 ClusterRoleRole 会授予管理 DeploymentServiceAccount 对象的权限。

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    如需声明引用 ClusterRoleRoleRoleBinding,请创建以下对象。RoleBinding 会授予额外权限,以允许 Config Sync 为给定 RepoSync 管理命名空间级资源。

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    请替换以下内容:

    • ROLE_KIND:设置 ClusterRoleRole
    • NAMESPACE:添加您的命名空间的名称。
    • SERVICE_ACCOUNT_NAME:添加协调器的服务账号的名称。如果 RepoSync 名称为 repo-sync,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE。否则为 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH。 例如,如果您的 RepoSync 名称为 prod,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4。这里会使用整数 4,因为 prod 包含 4 个字符。
    • RECONCILER_ROLE:添加 ClusterRoleRole 的名称。
  5. 将更改提交到根可靠来源:

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  6. 如有必要,请根据您的首选身份验证方法创建 Secret。如果您使用 none 作为身份验证类型,则可以跳过此步骤。

    Secret 必须满足以下要求:

    • 在 RepoSync 所在的命名空间中创建 Secret。
    • Secret 名称必须与您在 repo-sync.yaml 中定义的 spec.git.secretRef 名称匹配。
    • 您必须将 Secret 的公钥添加到 Git 提供商。
  7. 如需验证配置,请对命名空间来源中的一个对象使用 kubectl get。例如:

    kubectl get rolebindings -n NAMESPACE
    
  8. 如果您需要配置多个命名空间级来源,则可以重复执行上述步骤。

在命名空间级来源中控制命名空间级来源

Config Sync 支持从每个命名空间的多个命名空间级可靠来源进行同步。命名空间级可靠来源可以在同一命名空间内的命名空间级可靠来源中进行管理。

如需使用此方法,请完成以下任务:

  1. 在同一命名空间内的命名空间级可靠来源中创建以下 RepoSync 对象之一。请使用与配置的来源类型对应的清单:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_REPOSITORY:添加要用作命名空间代码库的 Git 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。如果您不输入协议,则网址会被视为 HTTPS 网址。此字段为必填字段。
    • NAMESPACE_REVISION:添加需与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 revision 字段中指定分支名称。在 1.17.0 版或更高版本中使用哈希时,哈希必须是完整哈希,而不是缩写形式。
    • NAMESPACE_BRANCH:添加需与其同步的代码库分支。此字段是可选字段,默认值为 master。从 Config Sync 1.17.0 版开始,为简单起见,建议使用 revision 字段指定分支名称。如果同时指定了 revision 字段和 branch 字段,则 revision 优先于 branch
    • NAMESPACE_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • ssh:使用 SSH 密钥对
      • cookiefile:使用 cookiefile
      • token:使用令牌
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories 中的代码库。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories 中的代码库。请仅在集群中未启用 Workload Identity 时选择此选项。

        如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 NAMESPACE_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:添加您要为 Secret 提供的名称。此字段是可选字段。

    • NAMESPACE_NO_SSL_VERIFY:如需停用 SSL 证书验证,请将此字段设置为 true。默认值为 false

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Git 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RepoSync 字段

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_IMAGE:要用作命名空间来源的 OCI 映像的网址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如需通过 TAG 拉取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY:添加来源中指向您要同步到的配置所在的根目录的路径。此字段是可选字段,默认值为来源的根目录 (/)。

    • NAMESPACE_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 OCI 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_REPOSITORY:要用作根代码库的 Helm 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • HELM_CHART_NAME:添加 Helm 图表的名称。此字段为必填字段。
    • HELM_CHART_VERSION:您的图表的版本。此字段是可选字段。如果未指定任何值,则使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本的名称。此字段是可选字段。
    • HELM_RELEASE_NAMESPACE:版本的目标命名空间。它只会为模板中包含 namespace: {{ .Release.Namespace }} 的资源设置命名空间。此字段是可选字段。如果未指定任何值,则使用默认命名空间 config-management-system
    • HELM_INCLUDE_CRDS:如果您希望 Helm 模板同时也生成 CustomResourceDefinition,则设置为 true。此字段是可选字段。如果未指定任何值,则默认为 false,并且不会生成 CRD。
    • VALUE:用于替换 Helm 图表随附的默认值的值。 设置此字段的格式方式与 helm 图表的 values.yaml 文件相同。此字段是可选字段。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • token:使用用户名和密码访问私有 Helm 代码库。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:添加 Secret 名称(如果 tokenROOT_AUTH_TYPE)。此字段是可选字段。

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

  2. 如果您使用 gcpserviceaccount 作为身份验证类型,并且未启用 Workload Identity,则必须在每个命名空间的 Kubernetes 服务账号和 Google 服务账号之间创建 IAM 政策绑定。有关如何创建此绑定的说明,请参阅授予对 Git 的访问权限

  3. 在根来源中,声明 RoleBinding 配置,以授予 SERVICE_ACCOUNT_NAME 服务账号管理命名空间中的对象的权限。当 RepoSync 配置同步到集群时,Config Sync 会自动创建 SERVICE_ACCOUNT_NAME 服务账号。

    RoleBinding 可以引用同一命名空间中的 Role。或者,RoleBinding 可以引用 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 的命名空间。虽然您应通过向用户定义的 Role 授予精细权限来遵循最小权限原则,不过您可以定义 ClusterRole 或使用面向用户的角色,并且跨不同命名空间在多个 RoleBindings 中引用同一 ClusterRole

    默认 ClusterRole

    您可以声明引用默认 ClusterRole(例如 adminedit)的 RoleBinding。如需了解详情,请参阅面向用户的角色

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    请替换以下内容:

    • NAMESPACE:添加您的命名空间的名称。
    • SERVICE_ACCOUNT_NAME:添加协调器的服务账号的名称。如果 RepoSync 名称为 repo-sync,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE。否则为 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH。 例如,如果您的 RepoSync 名称为 prod,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4。这里会使用整数 4,因为 prod 包含 4 个字符。
    • CLUSTERROLE_NAME:添加默认 ClusterRole 的名称。

    用户定义的角色

    您可以通过授予针对 RepoSync 对象管理的每个资源的权限列表来声明 ClusterRoleRole。这样可实现精细权限。如需了解详情,请参阅引用资源

    例如,以下 ClusterRoleRole 会授予管理 DeploymentServiceAccount 对象的权限。

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    如需声明引用 ClusterRoleRoleRoleBinding,请创建以下对象。RoleBinding 会授予额外权限,以允许 Config Sync 为给定 RepoSync 管理命名空间级资源。

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    请替换以下内容:

    • ROLE_KIND:设置 ClusterRoleRole
    • NAMESPACE:添加您的命名空间的名称。
    • SERVICE_ACCOUNT_NAME:添加协调器的服务账号的名称。如果 RepoSync 名称为 repo-sync,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE。否则为 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH。 例如,如果您的 RepoSync 名称为 prod,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4。这里会使用整数 4,因为 prod 包含 4 个字符。
    • RECONCILER_ROLE:添加 ClusterRoleRole 的名称。
  4. 将更改提交到根可靠来源:

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  5. 如有必要,请根据您的首选身份验证方法创建 Secret。如果您使用 none 作为身份验证类型,则可以跳过此步骤。

    Secret 必须满足以下要求:

    • 在 RepoSync 所在的命名空间中创建 Secret。
    • Secret 名称必须与您在 repo-sync.yaml 中定义的 spec.git.secretRef 名称匹配。
    • 您必须将 Secret 的公钥添加到 Git 提供商。
  6. 如需验证配置,请对命名空间级可靠来源中的一个对象使用 kubectl get。例如:

    kubectl get rolebindings -n NAMESPACE
    
  7. 如果您需要配置多个命名空间级来源,则可以重复执行上述步骤。

使用 Kubernetes API 控制可靠来源

在此方法中,中央管理员会将其他 RootSync 对象的声明委托给其他管理员。对于 RepoSync 对象,集中管理员仅会在根可靠来源中声明命名空间,并将 RepoSync 对象的声明委托给应用运维人员。

控制多个根可靠来源

其他管理员可以通过完成以下任务来控制根可靠来源:

  1. 将以下清单之一保存为 root-sync.yaml。请使用与配置的来源类型对应的清单版本。

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。 这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_REPOSITORY:添加要用作根代码库的 Git 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • ROOT_REVISION:添加需与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 revision 字段中指定分支名称。在 1.17.0 版或更高版本中使用哈希时,哈希必须是完整哈希,而不是缩写形式。
    • ROOT_BRANCH:添加需与其同步的代码库分支。此字段是可选字段,默认值为 master。从 Config Sync 1.17.0 版开始,为简单起见,建议使用 revision 字段指定分支名称。如果同时指定了 revision 字段和 branch 字段,则 revision 优先于 branch
    • ROOT_DIRECTORY:添加 Git 代码库中指向您要同步的配置所在的根目录的路径。此字段是可选字段,默认值为代码库的根目录 (/)。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • ssh:使用 SSH 密钥对
      • cookiefile:使用 cookiefile
      • token:使用令牌
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories。请仅在集群中未启用 Workload Identity 时选择此选项。

      如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您必须将 Secret 的公钥添加到 Git 提供商。此字段是可选字段。

    • ROOT_NO_SSL_VERIFY:如需停用 SSL 证书验证,请将此字段设置为 true。默认值为 false

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Git 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 Git 作为来源的 RootSync 对象。

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_IMAGE:要用作根代码库的 OCI 映像的网址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST
      • 如需通过 TAG 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY:添加代码库中指向您要同步的配置所在的根目录的路径。此字段是可选字段,默认值为代码库的根目录 (/)。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 OCI 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

    如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 OCI 映像作为来源的 RootSync 对象。

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • ROOT_SYNC_NAME:添加 RootSync 对象的名称。
    • ROOT_FORMAT:添加 unstructured 以使用非结构化代码库,或添加 hierarchy 以使用分层代码库。这些值区分大小写。此字段是可选字段,默认值为 hierarchy。我们建议您添加 unstructured,因为您可以采用这种格式以最适合您的方式整理配置。
    • ROOT_HELM_REPOSITORY:要用作根代码库的 Helm 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • HELM_CHART_NAME:添加 Helm 图表的名称。此字段为必填字段。
    • HELM_CHART_VERSION:您的图表的版本。此字段是可选字段。如果未指定任何值,则使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本的名称。此字段是可选字段。
    • HELM_RELEASE_NAMESPACE:版本的目标命名空间。它只会为模板中包含 namespace: {{ .Release.Namespace }} 的资源设置命名空间。此字段是可选字段。如果未指定任何值,则使用默认命名空间 config-management-system
    • HELM_INCLUDE_CRDS:如果您希望 Helm 模板同时也生成 CustomResourceDefinition,则设置为 true。此字段是可选字段。如果未指定任何值,则默认为 false,并且不会生成 CRD。
    • VALUE:用于替换 Helm 图表随附的默认值的值。 设置此字段的格式方式与 helm 图表的 values.yaml 文件相同。此字段是可选字段。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • token:使用用户名和密码访问私有 Helm 代码库。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • ROOT_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • ROOT_SECRET_NAME:添加 Secret 名称(如果 tokenROOT_AUTH_TYPE)。此字段是可选字段。

    • ROOT_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

    如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    此清单会创建一个使用 Helm 作为来源的 RootSync 对象。

  2. 应用更改:

    kubectl apply -f root-sync.yaml
    
  3. 如果您需要配置多个根可靠来源,则可以重复执行上述步骤。

控制命名空间级可靠来源

中心管理员任务

中心管理员需完成以下任务:

  1. 在根可靠来源中,为命名空间级来源声明 namespace 配置。

    # ROOT_REPO/namespaces/NAMESPACE/namespace.yaml
     apiVersion: v1
     kind: Namespace
     metadata:
       name: NAMESPACE
    

    NAMESPACE 替换为您的命名空间的名称。

  2. 在根可靠来源中,声明 RoleBinding 以向应用运维人员授予权限。使用 RBAC 提升防护确保应用运维人员以后不能应用具有此角色绑定未授予的权限的角色绑定。

    如需声明 RoleBinding,请创建以下清单:

    # ROOT_REPO/namespaces/NAMESPACE/operator-rolebinding.yaml
     kind: RoleBinding
     # Add RBAC escalation prevention
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: operator
       namespace: NAMESPACE
     subjects:
     - kind: User
       name: USERNAME
       apiGroup: rbac.authorization.k8s.io
     roleRef:
       kind: ClusterRole
       name: OPERATOR_ROLE
       apiGroup: rbac.authorization.k8s.io
    

    请替换以下内容:

    • NAMESPACE:添加您在根可靠来源中创建的命名空间。
    • USERNAME:添加应用运维人员的用户名。
    • OPERATOR_ROLE:作为集中管理员,您可以设置 OPERATOR_ROLE 以强制可以从命名空间级来源同步哪些类型的配置。您可以选择以下角色之一:

      • 默认 ClusterRole:

        • admin
        • edit

        如需了解详情,请参阅面向用户的角色

      • 在根可靠来源中声明的用户定义的 ClusterRole 或 Role。此角色允许细化的权限。

  3. 将更改提交到根可靠来源:

     git add .
     git commit -m 'Setting up new namespace-scoped source of truth.'
     git push
    

应用运维人员任务

应用运维人员可以通过完成以下任务来控制命名空间级来源:

  1. 声明 RoleBinding 配置,以向自动预配的 SERVICE_ACCOUNT_NAME 服务账号授予管理命名空间中的对象的权限。当 RepoSync 配置同步到集群时,Config Sync 会自动创建 SERVICE_ACCOUNT_NAME 服务账号。

    如需声明 RoleBinding,请创建以下清单:

    # sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    请替换以下内容:

    • NAMESPACE:添加您在根可靠来源中创建的命名空间。
    • SERVICE_ACCOUNT_NAME:添加协调器的服务账号的名称。如果 RepoSync 名称为 repo-sync,则 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE;否则为 ns-reconciler-NAMESPACE-REPO_SYNC_NAME
    • RECONCILER_ROLE:作为应用运维人员,您可以设置 RECONCILER_ROLE 以强制可以从命名空间级来源同步哪些类型的配置。您只能进一步限制中心管理员授予您的权限集。因此,此角色不能比中心管理员在上一部分声明的 OPERATOR_ROLE 更宽松。
  2. 应用 RoleBinding 配置:

    kubectl apply -f sync-rolebinding.yaml
    
  3. 如有必要,请根据您的首选身份验证方法创建 Secret。如果您使用 none 作为身份验证类型,则可以跳过此步骤。

    Secret 必须满足以下要求:

    • 在 RepoSync 所在的命名空间中创建 Secret。
    • Secret 名称必须与您在 root-sync.yaml 中定义的 spec.git.secretRef 名称匹配。
    • 您必须将 Secret 的公钥添加到 Git 提供商。
  4. 声明 RepoSync 配置:

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_REPOSITORY:添加要用作命名空间代码库的 Git 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。如果您不输入协议,则网址会被视为 HTTPS 网址。此字段为必填字段。
    • NAMESPACE_REVISION:添加需与其同步的 Git 修订版本(标记或哈希)。此字段是可选字段,默认值为 HEAD。从 Config Sync 1.17.0 版开始,您还可以在 revision 字段中指定分支名称。在 1.17.0 版或更高版本中使用哈希时,哈希必须是完整哈希,而不是缩写形式。
    • NAMESPACE_BRANCH:添加需与其同步的代码库分支。此字段是可选字段,默认值为 master。从 Config Sync 1.17.0 版开始,为简单起见,建议使用 revision 字段指定分支名称。如果同时指定了 revision 字段和 branch 字段,则 revision 优先于 branch
    • NAMESPACE_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • ssh:使用 SSH 密钥对
      • cookiefile:使用 cookiefile
      • token:使用令牌
      • gcpserviceaccount:使用 Google 服务账号访问 Cloud Source Repositories 中的代码库。
      • gcenode:使用 Google 服务账号访问 Cloud Source Repositories 中的代码库。请仅在集群中未启用 Workload Identity 时选择此选项。

        如需详细了解这些身份验证类型,请参阅授予 Config Sync 对 Git 的只读权限

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 NAMESPACE_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:添加您要为 Secret 提供的名称。此字段是可选字段。

    • NAMESPACE_NO_SSL_VERIFY:如需停用 SSL 证书验证,请将此字段设置为 true。默认值为 false

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Git 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RepoSync 字段

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_IMAGE:要用作命名空间来源的 OCI 映像的网址,例如 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME。默认情况下,映像是从 latest 标记中拉取的,但您也可以通过 TAGDIGEST 拉取映像。在 PACKAGE_NAME 中指定 TAGDIGEST

      • 如需通过 TAG 拉取:LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • 如需通过 DIGEST 拉取: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY:添加来源中指向您要同步到的配置所在的根目录的路径。此字段是可选字段,默认值为来源的根目录 (/)。

    • NAMESPACE_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 OCI 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    替换以下内容:

    • REPO_SYNC_NAME:添加 RepoSync 对象的名称。该名称在命名空间中应是唯一的。
    • NAMESPACE:添加您的命名空间的名称。
    • NAMESPACE_REPOSITORY:要用作根代码库的 Helm 代码库的网址。您可以输入使用 HTTPS 或 SSH 协议的网址。例如,https://github.com/GoogleCloudPlatform/anthos-config-management-samples 使用 HTTPS 协议。此字段为必填字段。
    • HELM_CHART_NAME:添加 Helm 图表的名称。此字段为必填字段。
    • HELM_CHART_VERSION:您的图表的版本。此字段是可选字段。如果未指定任何值,则使用最新版本。
    • HELM_RELEASE_NAME:Helm 版本的名称。此字段是可选字段。
    • HELM_RELEASE_NAMESPACE:版本的目标命名空间。它只会为模板中包含 namespace: {{ .Release.Namespace }} 的资源设置命名空间。此字段是可选字段。如果未指定任何值,则使用默认命名空间 config-management-system
    • HELM_INCLUDE_CRDS:如果您希望 Helm 模板同时也生成 CustomResourceDefinition,则设置为 true。此字段是可选字段。如果未指定任何值,则默认为 false,并且不会生成 CRD。
    • VALUE:用于替换 Helm 图表随附的默认值的值。 设置此字段的格式方式与 helm 图表的 values.yaml 文件相同。此字段是可选字段。
    • ROOT_AUTH_TYPE:添加以下身份验证类型之一:

      • none:不使用身份验证
      • token:使用用户名和密码访问私有 Helm 代码库。
      • gcenode:使用 Compute Engine 默认服务账号访问 Artifact Registry 中的映像。请仅在集群中未启用 Workload Identity 时选择此选项。
      • gcpserviceaccount:使用 Google 服务账号访问映像。

      此字段为必填字段。

    • NAMESPACE_EMAIL:如果您已将 gcpserviceaccount 添加为 ROOT_AUTH_TYPE,请添加您的 Google 服务账号电子邮件地址。例如 acm@PROJECT_ID.iam.gserviceaccount.com

    • NAMESPACE_SECRET_NAME:添加 Secret 名称(如果 tokenROOT_AUTH_TYPE)。此字段是可选字段。

    • NAMESPACE_CA_CERT_SECRET_NAME:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为 cert 的密钥下提供 CA 证书。此字段是可选字段。

      如需详细了解如何为 CA 证书配置 Secret 对象,请参阅为证书授权机构配置 Operator

    如需了解字段的说明以及可添加到 spec 字段的字段的完整列表,请参阅 RootSync 字段

  5. 应用 RepoSync 配置:

    kubectl apply -f repo-sync.yaml
    
  6. 如需验证配置,请对命名空间级来源中的一个对象使用 kubectl get。例如:

    kubectl get rolebindings -n NAMESPACE
    
  7. 如果您需要配置多个命名空间级可靠来源,则可以重复执行上述步骤。

验证可靠来源的同步状态

您可以使用 nomos status 命令来检查可靠来源的同步状态:

nomos status

您应该会看到类似于以下示例的输出:

my_managed_cluster-1
  --------------------
  <root>   git@github.com:foo-corp/acme/admin@main
  SYNCED   f52a11e4
  --------------------
  bookstore  git@github.com:foo-corp/acme/bookstore@v1
  SYNCED     34d1a8c8

在此示例输出中,为命名空间 bookstore 配置了命名空间级来源(本例中是 Git 代码库)。

验证 RootSync 安装

创建 RootSync 对象时,Config Sync 会创建一个具有 root-reconciler 前缀的协调器。协调器是部署为 Deployment 的 Pod。 它会将清单从可靠来源同步到集群。

您可以通过检查根协调器的部署状态来验证 RootSync 对象是否正常工作:

kubectl get -n config-management-system deployment \
    -l configsync.gke.io/sync-name=ROOT_SYNC_NAME

ROOT_SYNC_NAME 替换为 RootSync 的名称。

您应该会看到类似于以下示例的输出:

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
root-reconciler   1/1     1            1           3h42m

如需查看探索 RootSync 对象状态的其他方法,请参阅监控 RootSync 和 RepoSync 对象

验证 RepoSync 安装

创建 RepoSync 对象时,Config Sync 会创建一个具有 ns-reconciler-NAMESPACE 前缀的协调器,其中 NAMESPACE 是您在其中创建了 RepoSync 对象的命名空间。

您可以通过检查命名空间协调器的部署状态来验证 RepoSync 对象是否正常工作:

kubectl get -n config-management-system deployment \
  -l configsync.gke.io/sync-name=REPO_SYNC_NAME \
  -l configsync.gke.io/sync-namespace=NAMESPACE

REPO_SYNC_NAME 替换为 RepoSync 的名称,并将 NAMESPACE 替换为您在其中创建了命名空间级可靠来源的命名空间。

如需查看探索 RepoSync 对象状态的其他方法,请参阅探索 RootSync 和 RepoSync 对象

移除可靠来源

选择中央控制方法Kubernetes API 方法标签页以查看相关说明。

中央控制方法

如果您使用的是在根可靠来源中控制可靠来源方法,则集中管理员可以按照以下两个步骤来移除可靠来源:

  1. 确定您要删除还是保留通过 RootSync 和 RepoSync 对象管理的资源。

    • 如需删除 RootSync 或 RepoSync 对象管理的所有资源,请将 RootSync 或 RepoSync 对象同步到空来源。例如,没有配置的 GitHub 代码库。如果您的 RootSync 或 RepoSync 对象包含另一个 RootSync 或 RepoSync 对象,则内部 RootSync 或 RepoSync 需要先同步到空的 Git 代码库。

    • 如果您已启用网络钩子并希望保留资源,请按照问题排查说明取消管理资源。如果您尚未启用网络钩子,则无需执行任何其他步骤来保留资源。

  2. 从可靠来源中移除 RootSync 或 RepoSync 对象。

Kubernetes API 方法

如果您使用的是通过 Kubernetes API 控制命名空间级可靠来源方法,则应用运维人员可以按照以下步骤来移除命名空间级可靠来源:

  1. 确定您要删除还是保留通过 RootSync 和 RepoSync 对象管理的资源。

    • 如需删除 RootSync 或 RepoSync 对象管理的所有资源,请将 RootSync 或 RepoSync 对象同步到空来源。例如,没有配置的 GitHub 代码库。如果您的 RootSync 或 RepoSync 对象包含另一个 RootSync 或 RepoSync 对象,则内部 RootSync 或 RepoSync 需要先同步到空的 Git 代码库。

    • 如果您已启用网络钩子并希望保留资源,请按照问题排查说明取消管理资源。如果您尚未启用网络钩子,则无需执行任何其他步骤来保留资源。

  2. 通过运行以下命令来删除 RootSync 或 RepoSync 对象:

    kubectl delete -f FILE_NAME
    

    FILE_NAME 替换为您的 RootSync 或 RepoSync 配置文件的名称。例如 root-sync.yaml

后续步骤