创建和关联结算账号

本文档介绍了如何创建 Google Distributed Cloud (GDC) 网闸隔离结算账号来跟踪资源用量。

Distributed Cloud 环境需要结算账号来跟踪项目和组织的使用费用。组织内的所有结算账号都使用一个价格表向客户收取服务使用费。如果您未将结算账号与组织或项目相关联,则会丢失与该资源关联的费用数据,从而导致费用差异。

本文档适用于在 GDC 中创建和管理结算账号的平台管理员或应用运维人员群组中的开发者。如需了解详情,请参阅适用于 GDC 网闸隔离配置的受众群体文档。

准备工作

申请 IAM 角色

请与您的 IAM 组织管理员联系,请求在您的项目中授予以下角色:

  • Global Organization Billing Account Admin (organization-billing-account-admin):创建、管理和绑定 BillingAccount 资源。

  • Global Organization Billing Account User (organization-billing-account-user):读取、列出和绑定 BillingAccount 资源。

  • Global Organization Billing Account Manager (organization-billing-manager):读取、列出、创建和更新 BillingAccountBinding 资源。

这些角色会绑定到项目级结算的项目命名空间,或组织级结算的平台命名空间。

获取 kubeconfig 文件

如需针对组织全局集群运行命令,请确保您拥有以下资源:

  1. 如果您没有组织全局集群的 kubeconfig 文件,请登录并生成该文件。

  2. 在这些说明中,请使用组织全局集群的 kubeconfig 文件的路径替换 ORG_GLOBAL_CLUSTER_KUBECONFIG。

创建新结算账号

kubectl

结算账号由其 name 和 namespace 唯一标识。如需创建结算账号,请使用自定义资源建立 name 和 namespace:

  1. 创建一个 YAML 文件,并添加 BillingAccount 自定义资源和以下内容:

    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccount
    metadata:
      namespace: platform
      name: BIL_ACCOUNT_NAME
    spec:
      displayName: BIL_DISPLAY_NAME
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: "012345-6789AB-CDEF01"
    

    执行以下变量替换操作:

    • BIL_ACCOUNT_NAME:结算账号的名称,例如 test-billing-account。
    • BIL_DISPLAY_NAME:结算账号显示名,例如 "Test Billing Account"。
  2. 验证您的付款配置类型。Distributed Cloud 结算账号必须采用以下付款配置之一:

    • cloudBillingConfig:默认付款配置。此配置会存储 Cloud Billing 账号 ID。

    • customConfig:合作伙伴用于存储其付款配置以向组织结算的自定义配置。customConfig 支持键值对字符串字典,其中包含一个强制性键 payment-config-type。

    以下示例展示了适用于不同付款配置的 BillingAccount YAML 文件代码段:

    cloudBillingConfig 示例:

    spec:
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: CLOUD_BILLING_ACCOUNT_ID
    

    将 CLOUD_BILLING_ACCOUNT_ID 替换为您的Google Cloud 结算账号 ID。

    customConfig 示例:

    spec:
     paymentSystemConfig:
       customConfig:
          "payment-config-type": PAYMENT_CONFIG_TYPE
    

    将 PAYMENT_CONFIG_TYPE 替换为您为自定义结算配置选择的付款配置类型。

    如果您没有组织的 customConfig 配置信息,请输入以下详细信息:

    spec:
     paymentSystemConfig:
       customConfig:
          "payment-config-type": "N/A"
    

    以下 YAML 文件显示了具有 cloudBillingConfig 配置的完整 BillingAccount 资源:

    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccount
    metadata:
      namespace: platform
      name: test-billing-account
    spec:
      displayName: "Test Billing Account"
      paymentSystemConfig:
        cloudBillingConfig:
          accountID: "012345-6789AB-CDEF01"
    
  3. 保存 YAML 文件。运行 kubectl CLI 以在组织全局集群中应用资源:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccount.yaml
    

    将 ORG_GLOBAL_CLUSTER_KUBECONFIG 替换为组织全局集群 kubeconfig 文件。

CLI

如需创建结算账号,请使用 gdcloud billing accounts create 命令。

如需了解详情,请参阅 gdcloud billing accounts create。

您必须先将结算账号与组织相关联,然后才能创建任何项目。这样可以确保在组织内创建的所有项目默认继承有效的结算账号。

如果您希望项目使用与组织结算账号不同的结算账号,也可以将项目明确关联到特定结算账号。

如需将组织关联到 BillingAccount,请执行以下操作:

  1. 将以下内容添加到 YAML 文件 billingaccountbinding.yaml 中:

    • 在 billingAccountRef 部分中,使用您要关联的 BillingAccount 中的 name 字段内容填充 name 字段。
    • 在 metadata 部分中,使用 BillingAccount 资源中相同字段的值填充 namespace 字段。在此示例中,BillingAccount 资源中的组织命名空间为 platform:
    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccountBinding
    metadata:
      name: billing
      namespace: platform
    spec:
      billingAccountRef:
        name: BIL_ACCOUNT_NAME
        namespace: platform
    
  2. 运行以下 kubectl 命令以应用 billingaccountbinding.yaml 文件:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccountbinding.yaml
    
  3. 检查 BillingAccountBinding 的状态,并验证没有任何错误:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform
    

