创建资源引用
使用 Config Connector 创建的 Google Cloud 资源可以引用其他资源。Config Connector 通过资源引用定义了这些关系。本主题介绍如何使用引用来创建资源。
引用的类型
在 Config Connector 中,引用可以是依赖项或链接。
- 依赖项
- 依赖项引用指的是 Config Connector 资源所需的现有 Google Cloud 资源。例如,没有网络就不能存在防火墙规则
- 链接
- 链接引用将独立资源连接在一起。例如,项目可以与结算账号关联。
指定资源引用
您可以在资源的 spec
中指定资源引用。字段名称是资源的简称后跟 Ref
。例如:
- 对名为
topic
的PubSubTopic
的引用是topicRef
。 - 对名为
bucket
的StorageBucket
的引用是bucketRef
。
引用是具有单个字段 (name
) 的对象。resourceRef
中的资源将替换为引用的名称。
以下 YAML 文件描述了一个引用名为 myTopic
的 PubSubTopic
的 Pub/Sub PubSubSubscription
。
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
kind: PubSubSubscription
metadata:
name: pubsubsubscription-referencing-topic
spec:
topicRef:
name: myTopic
Pub/Sub 示例
创建 PubSubTopic
在此示例中,您将创建依赖于 PubSubTopic
的 PubSubSubscription
。
将以下内容复制到名为
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
使用
kubectl apply
创建PubSubTopic
。kubectl --namespace CC_NAMESPACE apply -f pubsub-topic.yaml
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
创建 PubSubSubscription
将以下内容复制到名为“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
使用
kubectl apply
创建PubSubSubscription
。kubectl --namespace CC_NAMESPACE apply -f pubsub-subscription.yaml
将
CC_NAMESPACE
替换为 Config Connector 从其管理资源的命名空间。
外部引用
Config Connector 可以引用它未管理的资源。这些引用称为外部引用。例如,下面的 ComputeURLMap
引用了一个名为 test-backendservice
的BackendService
。
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
IAMPolicy
、IAMPartialPolicy
和 IAMPolicyMember
也支持“外部引用”。例如,下面的 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
字段接受的格式,请参阅
参考文档。IAMPolicy、IAMPartialPolicy 和 IAMPolicyMember 页面列出了所有受支持资源接受的格式。这里列出了
“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