为 Apigee Hybrid 启用创收功能

概览

本文档介绍了在 Hybrid 组织中为 Apigee 的创收功能启用周期性费用、充值费用和设置费用的操作步骤。

前提条件

过程

为 Apigee Hybrid 创收功能启用周期性费用、充值费用和设置费用需要创建并设置 apigee-mint-task-scheduler Google 服务账号,并授予其对 Pub/Sub 数据流水线的访问权限。

  1. 如果您尚未下载 Helm 图表的 1.14.3 版,请使用以下命令拉取 Helm 图表:

    $APIGEE_HELM_CHARTS_HOME 目录中,使用 pull 命令将所有 Apigee Hybrid Helm 图表复制到您的本地存储空间:

    export CHART_REPO=oci://us-docker.pkg.dev/apigee-release/apigee-hybrid-helm-charts
    export CHART_VERSION=1.14.3
    helm pull $CHART_REPO/apigee-operator --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-datastore --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-env --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-ingress-manager --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-org --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-redis --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-telemetry --version $CHART_VERSION --untar
    helm pull $CHART_REPO/apigee-virtualhost --version $CHART_VERSION --untar
    
  2. 创建 apigee-mint-task-scheduler 服务账号。

    如果您尚未创建 apigee-mint-task-scheduler 服务账号,请立即使用 create-service-account 工具创建。如需了解如何在全新安装 Hybrid 时创建服务账号,请参阅第 4 步:创建服务账号

    1. $APIGEE_HELM_CHARTS_HOME 目录中找到 create-service-account 工具:
      $APIGEE_HELM_CHARTS_HOME/
          └── apigee-operator/
              └── etc/
                  └── tools/
                      └── create-service-account

      验证您可以执行 create-service-account。如果您刚刚下载了图表,则 create-service-account 文件可能尚未处于可执行模式。在 APIGEE_HELM_CHARTS_HOME 目录中,运行以下命令:

      $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account --help

      如果输出显示 permission denied,则需要使该文件可执行,例如在 Linux、MacOS 或 UNIX 中使用 chmod,或在 Windows 资源管理器中操作,或者在 Windows 中使用 icacls 命令。例如:

      chmod +x $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account
    2. 使用以下命令创建 apigee-mint-task-scheduler 服务账号,并将下载的证书文件存储在 apigee-org 图表目录中:
      $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/tools/create-service-account \
        --profile apigee-mint-task-scheduler \
        --env prod \
        --dir $APIGEE_HELM_CHARTS_HOME/apigee-org
  3. apigee-martapigee-mint-task-scheduler 服务账号启用控制平面访问权限。

    如果您尚未为 apigee-martapigee-mint-task-scheduler 服务账号启用控制平面访问权限,请立即按照以下步骤操作。如需了解如何在全新安装 Hybrid 时启用控制平面访问权限,请参阅第 7 步:启用控制平面访问权限

    1. 如果您不是与 Apigee Hybrid 组织关联的 Google Cloud 项目的所有者,请确保您的 Google Cloud 用户账号具有 roles/apigee.admin (Apigee Organization Admin) 角色。您可以使用以下命令检查分配给您的角色:
      gcloud projects get-iam-policy ${PROJECT_ID}  \
        --flatten="bindings[].members" \
        --format='table(bindings.role)' \
        --filter="bindings.members:your_account_email"
      

      如果您的输出不包含 roles/apigee.admin,请参阅第 7 步:启用控制平面访问权限,了解如何添加该角色或让拥有该角色的用户执行此步骤。

    2. 调用 updateControlPlaneAccess API 以使用以下命令启用所需权限:

      无数据驻留

      curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type:application/json" \
        "https://apigee.googleapis.com/v1/organizations/$ORG_NAME/controlPlaneAccess?update_mask=analytics_publisher_identities" \
        -d "{\"analytics_publisher_identities\": [\"serviceAccount:apigee-mart@$ORG_NAME.iam.gserviceaccount.com\",\"serviceAccount:apigee-mint-task-scheduler@$ORG_NAME.iam.gserviceaccount.com\",\"serviceAccount:apigee-runtime@$ORG_NAME.iam.gserviceaccount.com\"]}"
      

      其中,以下是服务账号的电子邮件地址:

      • apigee-mart@${ORG_NAME}.iam.gserviceaccount.com
      • apigee-mint-task-scheduler@${ORG_NAME}.iam.gserviceaccount.com
      • apigee-runtime@${ORG_NAME}.iam.gserviceaccount.com

      数据驻留

      curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type:application/json" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$ORG_NAME/controlPlaneAccess?update_mask=analytics_publisher_identities" \
        -d "{\"analytics_publisher_identities\": [\"serviceAccount:apigee-mart@$ORG_NAME.iam.gserviceaccount.com\",\"serviceAccount:apigee-mint-task-scheduler@$ORG_NAME.iam.gserviceaccount.com\",\"serviceAccount:apigee-runtime@$ORG_NAME.iam.gserviceaccount.com\"]}"
      

      其中:

      • 如果您的混合部署启用了数据驻留CONTROL_PLANE_LOCATION 用于指定控制平面数据的位置。这是存储代理软件包等客户核心内容的位置。如需查看列表,请参阅可用的 Apigee API 控制平面区域
      • 以下是服务账号的电子邮件地址:

        • apigee-mart@${ORG_NAME}.iam.gserviceaccount.com
        • apigee-mint-task-scheduler@${ORG_NAME}.iam.gserviceaccount.com
        • apigee-runtime@${ORG_NAME}.iam.gserviceaccount.com
    3. 验证 apigee-martapigee-mint-task-scheduler 服务账号的控制平面访问权限。

      无数据驻留

      curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type:application/json" \
        "https://apigee.googleapis.com/v1/organizations/$ORG_NAME/controlPlaneAccess"

      数据驻留

      curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type:application/json" \
        "https://$CONTROL_PLANE_LOCATION-apigee.googleapis.com/v1/organizations/$ORG_NAME/controlPlaneAccess"

      您的输出应包含 apigee-martapigee-mint-task-schedulerapigee-runtime 服务账号,类似于以下内容:

      {
        "synchronizerIdentities": [
          "serviceAccount:apigee-synchronizer@$ORG_NAME.iam.gserviceaccount.com"
        ],
        "analyticsPublisherIdentities": [
          "serviceAccount:apigee-mart@$ORG_NAME.iam.gserviceaccount.com",
          "serviceAccount:apigee-mint-task-scheduler@$ORG_NAME.iam.gserviceaccount.com",
          "serviceAccount:apigee-runtime@$ORG_NAME.iam.gserviceaccount.com"
        ]
      }
  4. 将与创收相关的节添加到 overrides.yaml 文件中。

    将以下内容添加到您的 overrides.yaml 文件中:

    runtime:
      image:
        url: "gcr.io/apigee-release/hybrid/apigee-runtime"
        tag: "1.14.3" #must be 1.14.3 or higher.
    
    mintTaskScheduler:
      # if using stored SA cert files:
      serviceAccountPath: MINT_TASK_SCHEDULER_SA_CERT_FILE.json
      # if using stored Kubernetes secrets:
      serviceAccountRef: MINT_TASK_SCHEDULER_SA_K8S_SECRET
      # if using Workload Identity on GKE:
      gsa: "apigee-mint-task-scheduler@PROJECT_ID.iam.gserviceaccount.com"
    
    # or if using Vault:
    serviceAccountSecretProviderClass: apigee-orgsakeys-spc
    

    如果您使用的是 Kubernetes Secret,请参阅在 Kubernetes Secret 中存储数据

    如果您使用的是 Vault,请参阅在 Hashicorp Vault 中存储服务账号密钥

    如果您使用的是 Vault,请确保已将 mint 添加到特定于组织的 Secret 提供程序类中。请参阅创建 SecretProviderClass 对象

  5. 将更改应用于 apigee-operatorapigee-orgapigee-env 图表。

    如果您已设置 $ORG_NAMEAPIGEE_NAMESPACE 环境变量,则可以在以下命令中使用它们:

    1. 安装 Operator。

      试运行:

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace $APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      

      安装图表:

      helm upgrade operator apigee-operator/ \
        --install \
        --namespace $APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    2. 安装 Apigee 组织。

      试运行:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace $APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml \
        --dry-run=server
      

      安装图表:

      helm upgrade $ORG_NAME apigee-org/ \
        --install \
        --namespace $APIGEE_NAMESPACE \
        --atomic \
        -f overrides.yaml
      
    3. 安装环境。对每个环境重复执行此步骤。

      一次只能安装一个环境。使用 --set env=ENV_NAME 指定环境。 如果您已在 shell 中设置 $ENV_NAME 环境变量,则可以在以下命令中使用该变量:

      试运行:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace $APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml \
        --dry-run=server
      

        ENV_RELEASE_NAME 是用于跟踪 apigee-env 图表的安装和升级情况的名称。此名称必须与安装中的其他 Helm 版本名称不同。 通常,这与 ENV_NAME 相同。但是,如果环境与环境组具有相同的名称,则您必须为环境和环境组使用不同的版本名称,例如 dev-env-releasedev-envgroup-release。如需详细了解 Helm 中的版本,请参阅 Helm 文档中的三大概念

      安装图表:

      helm upgrade ENV_RELEASE_NAME apigee-env/ \
        --install \
        --namespace $APIGEE_NAMESPACE \
        --atomic \
        --set env=$ENV_NAME \
        -f overrides.yaml
      
  6. 仅限 GKE 上的 Workload Identity:为 apigee-mint-task-scheduler 服务账号配置 Workload Identity。

    如果您要执行全新安装,请执行此步骤以及第 11 步(可选):配置 Workload Identity 中的步骤。

    当您使用 apigee-org 图表的 --dry-run 标志运行 helm 升级时,输出将包含您需要使用的命令,以使用正确的 Google 服务账号和 Kubernetes 服务账号名称配置 Workload Identity。

    1. 获取为 apigee-org 设置 Workload Identity 的命令,并在输出中的 NOTES: 下运行该命令。

      helm upgrade $ORG_NAME apigee-org/ \
        --namespace $NAMESPACE \
        -f overrides.yaml \
        --dry-run=server

      输出应包含 NOTES: 下的类似以下内容的说明:

      NOTES:
      ...
      For organization GKE Workload Identity, please make sure to add the below membership to the IAM policy binding using the respective Kubernetes SA (KSA).
      gcloud iam service-accounts add-iam-policy-binding apigee-mint-task-scheduler@PROJECT_ID.iam.gserviceaccount.com \
            --role roles/iam.workloadIdentityUser \
            --member "serviceAccount:PROJECT_ID.svc.id.goog[APIGEE_NAMESPACE/apigee-mint-task-scheduler-PROJECT_ID-UNIQUE_ID-sa]" \
            --project PROJECT_ID
      

      Kubernetes 服务账号名称的格式为 apigee-mint-task-scheduler-PROJECT_ID-UNIQUE_ID

    2. 运行命令,为 apigee-mint-task-scheduler 设置 Workload Identity。

另请参阅