如需将项目关联到 BillingAccount,请执行以下操作:

  1. 将以下内容添加到 billingaccountbinding.yaml 文件中:

    • 在 billingAccountRef 部分中,使用您要关联的 BillingAccount 中的 name 字段内容填充 name 字段。
    • 在 metadata 部分中,使用 BillingAccount 资源中相同字段的内容填充 namespace 字段。
    apiVersion: billing.global.gdc.goog/v1
    kind: BillingAccountBinding
    metadata:
      name: billing
      namespace: PROJECT_NAME
    spec:
      billingAccountRef:
        name: BIL_ACCOUNT_NAME
        namespace: platform
    

    执行以下变量替换操作:

    • 将 PROJECT_NAME 替换为绑定到结算账号的项目名称。
    • BIL_ACCOUNT_NAME:结算账号的名称,例如 test-billing-account。
  2. 运行以下 kubectl 命令以应用 billingaccountbinding.yaml 文件:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG apply -f billingaccountbinding.yaml
    
  3. 检查 BillingAccountBinding 的状态,并验证没有任何错误:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    

    将 PROJECT_NAME 替换为绑定到结算账号的项目名称。

列出结算账号绑定

查看组织中所有命名空间内所有已部署的 BillingAccountBinding 资源及其当前状态的列表:

  kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG get billingaccountbinding -A -o 'custom-columns=NAME:metadata.name,NAMESPACE:metadata.namespace,BillingAccountName:spec.billingAccountRef.name,STATUS:status.conditions[0].status'

此命令会输出每个 BillingAccountBinding 的 NAME、NAMESPACE、BillingAccountName 和 STATUS。STATUS 字段指示绑定是否处于活跃状态或是否存在任何错误。

结算账号层次结构和行为

将结算账号关联到组织和项目时,适用以下层次结构和行为:

  • 项目级关联优先:如果特定项目(例如 project-A)明确关联到 BillingAccount(例如 billing-account-1),则 project-A 的所有费用都将专门计入 billing-account-1。无论组织级结算账号设置如何,此项目级关联都保持有效。

  • 未关联项目的组织级关联:如果您的组织关联到某个BillingAccount(例如 billing-account-0),则该组织中没有自己的显式 BillingAccountBinding 的所有项目都会自动关联到 billing-account-0 并向其收费。此关联通常会在大约 15 分钟后生效。

  • 更改组织结算账号:如果与组织关联的结算账号发生更改(例如,billing-account-0 更改为 billing-account-new),billing-account-0 项目不会自动切换到 billing-account-new。这些项目仍绑定到 billing-account-0,您必须手动更新结算账号,才能让这些项目使用 billing-account-new。

更改关联的结算账号

在 Distributed Cloud 中,您无法删除结算账号。如果您需要更改结算配置,则必须通过修改 BillingAccountBinding 来更改与组织或项目关联的结算账号。此用例的一些场景包括以下示例:

  • 贵公司的会计规则要求您将与开发者和生产级工作负载相关的费用拆分到不同的账号中。
  • 您创建了一个结算账号,用于向客户合同收取为期一年的费用。合同到期后,您必须为超过一年的剩余期限收取费用。

对于项目

如需更改项目的关联结算账号,请按以下步骤操作:

  1. 创建新的 BillingAccount 以关联到项目。此账号将取代旧账号。

  2. 在项目命名空间中找到 BillingAccountBinding 资源 YAML 文件,查看关联了哪个结算账号:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    
  3. 修改 BillingAccountBinding 以关联到新的结算账号。在 billingAccountRef 部分中,使用本部分第 1 步中创建的新 BillingAccount 名称填充 name 字段。

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG edit billingaccountbinding billing -n PROJECT_NAME
    
  4. 完成更改后,请确保结算账号已正确更新:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n PROJECT_NAME
    

以下示例展示了一个 BillingAccountBinding YAML 文件,其中账号 expired-billing-account 关联到项目 project-one:

  apiVersion: billing.global.gdc.goog/v1
  kind: BillingAccountBinding
  metadata:
    # The name of a BillingAccountBinding will typically always be `billing`.
    name: billing
    # This is the project.
    namespace: project-one
  spec:
    billingAccountRef:
      # This is an example of a BillingAccount that has expired.
      name: expired-billing-account
      namespace: platform

以下示例展示了修改后的 BillingAccountBinding YAML 文件(来自前面的示例),用于关联名为 new-billing-account 的新账号:

  apiVersion: billing.global.gdc.goog/v1
  kind: BillingAccountBinding
  metadata:
    name: billing
    # This is the project.
    namespace: project-one
  spec:
    billingAccountRef:
      # This is the example of the new BillingAccount.
      name: new-billing-account
      namespace: platform

对于组织

如需更改组织的关联结算账号,请按以下步骤操作:

  1. 创建新的 BillingAccount,以便与组织关联。此账号将取代旧账号。

  2. 在 platform 命名空间中找到 BillingAccountBinding 资源 YAML 文件,查看关联的结算账号:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform
    
  3. 修改 BillingAccountBinding 以关联到新的结算账号。在 billingAccountRef 部分中,使用在第 1 步中创建的新 BillingAccount 名称填充 name 字段。

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG edit billingaccountbinding billing -n platform
    
  4. 完成更改后,请确保结算账号已正确更新:

    kubectl --kubeconfig ORG_GLOBAL_CLUSTER_KUBECONFIG describe billingaccountbinding billing -n platform