创建资源引用


使用 Config Connector 创建的 Google Cloud 资源可以引用其他资源。Config Connector 通过资源引用定义了这些关系。本主题介绍如何使用引用来创建资源。

引用的类型

在 Config Connector 中,引用可以是依赖项或链接

依赖项
依赖项引用指的是 Config Connector 资源所需的现有 Google Cloud 资源。例如,没有网络就不能存在防火墙规则
链接
链接引用将独立资源连接在一起。例如,项目可以与结算账号关联。

指定资源引用

您可以在资源的 spec 中指定资源引用。字段名称是资源的简称后跟 Ref。例如:

  • 对名为 topicPubSubTopic 的引用是 topicRef
  • 对名为 bucketStorageBucket 的引用是 bucketRef

引用是具有单个字段 (name) 的对象。resourceRef 中的资源将替换为引用的名称。

以下 YAML 文件描述了一个引用名为 myTopicPubSubTopic 的 Pub/Sub PubSubSubscription

apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubSubscription
metadata:
  name: pubsubsubscription-referencing-topic
spec:
  topicRef:
    name: myTopic

Pub/Sub 示例

创建 PubSubTopic

在此示例中,您将创建依赖于 PubSubTopicPubSubSubscription

  1. 将以下内容复制到名为 pubsub-topic.yaml 的文件中:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
    name: TOPIC_NAME
    

    TOPIC_NAME 替换为所需的 PubSubTopic 名称

    例如,如需创建名为 myTopic 的主题,您可以使用以下 YAML 文件:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      name: myTopic
    
  2. 使用 kubectl apply 创建 PubSubTopic

    kubectl --namespace CC_NAMESPACE apply -f pubsub-topic.yaml

    CC_NAMESPACE 替换为 Config Connector 从其管理资源的命名空间。

创建 PubSubSubscription

  1. 将以下内容复制到名为“pubsub-subscription.yaml”的文件中:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubSubscription
    metadata:
      name: pubsubsubscription-referencing-topic
    spec:
      topicRef:
        name: TOPIC_NAME
    

    TOPIC_NAME 替换为您在第 1 步中使用的 PubSubTopic 名称。例如,引用您先前创建的主题 myTopic 的 YAML 是:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubSubscription
    metadata:
      name: pubsubsubscription-referencing-topic
    spec:
      topicRef:
        name: myTopic
    
  2. 使用 kubectl apply 创建 PubSubSubscription

    kubectl --namespace CC_NAMESPACE apply -f pubsub-subscription.yaml 

    CC_NAMESPACE 替换为 Config Connector 从其管理资源的命名空间。

外部引用

Config Connector 可以引用它未管理的资源。这些引用称为外部引用。例如,下面的 ComputeURLMap 引用了一个名为 test-backendserviceBackendService

apiVersion: compute.cnrm.cloud.google.com/v1beta1
kind: ComputeURLMap
metadata:
  name: test-urlmap
spec:
  location: global
  defaultService:
    backendServiceRef:
      external: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/test-backendservice

external 可以接受的值格式取决于资源。请参阅相关文档以了解资源引用中的特定资源。您可以通过阅读资源的 external 字段的说明来了解 external 接受的值。

IAMPolicy、IAMPartialPolicy 和 IAMPolicyMember

IAMPolicyIAMPartialPolicyIAMPolicyMember 也支持“外部引用”。例如,下面的 IAMPolicyMember 引用了 Project 项目 ID test-project

apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
  name: test-iampolicymember
spec:
  member: serviceAccount:test-serviceaccount@test-project.iam.gserviceaccount.com
  role: roles/storage.admin
  resourceRef:
    kind: Project
    external: projects/test-project

如需了解 external 字段接受的格式,请参阅 参考文档IAMPolicyIAMPartialPolicyIAMPolicyMember 页面列出了所有受支持资源接受的格式。这里列出了 “External Reference Formats”(外部参考格式)支持的资源表中的“受支持的资源”列。 您还可以前往各个资源的参考页面(例如 PubSubTopic),然后查看资源摘要表的“IAM 外部引用格式”行中列出的值。

跨命名空间引用

Config Connector 允许资源引用其他命名空间中的资源。 但是,如果 Config Connector 安装在 namespaced-mode 中,则需要向 Config Connector 授予额外权限,以允许跨命名空间引用。

例如,如果要在 NAMESPACE_A 中创建一个资源来引用 NAMESPACE_B 中的资源,则需要创建以下 RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: NAMESPACE_B
  name: allow-references-from-NAMESPACE_A
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cnrm-viewer
subjects:
- kind: ServiceAccount
  name: cnrm-controller-manager-NAMESPACE_A
  namespace: cnrm-system

后续步骤

  • 请查看资源引用以了解 Config Connector 支持的资源。

  • 了解如何在 Config Connector 集群中使用对 Secret 的资源引用。