项目范围的资源

Config Connector 可以在项目、文件夹或组织级别管理您的资源。为了让 Config Connector 确定创建资源的位置,它会先检查资源规范中是否有范围定义字段,如果未找到,则检查是否有范围定义注解

指定 projectRef 字段

大多数项目级 Config Connector 资源在其 CRD 规范中都支持名为 projectRef 的字段。您可以使用此字段指定要在其中创建资源的 Google Cloud 项目。

如果 Google Cloud 项目也通过 Project CRD 在同一集群中进行管理,您可以将该项目指定为 Kubernetes 资源引用:

...
spec:
  projectRef:
    name: PROJECT_RESOURCE_NAME
    namespace: PROJECT_RESOURCE_NAMESPACE
...

借助此方法,您可以使用 Config Connector 通过一次应用操作创建 Google Cloud项目及其子资源。如果项目 Kubernetes 资源与项目范围的资源位于同一 Kubernetes 命名空间中,则 namespace 字段为可选字段。

如果 Google Cloud 项目未作为 Kubernetes 资源在同一集群中进行管理,您可以使用 external 字段直接指定项目 ID。值的确切格式可能会因资源类型而异。最常见的两种格式是“PROJECT_ID”和“projects/PROJECT_ID”。请参阅下面的“projects/PROJECT_ID”示例:

...
spec:
  projectRef:
    external: "projects/PROJECT_ID"
...

为资源配置添加注释

如果 Config Connector 资源是项目范围的,但不支持 projectRef 字段,您可以使用 project-id 注解将项目 ID 设置为资源配置:

...
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: PROJECT_ID
...

以下示例显示包含此注解的 FooBar 资源的 YAML:

apiVersion: foo.cnrm.cloud.google.com/v1beta1
kind: FooBar
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: PROJECT_ID
  name: foobarname

为命名空间配置添加注释

您可以通过为 Kubernetes 命名空间添加注释,为新创建的资源设置默认项目 ID。如果命名空间中的任何资源在其自己的配置中明确设置了此注解,则资源级注解会覆盖命名空间级注解。

如需使用命令行为命名空间添加注解,请运行以下命令:

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

替换以下内容:

  • NAMESPACE_NAME:您的命名空间名称
  • PROJECT_ID:您的 Google Cloud 项目 ID

您也可以应用包含注解的 YAML 清单。将下面的 YAML 复制到文件中:

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: PROJECT_ID
  name: NAMESPACE_NAME

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目 ID
  • NAMESPACE_NAME:您的命名空间名称

创建文件后,将其应用于集群。

使用命名空间名称作为项目 ID

如果资源和命名空间都未指定项目 ID,则 Config Connector 会将命名空间名称用作项目 ID。Config Connector 支持此默认行为,但我们不建议这样做,因为项目 ID 的隐式默认值可能会造成混淆。