在其他 Kubernetes 发行版上安装

本页面介绍如何在 Google Kubernetes Engine (GKE) on Google Cloud 以外的 Kubernetes 发行版上安装 Config Connector。例如,Anthos clusters on AWS (GKE on AWS)

准备工作

在开始之前,请确保您已执行以下任务:

安装配置连接器

如需在其他 Kubernetes 环境中安装 Config Connector,请在创建或指定 Kubernetes 集群后,创建一个 Identity and Access Management (IAM) 服务帐号,然后在集群上安装 Config Connector 组件。

创建 ClusterRoleBinding

Config Connector 需要获得创建 Kubernetes 角色的权限才能创建资源。

通过运行以下命令来验证您是否可以创建角色:

kubectl auth can-i create roles

如果输出为 yes,请继续创建身份部分。

如果输出为 no,请在集群中创建一个 ClusterRoleBinding,以便创建角色:

kubectl create clusterrolebinding cluster-admin-binding \
    --clusterrole cluster-admin \
    --user ACCOUNT_EMAIL

ACCOUNT_EMAIL 替换为您用于登录 Cloud Billing 帐号的电子邮件地址。

输出应包含短语 cluster-admin-binding created。如果没有显示该短语,请联系您的 Cloud Billing 帐号管理员或 GKE 集群管理员以获取权限信息。

创建身份

Config Connector 需要 Cloud Identity 才能与其他资源通信。要设置身份,请创建 IAM 服务帐号服务帐号密钥。然后在运行 Config Connector 的每个集群中将密钥的凭据作为 Secret 导入。

创建服务帐号

如需创建服务帐号,请完成以下步骤:

  1. 创建 IAM 服务帐号。 如果您原本有一个服务帐号,则可以使用原有的帐号,而不必新建服务帐号。

    通过运行以下命令,使用 gcloud 工具创建服务帐号:

     gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
    

    SERVICE_ACCOUNT_NAME 替换为您的服务帐号的名称。

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

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

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

    请替换以下内容:

    • PROJECT_ID 替换为 Google Cloud 项目 ID。
    • SERVICE_ACCOUNT_NAME 替换为您的服务帐号的名称。
  3. 创建服务帐号密钥并将其凭据导出到文件 key.json 中:

    gcloud iam service-accounts keys create --iam-account \
        SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com key.json
    

    请替换以下内容:

    • SERVICE_ACCOUNT_NAME 替换为您的服务帐号的名称。
    • PROJECT_ID 替换为 Google Cloud 项目 ID。

将凭据应用到集群

如需将凭据应用于要运行 Config Connector 的集群,请完成以下步骤:

  1. 创建 cnrm-system 命名空间:

    kubectl create namespace cnrm-system
    
  2. 将密钥的凭据作为 Secret 导入。

    kubectl create secret generic SECRET_NAME \
        --from-file key.json \
        --namespace cnrm-system
    

    SECRET_NAME 替换为您要为 Secret 指定的名称。

  3. 从系统中移除凭据:

    rm key.json
    

安装 Config Connector Operator

要安装 Config Connector Operator,请完成以下步骤:

  1. 下载最新的 Config Connector tar 文件:

    gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
    
  2. 解压缩 tar 文件:

    tar zxvf release-bundle.tar.gz
    
  3. 在集群上安装 Config Connector Operator:

    kubectl apply -f operator-system/configconnector-operator.yaml
    

配置 Config Connector

要使用 Operator 配置 Config Connector,请为 ConfigConnector CustomResource 创建配置文件,然后使用 kubectl apply 命令应用该配置文件。

要使用 Operator 配置 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
      # instance installed in your cluster
      name: configconnector.core.cnrm.cloud.google.com
    spec:
     mode: cluster
     credentialSecretName: SECRET_NAME
    

    SECRET_NAME 替换为您之前创建的 Secret 的名称。

  2. 使用 kubectl apply 将配置应用到集群:

    kubectl apply -f configconnector.yaml
    

