在命名空间模式下安装 Config Connector


本页面介绍了如何在命名空间模式下安装 Config Connector。

在命名空间模式下安装是 Config Connector 的扩展 安装。命名空间模式支持管理多个项目,每个项目都有自己的 Google Cloud 身份。

准备工作

在将 Config Connector 配置为在命名空间模式下运行之前,请确保已安装 Config Connector

将 Config Connector 配置为在命名空间模式下运行

如需启用命名空间模式,请完成以下步骤:

  1. 将以下 YAML 清单复制到名为 configconnector.yaml 的文件中:

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnector
    metadata:
      # the name is restricted to ensure that there is only ConfigConnector resource installed in your cluster
      name: configconnector.core.cnrm.cloud.google.com
    spec:
      mode: namespaced
      stateIntoSpec: Absent
    
  2. 使用 kubectl apply 将配置应用到集群:

    kubectl apply -f configconnector.yaml
    

配置 Config Connector 以管理命名空间中的资源

在以下部分中,您安装配置连接器的 Google Cloud 项目称为“宿主项目”HOST_PROJECT_ID。您管理资源的其他项目称为“代管项目”MANAGED_PROJECT_ID。如果您仅打算使用 Config Connector 在与您的集群相同的项目中创建 Google Cloud 资源,则这些项目可能是同一项目。

创建命名空间

如果您已有用于组织 Google Cloud 资源的命名空间,则可以跳过此步骤。

通过运行以下命令,使用 kubectl 创建新的命名空间:

kubectl create namespace NAMESPACE

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

创建身份

创建 Identity and Access Management (IAM) 服务账号并在 IAM 服务账号和 Config Connector 的 Kubernetes 服务账号之间创建绑定:

  1. 创建 IAM 服务账号。 如果您原本有一个服务账号,则可以使用原有的账号,而不必新建服务账号。通过运行以下命令,使用 gcloud 创建服务账号:

    gcloud iam service-accounts create NAMESPACE_GSA --project HOST_PROJECT_ID
    

    请替换以下内容:

    • NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务账号 (GSA) 的名称。
    • HOST_PROJECT_ID 替换为您的宿主项目 ID。

    如需详细了解如何创建服务账号,请参阅创建和管理服务账号

  2. 向 IAM 服务账号授予对代管项目的提升权限:

    gcloud projects add-iam-policy-binding MANAGED_PROJECT_ID \
        --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/owner"
    

    请替换以下内容:

    • MANAGED_PROJECT_ID 替换为您的代管项目 ID。
    • NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务账号的名称。
    • HOST_PROJECT_ID 替换为您的宿主项目 ID。
  3. 在 IAM 服务账号和 Config Connector Kubernetes 服务账号之间创建 IAM 政策绑定。您可以通过运行以下 gcloud 命令来绑定服务账号:

    gcloud iam service-accounts add-iam-policy-binding \
    NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com \
        --member="serviceAccount:HOST_PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-NAMESPACE]" \
        --role="roles/iam.workloadIdentityUser" \
        --project HOST_PROJECT_ID
    

    请替换以下内容:

    • HOST_PROJECT_ID 替换为您的宿主项目 ID。
    • NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务账号的名称。
    • NAMESPACE 替换为您的命名空间。
  4. 为 IAM 服务账号授予发布权限 将 Prometheus 指标传输到主机项目的 Google Cloud Observability。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member="serviceAccount:NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    

    替换以下内容:

    • HOST_PROJECT_ID 替换为您的宿主项目 ID。
    • NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务账号的名称。

创建 ConfigConnectorContext

如需创建 Google Cloud 资源,您需要配置 Config Connector 以监视命名空间,具体方法是在要使用的命名空间中添加 ConfigConnectorContext 对象。

要创建 ConfigConnectorContext,请完成以下步骤:

  1. 将以下 YAML 清单复制到名为 configconnectorcontext.yaml 的文件中:

    apiVersion: core.cnrm.cloud.google.com/v1beta1
    kind: ConfigConnectorContext
    metadata:
      # you can only have one ConfigConnectorContext per namespace
      name: configconnectorcontext.core.cnrm.cloud.google.com
      namespace: NAMESPACE
    spec:
      googleServiceAccount: "NAMESPACE_GSA@HOST_PROJECT_ID.iam.gserviceaccount.com"
      stateIntoSpec: Absent
    

    请替换以下内容:

    • NAMESPACE 替换为您的命名空间名称。
    • NAMESPACE_GSA 替换为绑定到命名空间的 Google 服务账号的名称。
    • HOST_PROJECT_ID 替换为您的宿主项目 ID。
  2. 使用 kubectl 将文件应用到集群:

    kubectl apply -f configconnectorcontext.yaml
    
  3. 使用 kubectl 验证 Config Connector Operator 是否为您的命名空间创建了 Kubernetes 服务账号,运行以下命令:

    kubectl get serviceaccount/cnrm-controller-manager-NAMESPACE  -n cnrm-system
    

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

  4. 使用 kubectl 验证 Config Connector 控制器 Pod 是否正在为您的命名空间运行,运行以下命令:

    kubectl wait -n cnrm-system \
        --for=condition=Ready pod \
        -l cnrm.cloud.google.com/component=cnrm-controller-manager \
        -l cnrm.cloud.google.com/scoped-namespace=NAMESPACE
    

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

    如果 Config Connector 控制器正在运行,则输出类似于:

    cnrm-controller-manager-abcdefghijk-0 condition met.
    

配置 Config Connector 以不再管理命名空间中的资源

如需配置 Config Connector 以不再管理命名空间,请移除命名空间中的所有 Config Connector 资源并删除命名空间中的 ConfigConnectorContext

移除命名空间中的 Config Connector 资源

如需最终移除 ConfigConnectorContext,请从命名空间中移除所有 Config Connector 资源。

  1. 如需发现命名空间中的所有 Config Connector 资源,请列出每个 Config Connector 自定义资源定义中的所有资源。

    kubectl get gcp -n NAMESPACE
    

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

  2. 如需移除所有 Config Connector 资源,请针对上一步输出中的每个资源发出删除命令。

    kubectl delete -n NAMESPACE KIND NAME
    

    请替换以下内容:

    • NAMESPACE:您的命名空间名称
    • KIND:在上一步中发现的资源种类
    • NAME:在上一步中发现的资源的名称

移除 ConfigConnectorContext

如需配置 Config Connector 以不再管理命名空间中的 Config Connector 资源,请删除命名空间中的 ConfigConnectorContext

  kubectl delete -n NAMESPACE ConfigConnectorContext configconnectorcontext.core.cnrm.cloud.google.com

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

在从命名空间中移除所有 Config Connector 资源之前,删除 ConfigConnectorContext 不会完成。

卸载 Config Connector

请勿按照以下步骤来卸载 配置控制器 集群。

使用 kubectl delete 移除 Config Connector CRD 和控制器组件:

kubectl delete ConfigConnectorContext --all -A –wait=false

kubectl delete ConfigConnector configconnector.core.cnrm.cloud.google.com \
    --wait=true

如需卸载 Config Connector Operator,请运行以下命令:

kubectl delete -f operator-system/configconnector-operator.yaml  --wait=true

后续步骤