建立資源參考資料


使用 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 會參照專案 ID 為 test-projectProject

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 頁面列出所有支援資源的接受格式。這些格式會列在「支援的資源」表格的「外部參照格式」欄中。您也可以前往個別資源的參考頁面 (例如 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

後續步驟

  • 請參閱資源參考資料,瞭解 Config Connector 支援的資源。

  • 瞭解如何在 Config Connector 叢集中使用Secret 的資源參照。