建立資源參考資料
使用 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
會參照專案 ID 為 test-project
的 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 頁面列出所有支援資源的接受格式。這些格式會列在「支援的資源」表格的「外部參照格式」欄中。您也可以前往個別資源的參考頁面 (例如 PubSubTopic),查看資源摘要表格中「IAM 外部參照格式」列所列的值。
跨命名空間參照
Config Connector 可讓資源參照其他命名空間中的資源。不過,如果 Config Connector 是採用命名空間模式安裝,您必須授予 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