本页面介绍了如何通过创建 RootSync 和 RepoSync 对象来配置多个根可靠来源和命名空间级可靠来源。
通过根可靠来源,您可以同步集群级配置和命名空间级配置。根可靠来源可以使用管理员级凭据对应用命名空间强制执行政策,并替换从配置中声明的状态偏移的本地更改。通常由集中管理员管理根可靠来源。
命名空间级可靠来源是可选的,可以包含同步到集群中特定命名空间的命名空间级配置。您可以将命名空间级可靠来源的设置和控制权委托给非管理员用户。虽然 Config Sync 会自动检测来自可靠来源的变化,但您可以通过向命名空间级可靠来源添加准入 webhook 来额外增加一层偏移检测。如需详细了解如何执行此操作,请参阅防止配置偏移。
准备工作
- 创建非结构化可靠来源或确保您有权访问此可靠来源,其中可能包含 Config Sync 同步到的配置。Config Sync 支持将 Git 代码库、Helm 图表和 OCI 映像用作可靠来源。命名空间级可靠来源必须使用非结构化格式。
- 创建(或确保您有权访问)位于 Google Kubernetes Engine (GKE) Enterprise 版本支持的平台和版本上并且满足 Config Sync 要求的集群。
限制
NamespaceSelectors
(包括指向选择器的注解)仅适用于根可靠来源。- 如果您使用 Google Cloud 控制台或 Google Cloud CLI 安装了 Config Sync,Config Sync 会自动创建一个名为
root-sync
的 RootSync 对象。因此,您无法将任何 RootSync 对象命名为root-sync
。
选择您的首选配置方法
选择以下用于配置来源的两种方法之一:
在根可靠来源中控制来源。此方法可以将一个可靠来源的所有配置集中到另一个可靠来源中,从而使集中管理员能够完全控制设置。
使用 Kubernetes API 控制来源。如果您要将可靠来源的控制权委托给不同的所有者,请使用此方法。
在根可靠来源中控制来源
在根可靠来源中控制根来源
Config Sync 支持从多个可靠来源同步。集中管理员可以使用根可靠来源来管理所有其他来源。由于 Config Sync 管理 RootSync 对象,因此该方法会阻止对集群中的 RootSync 配置进行的所有本地更改。
如需使用此方法,请完成以下任务:
将以下清单之一保存为
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 Federation for GKE 时选择此选项。
如需详细了解这些身份验证类型,请参阅授予 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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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
标记中拉取的,但您也可以通过TAG
或DIGEST
拉取映像。在PACKAGE_NAME
中指定TAG
或DIGEST
:- 如需通过
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 Federation for GKE 时选择此选项。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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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 Federation for GKE 时选择此选项。gcpserviceaccount
:使用 Google 服务账号访问映像。
此字段为必填字段。
ROOT_EMAIL
:如果您已将gcpserviceaccount
添加为ROOT_AUTH_TYPE
,请添加您的 Google 服务账号电子邮件地址。例如acm@PROJECT_ID.iam.gserviceaccount.com
。ROOT_SECRET_NAME
:添加 Secret 名称(如果token
为ROOT_AUTH_TYPE
)。此字段是可选字段。ROOT_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。
如需详细了解如何为 CA 证书配置 Secret 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
spec
字段的字段的完整列表,请参阅 RootSync 字段。此清单会创建一个使用 Helm 作为来源的
RootSync
对象。将更改提交到根可靠来源:
git add . git commit -m 'Setting up a new root source of truth.' git push
如果您需要配置多个根来源,则可以重复执行上述步骤。 您还可以将多个 RootSync 对象的配置存储在由另一个 RootSync 对象同步的根可靠来源中,以便以 GitOps 方式集中管理多个 RootSync 对象。
在根可靠来源中控制命名空间级对象
命名空间级可靠来源可以由根可靠来源管理。由于命名空间级来源由 Config Sync 管理,因此该方法会阻止对命名空间级来源定义进行任何本地更改。
如需使用此方法,请完成以下任务:
在根可靠来源中,声明
namespace
配置:# ROOT_SOURCE/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
将
NAMESPACE
替换为您的命名空间的名称。在同一命名空间内的根可靠来源中创建以下
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 Federation for GKE 时选择此选项。如需详细了解这些身份验证类型,请参阅授予 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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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
标记中拉取的,但您也可以通过TAG
或DIGEST
拉取映像。在PACKAGE_NAME
中指定TAG
或DIGEST
:- 如需通过
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 Federation for GKE 时选择此选项。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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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 Federation for GKE 时选择此选项。gcpserviceaccount
:使用 Google 服务账号访问映像。
此字段为必填字段。
NAMESPACE_EMAIL
:如果您已将gcpserviceaccount
添加为ROOT_AUTH_TYPE
,请添加您的 Google 服务账号电子邮件地址。例如acm@PROJECT_ID.iam.gserviceaccount.com
。NAMESPACE_SECRET_NAME
:添加 Secret 名称(如果token
为ROOT_AUTH_TYPE
)。此字段是可选字段。NAMESPACE_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。如需详细了解如何为 CA 证书配置 Secret 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
spec
字段的字段的完整列表,请参阅 RootSync 字段。如果您使用
gcpserviceaccount
作为身份验证类型,并且未启用 Workload Identity Federation for GKE,则必须在每个命名空间的 Kubernetes 服务账号和 Google 服务账号之间创建 IAM 政策绑定。有关如何创建此绑定的说明,请参阅授予对 Git 的访问权限。在根来源中,声明
RoleBinding
配置,以授予SERVICE_ACCOUNT_NAME
服务账号管理命名空间中的对象的权限。当 RepoSync 配置同步到集群时,Config Sync 会自动创建SERVICE_ACCOUNT_NAME
服务账号。RoleBinding
可以引用同一命名空间中的Role
。或者,RoleBinding
可以引用ClusterRole
并将该ClusterRole
绑定到RoleBinding
的命名空间。虽然您应通过向用户定义的Role
授予精细权限来遵循最小权限原则,不过您可以定义ClusterRole
或使用面向用户的角色,并且跨不同命名空间在多个RoleBindings
中引用同一ClusterRole
。默认 ClusterRole
您可以声明引用默认
ClusterRole
(例如admin
或edit
)的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_NAME
为ns-reconciler-NAMESPACE
。否则为ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
。 例如,如果您的 RepoSync 名称为prod
,则SERVICE_ACCOUNT_NAME
为ns-reconciler-NAMESPACE-prod-4
。这里会使用整数4
,因为prod
包含 4 个字符。CLUSTERROLE_NAME
:添加默认 ClusterRole 的名称。
用户定义的角色
您可以通过授予针对
RepoSync
对象管理的每个资源的权限列表来声明ClusterRole
或Role
。这样可实现精细权限。如需了解详情,请参阅引用资源。例如,以下
ClusterRole
或Role
会授予管理Deployment
和ServiceAccount
对象的权限。# 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: ["*"]
如需声明引用
ClusterRole
或Role
的RoleBinding
,请创建以下对象。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
:设置ClusterRole
或Role
。NAMESPACE
:添加您的命名空间的名称。SERVICE_ACCOUNT_NAME
:添加协调器的服务账号的名称。如果 RepoSync 名称为repo-sync
,则SERVICE_ACCOUNT_NAME
为ns-reconciler-NAMESPACE
。否则为ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
。 例如,如果您的 RepoSync 名称为prod
,则SERVICE_ACCOUNT_NAME
为ns-reconciler-NAMESPACE-prod-4
。这里会使用整数4
,因为prod
包含 4 个字符。RECONCILER_ROLE
:添加ClusterRole
或Role
的名称。
将更改提交到根可靠来源:
git add . git commit -m 'Setting up a new namespace-scoped source of truth.' git push
如有必要,请根据您的首选身份验证方法创建 Secret。如果您使用
none
作为身份验证类型,则可以跳过此步骤。Secret 必须满足以下要求:
- 在 RepoSync 所在的命名空间中创建 Secret。
- Secret 名称必须与您在
repo-sync.yaml
中定义的spec.git.secretRef
名称匹配。 - 您必须将 Secret 的公钥添加到 Git 提供商。
如需验证配置,请对命名空间来源中的一个对象使用
kubectl get
。例如:kubectl get rolebindings -n NAMESPACE
如果您需要配置多个命名空间级来源,则可以重复执行上述步骤。
在命名空间级来源中控制命名空间级来源
Config Sync 支持从每个命名空间的多个命名空间级可靠来源进行同步。命名空间级可靠来源可以在同一命名空间内的命名空间级可靠来源中进行管理。
如需使用此方法,请完成以下任务:
在同一命名空间内的命名空间级可靠来源中创建以下
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 Federation for GKE 时选择此选项。如需详细了解这些身份验证类型,请参阅授予 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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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
标记中拉取的,但您也可以通过TAG
或DIGEST
拉取映像。在PACKAGE_NAME
中指定TAG
或DIGEST
:- 如需通过
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 Federation for GKE 时选择此选项。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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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 Federation for GKE 时选择此选项。gcpserviceaccount
:使用 Google 服务账号访问映像。
此字段为必填字段。
NAMESPACE_EMAIL
:如果您已将gcpserviceaccount
添加为ROOT_AUTH_TYPE
,请添加您的 Google 服务账号电子邮件地址。例如acm@PROJECT_ID.iam.gserviceaccount.com
。NAMESPACE_SECRET_NAME
:添加 Secret 名称(如果token
为ROOT_AUTH_TYPE
)。此字段是可选字段。NAMESPACE_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。如需详细了解如何为 CA 证书配置 Secret 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
spec
字段的字段的完整列表,请参阅 RootSync 字段。如果您使用
gcpserviceaccount
作为身份验证类型,并且未启用 Workload Identity Federation for GKE,则必须在每个命名空间的 Kubernetes 服务账号和 Google 服务账号之间创建 IAM 政策绑定。有关如何创建此绑定的说明,请参阅授予对 Git 的访问权限。在根来源中,声明
RoleBinding
配置,以授予SERVICE_ACCOUNT_NAME
服务账号管理命名空间中的对象的权限。当 RepoSync 配置同步到集群时,Config Sync 会自动创建SERVICE_ACCOUNT_NAME
服务账号。RoleBinding
可以引用同一命名空间中的Role
。或者,RoleBinding
可以引用ClusterRole
并将该ClusterRole
绑定到RoleBinding
的命名空间。虽然您应通过向用户定义的Role
授予精细权限来遵循最小权限原则,不过您可以定义ClusterRole
或使用面向用户的角色,并且跨不同命名空间在多个RoleBindings
中引用同一ClusterRole
。默认 ClusterRole
您可以声明引用默认
ClusterRole
(例如admin
或edit
)的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_NAME
为ns-reconciler-NAMESPACE
。否则为ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
。 例如,如果您的 RepoSync 名称为prod
,则SERVICE_ACCOUNT_NAME
为ns-reconciler-NAMESPACE-prod-4
。这里会使用整数4
,因为prod
包含 4 个字符。CLUSTERROLE_NAME
:添加默认 ClusterRole 的名称。
用户定义的角色
您可以通过授予针对
RepoSync
对象管理的每个资源的权限列表来声明ClusterRole
或Role
。这样可实现精细权限。如需了解详情,请参阅引用资源。例如,以下
ClusterRole
或Role
会授予管理Deployment
和ServiceAccount
对象的权限。# 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: ["*"]
如需声明引用
ClusterRole
或Role
的RoleBinding
,请创建以下对象。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
:设置ClusterRole
或Role
。NAMESPACE
:添加您的命名空间的名称。SERVICE_ACCOUNT_NAME
:添加协调器的服务账号的名称。如果 RepoSync 名称为repo-sync
,则SERVICE_ACCOUNT_NAME
为ns-reconciler-NAMESPACE
。否则为ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
。 例如,如果您的 RepoSync 名称为prod
,则SERVICE_ACCOUNT_NAME
为ns-reconciler-NAMESPACE-prod-4
。这里会使用整数4
,因为prod
包含 4 个字符。RECONCILER_ROLE
:添加ClusterRole
或Role
的名称。
将更改提交到根可靠来源:
git add . git commit -m 'Setting up a new namespace-scoped source of truth.' git push
如有必要,请根据您的首选身份验证方法创建 Secret。如果您使用
none
作为身份验证类型,则可以跳过此步骤。Secret 必须满足以下要求:
- 在 RepoSync 所在的命名空间中创建 Secret。
- Secret 名称必须与您在
repo-sync.yaml
中定义的spec.git.secretRef
名称匹配。 - 您必须将 Secret 的公钥添加到 Git 提供商。
如需验证配置,请对命名空间级可靠来源中的一个对象使用
kubectl get
。例如:kubectl get rolebindings -n NAMESPACE
如果您需要配置多个命名空间级来源,则可以重复执行上述步骤。
使用 Kubernetes API 控制可靠来源
在此方法中,中央管理员会将其他 RootSync
对象的声明委托给其他管理员。对于 RepoSync
对象,集中管理员仅会在根可靠来源中声明命名空间,并将 RepoSync
对象的声明委托给应用运维人员。
控制多个根可靠来源
其他管理员可以通过完成以下任务来控制根可靠来源:
将以下清单之一保存为
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 Federation for GKE 时选择此选项。
如需详细了解这些身份验证类型,请参阅授予 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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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
标记中拉取的,但您也可以通过TAG
或DIGEST
拉取映像。在PACKAGE_NAME
中指定TAG
或DIGEST
:- 如需通过
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 Federation for GKE 时选择此选项。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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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 Federation for GKE 时选择此选项。gcpserviceaccount
:使用 Google 服务账号访问映像。
此字段为必填字段。
ROOT_EMAIL
:如果您已将gcpserviceaccount
添加为ROOT_AUTH_TYPE
,请添加您的 Google 服务账号电子邮件地址。例如acm@PROJECT_ID.iam.gserviceaccount.com
。ROOT_SECRET_NAME
:添加 Secret 名称(如果token
为ROOT_AUTH_TYPE
)。此字段是可选字段。ROOT_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。
如需详细了解如何为 CA 证书配置 Secret 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
spec
字段的字段的完整列表,请参阅 RootSync 字段。此清单会创建一个使用 Helm 作为来源的
RootSync
对象。应用更改:
kubectl apply -f root-sync.yaml
如果您需要配置多个根可靠来源,则可以重复执行上述步骤。
控制命名空间级可靠来源
中心管理员任务
中心管理员需完成以下任务:
在根可靠来源中,为命名空间级来源声明
namespace
配置。# ROOT_REPO/namespaces/NAMESPACE/namespace.yaml apiVersion: v1 kind: Namespace metadata: name: NAMESPACE
将
NAMESPACE
替换为您的命名空间的名称。在根可靠来源中,声明
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。此角色允许细化的权限。
将更改提交到根可靠来源:
git add . git commit -m 'Setting up new namespace-scoped source of truth.' git push
应用运维人员任务
应用运维人员可以通过完成以下任务来控制命名空间级来源:
声明
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_NAME
为ns-reconciler-NAMESPACE
;否则为ns-reconciler-NAMESPACE-REPO_SYNC_NAME
。RECONCILER_ROLE
:作为应用运维人员,您可以设置RECONCILER_ROLE
以强制可以从命名空间级来源同步哪些类型的配置。您只能进一步限制中心管理员授予您的权限集。因此,此角色不能比中心管理员在上一部分声明的OPERATOR_ROLE
更宽松。
应用 RoleBinding 配置:
kubectl apply -f sync-rolebinding.yaml
如有必要,请根据您的首选身份验证方法创建 Secret。如果您使用
none
作为身份验证类型,则可以跳过此步骤。Secret 必须满足以下要求:
- 在 RepoSync 所在的命名空间中创建 Secret。
- Secret 名称必须与您在
root-sync.yaml
中定义的spec.git.secretRef
名称匹配。 - 您必须将 Secret 的公钥添加到 Git 提供商。
声明
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 Federation for GKE 时选择此选项。如需详细了解这些身份验证类型,请参阅授予 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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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
标记中拉取的,但您也可以通过TAG
或DIGEST
拉取映像。在PACKAGE_NAME
中指定TAG
或DIGEST
:- 如需通过
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 Federation for GKE 时选择此选项。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 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
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 Federation for GKE 时选择此选项。gcpserviceaccount
:使用 Google 服务账号访问映像。
此字段为必填字段。
NAMESPACE_EMAIL
:如果您已将gcpserviceaccount
添加为ROOT_AUTH_TYPE
,请添加您的 Google 服务账号电子邮件地址。例如acm@PROJECT_ID.iam.gserviceaccount.com
。NAMESPACE_SECRET_NAME
:添加 Secret 名称(如果token
为ROOT_AUTH_TYPE
)。此字段是可选字段。NAMESPACE_CA_CERT_SECRET_NAME
:添加 Secret 的名称。如果设置了此字段,您的 Helm 提供商必须使用由此证书授权机构 (CA) 颁发的证书。Secret 必须在名为cert
的密钥下提供 CA 证书。此字段是可选字段。如需详细了解如何为 CA 证书配置 Secret 对象,请参阅配置证书授权机构
如需了解字段的说明以及可添加到
spec
字段的字段的完整列表,请参阅 RootSync 字段。应用
RepoSync
配置:kubectl apply -f repo-sync.yaml
如需验证配置,请对命名空间级来源中的一个对象使用
kubectl get
。例如:kubectl get rolebindings -n NAMESPACE
如果您需要配置多个命名空间级可靠来源,则可以重复执行上述步骤。
验证可靠来源的同步状态
您可以使用 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 方法标签页以查看相关说明。
中央控制方法
如果您使用的是在根可靠来源中控制可靠来源方法,则集中管理员可以按照以下两个步骤来移除可靠来源:
确定您要删除还是保留通过 RootSync 和 RepoSync 对象管理的资源。
如需删除 RootSync 或 RepoSync 对象管理的所有资源,请将 RootSync 或 RepoSync 对象同步到空来源。例如,没有配置的 GitHub 代码库。如果您的 RootSync 或 RepoSync 对象包含另一个 RootSync 或 RepoSync 对象,则内部 RootSync 或 RepoSync 需要先同步到空的 Git 代码库。
如果您已启用 webhook 并希望保留资源,请为已弃用的资源停用偏移防范。如果您尚未启用网络钩子,则无需执行任何其他步骤来保留资源。
从可靠来源中移除 RootSync 或 RepoSync 对象。
Kubernetes API 方法
如果您使用的是通过 Kubernetes API 控制命名空间级可靠来源方法,则应用运维人员可以按照以下步骤来移除命名空间级可靠来源:
确定您要删除还是保留通过 RootSync 和 RepoSync 对象管理的资源。
如需删除 RootSync 或 RepoSync 对象管理的所有资源,请将 RootSync 或 RepoSync 对象同步到空来源。例如,没有配置的 GitHub 代码库。如果您的 RootSync 或 RepoSync 对象包含另一个 RootSync 或 RepoSync 对象,则内部 RootSync 或 RepoSync 需要先同步到空的 Git 代码库。
如果您已启用 webhook 并希望保留资源,请为已弃用的资源停用偏移防范。如果您尚未启用网络钩子,则无需执行任何其他步骤来保留资源。
通过运行以下命令来删除 RootSync 或 RepoSync 对象:
kubectl delete -f FILE_NAME
将
FILE_NAME
替换为您的 RootSync 或 RepoSync 配置文件的名称。例如root-sync.yaml
。
后续步骤
- 了解如何在命名空间级可靠来源中防止配置偏移。
- 了解如何监控 RootSync 和 RepoSync 对象。
- 了解如何将一个可靠来源拆分为多个可靠来源。