Google Distributed Cloud (GDC) air-gapped environments require a billing account to track costs for projects and organizations. If you don't link a billing account to an organization or project, you'll lose cost data associated with the resource.
To charge service usage to the customer, all billing accounts within an organization use a single price sheet.
Before you begin
Ask your Organization IAM Admin to grant you the following required roles. These roles bind to either the project namespace for project-level billing, or the platform namespace for organization-level billing:
Organization Billing Account Administrator: create, manage, and bind the
BillingAccountresource. Ask your Organization IAM admin to grant you theorganization-billing-account-adminrole.Organization Billing Account User: read, list, and bind the
BillingAccountresource. Ask your Organization IAM admin to grant you theorganization-billing-account-userrole.Organization Billing Account Manager: read, list, create, and update the
BillingAccountBindingresource. Ask your Organization IAM admin to grant you theorganization-billing-managerrole.
Get the kubeconfig file
To run commands against the Management API server, ensure you have the following resources:
Sign in and generate the kubeconfig file for the Management API server if you don't have one.
Use the path to the kubeconfig file of the Management API server to replace
MANAGEMENT_API_SERVER_KUBECONFIGin these instructions.
Create a new billing account
A billing account is uniquely identified by its name and namespace. To create
a billing account, use a custom resource to establish the name and namespace:
Create a YAML file, and add the
BillingAccountcustom resource and the following contents:apiVersion: billing.gdc.goog/v1 kind: BillingAccount metadata: namespace: platform name: BIL_ACCOUNT_NAME spec: displayName: BIL_DISPLAY_NAME paymentSystemConfig: cloudBillingConfig: accountID: "012345-6789AB-CDEF01"Replace the following variables:
- BIL_ACCOUNT_NAME: the name of the billing account.
For example,
test-billing-account. - BIL_DISPLAY_NAME: the billing account display name.
For example,
"Test Billing Account".
- BIL_ACCOUNT_NAME: the name of the billing account.
For example,
Verify your payment configuration type. Distributed Cloud billing accounts must have one of the following payment configurations:
cloudBillingConfig: the default payment configuration. This configuration stores a Cloud Billing account ID.customConfig: a custom configuration for partners to store their payment configuration to bill the organization.customConfigsupports a dictionary of key-value strings, with a mandatory keypayment-config-type.
The following examples show
BillingAccountYAML file snippets for different payment configurations:cloudBillingConfigspec: paymentSystemConfig: cloudBillingConfig: accountID: CLOUD_BILLING_ACCOUNT_IDReplace
CLOUD_BILLING_ACCOUNT_IDwith your Google Cloud billing account ID.customConfigspec: paymentSystemConfig: customConfig: "payment-config-type": PAYMENT_CONFIG_TYPEReplace
PAYMENT_CONFIG_TYPEwith your chosen payment configuration type for your custom billing configuration.If you don't have the information for your organization's
customConfigconfiguration, enter the following details:spec: paymentSystemConfig: customConfig: "payment-config-type": "N/A"The following YAML file shows a complete
BillingAccountresource with thecloudBillingConfigconfiguration:apiVersion: billing.gdc.goog/v1 kind: BillingAccount metadata: namespace: platform name: test-billing-account spec: displayName: "Test Billing Account" paymentSystemConfig: cloudBillingConfig: accountID: "012345-6789AB-CDEF01"Save the YAML file. Run the
kubectlCLI to apply the resource in the Management API server for the specific organization or project you want to bill:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f billingaccount.yamlReplace
MANAGEMENT_API_SERVER_KUBECONFIGwith the Management API server kubeconfig file.
Link an organization or project to a billing account
This section provides a series of steps to link an organization or project to a
BillingAccount.
Link a project
To link a project to a BillingAccount, do the following:
Add the following contents to the file:
billingaccountbinding.yaml:- In the
billingAccountRefsection, populate thenamefield with the content from thenamefield in theBillingAccountyou want to link. - In the
metadatasection, populate thenamespacefield with the content from the identical field in theBillingAccountresource.
In this example, the project namespace is PROJECT_NAME:
apiVersion: billing.gdc.goog/v1 kind: BillingAccountBinding metadata: name: billing namespace: PROJECT_NAME spec: billingAccountRef: name: BIL_ACCOUNT_NAME namespace: platformReplace
PROJECT_NAMEwith the name of the project bound to the billing account.- In the
Run the following
kubectlcommand to apply thebillingaccountbinding.yamlfile:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f billingaccountbinding.yaml
Link an organization
To link an organization to a BillingAccount, do the following:
Add the following content to the YAML file
billingaccountbinding.yaml:- In the
billingAccountRefsection, populate thenamefield with the content from thenamefield in theBillingAccountyou want to link. - In the
metadatasection, populate thenamespacefield with the content from the identical field in theBillingAccountresource. In this example, the organization namespace isplatform:
apiVersion: billing.gdc.goog/v1 kind: BillingAccountBinding metadata: name: billing namespace: platform spec: billingAccountRef: name: BIL_ACCOUNT_NAME namespace: platform- In the
Run the following
kubectlcommand to apply thebillingaccountbinding.yamlfile:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f billingaccountbinding.yaml
Unlink billing accounts from an organization or project
In Distributed Cloud, you can't delete a billing account. If you require a
change to your billing configuration, you must unlink an organization or project
from an existing billing account by modifying the BillingAccountBinding. Some
scenarios for this use case include the following examples:
- Accounting rules within your company ask that you split charges associated with developer and production-level workloads into separate accounts.
- You create a billing account to charge a customer contract for a one year period. When the contract expires, you must charge for the remaining period that exceeds a year.
To unlink a billing account from an organization or project, do the following:
Create a new
BillingAccountto link to the project. This account will replace the old account.Locate the
BillingAccountBindingresource YAML file in the project orplatformnamespace, and modify the following fields:- In the
billingAccountRefsection, populate thenamefield with a newBillingAccountname.
- In the
The following example shows a BillingAccountBinding YAML file with the account
expired-billing-account linked to the project project-one:
apiVersion: billing.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
The following example shows the BillingAccountBinding YAML file from the earlier
example modified to link a new account called new billing account:
apiVersion: billing.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