指定创建资源的位置

Config Connector 可以按项目、文件夹或组织整理资源,这与使用 Google Cloud 整理资源的方式相同。

在使用 Config Connector 创建资源之前,必须先配置创建资源的位置。为了确定创建资源的位置,Config Connector 会在资源配置或现有命名空间中使用注释。如需了解详情,请参阅整理资源

如果您没有可用于此目的的命名空间,请使用 kubectl 创建一个命名空间。
kubectl create namespace NAMESPACE

NAMESPACE 替换为您的命名空间名称。 例如 config-connector

选择一个标签页以便选择 Config Connector 创建资源的位置。

项目

如需在特定项目中创建资源,请运行以下命令:

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/project-id=PROJECT_ID

请替换以下内容:

  • NAMESPACE 替换为您的命名空间名称。
  • PROJECT_ID 替换为 Google Cloud 项目 ID。

Folder

如需在特定文件夹中创建资源,请运行以下命令:

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/folder-id=FOLDER_ID

请替换以下内容:

  • NAMESPACE 替换为您的命名空间名称。
  • FOLDER_ID 替换为您的 Google Cloud 文件夹 ID。

组织

如需在特定组织中创建资源,请运行以下命令:

    kubectl annotate namespace \
    NAMESPACE cnrm.cloud.google.com/organization-id=ORGANIZATION_ID

请替换以下内容:

  • NAMESPACE 替换为您的命名空间名称。
  • ORGANIZATION_ID 替换为您的 Google Cloud 组织 ID。

为命名空间添加注释时,Config Connector 将在相应的项目、文件夹或组织中创建资源。如需详细了解 Config Connector 如何使用 Kubernetes 命名空间,请参阅 Kubernetes 命名空间和 Google Cloud 项目

验证安装

Config Connector 在命名空间 cnrm-system 中运行其所有组件。您可以通过运行以下命令来验证 Pod 是否准备就绪:

kubectl wait -n cnrm-system \
      --for=condition=Ready pod --all

如果正确安装了 Config Connector,则输出类似于以下内容:

pod/cnrm-controller-manager-0 condition met

升级 Config Connector

如需升级 Config Connector,请下载并安装最新版本的 Config Connector Operator:

gsutil cp gs://configconnector-operator/latest/release-bundle.tar.gz release-bundle.tar.gz
tar zxvf release-bundle.tar.gz
kubectl apply -f operator-system/configconnector-operator.yaml

卸载 Config Connector

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

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

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

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

问题排查

以下部分提供有关 Config Connector 安装的问题排查提示。

排查资源协调权限问题

如果 Config Connector 无法成功协调资源,并且日志包含错误消息 The caller does not have permission, forbidden.,则说明您的 GKE 集群和/或节点池可能未启用 Workload Identity。

如需进行调查,请完成以下步骤:

  1. 将以下 Pod 配置保存为 wi-test.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: workload-identity-test
      namespace: cnrm-system
    spec:
      containers:
      - image: google/cloud-sdk:slim
        name: workload-identity-test
        command: ["sleep","infinity"]
      serviceAccountName: cnrm-controller-manager
    
  2. 在 GKE 集群中创建 Pod:
    kubectl apply -f wi-test.yaml
    
  3. 在 Pod 中打开交互式会话:
    kubectl exec -it workload-identity-test \
      --namespace cnrm-system \
      -- /bin/bash
    
  4. 列出您的身份:
    gcloud auth list
    
  5. 验证列出的身份是否与绑定到您的资源的 Google 服务帐号相匹配。

    如果改为显示 Compute Engine 默认服务帐号,则说明未在 GKE 集群和/或节点池上启用 Workload Identity。

  6. 退出交互式会话,然后从 GKE 集群中删除 Pod:
    kubectl delete pod workload-identity-test \
    --namespace cnrm-system
    

后续步骤