Créer des références de ressources

Une ressource Google Cloud créée avec Config Connector peut référencer d'autres ressources. Config Connector définit ces relations à l'aide des références de ressources. Cet article explique comment créer des ressources avec des références.

Types de références

Dans Config Connector, les références peuvent être des dépendances ou des liens.

Dépendances
Une référence de type dépendance correspond à une ressource Google Cloud existante nécessaire pour la ressource Config Connector. Par exemple, une règle de pare-feu ne peut pas exister sans un réseau.
Links
Une référence de type lien associe des ressources indépendantes. Par exemple, un projet peut être associé à un compte de facturation.

Spécifier des références de ressources

Vous devez spécifier des références de ressources dans le spec de la ressource. Le nom du champ est le nom abrégé de la ressource suivi de Ref. Exemple :

  • La référence à un PubSubTopic nommé topic est topicRef.
  • La référence à un StorageBucket nommé bucket est bucketRef.

La référence est un objet avec un seul champ (name). La ressource dans resourceRef est remplacée par le nom de la référence.

Le fichier YAML suivant décrit un PubSubSubscription Pub/Sub qui référence une classe PubSubTopic nommée myTopic.

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

Exemple Pub/Sub

Créer un sujet Pub/Sub

Dans cet exemple, vous créez un PubSubSubscription qui dépend d'un PubSubTopic.

  1. Copiez le code ci-dessous dans un fichier nommé pubsub-topic.yaml:

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

    Remplacez TOPIC_NAME par le nom PubSubTopic de votre choix.

    Par exemple, pour créer un sujet nommé myTopic, vous pouvez utiliser le fichier YAML suivant:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      name: myTopic
    
  2. Créez PubSubTopic avec kubectl apply.

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

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

Créer un abonnement Pub/Sub

  1. Copiez le code suivant dans un fichier nommé "pubsub-subscription.yaml" :

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

    Remplacez TOPIC_NAME par le nom PubSubTopic que vous avez utilisé à l'étape 1. Par exemple, le code YAML faisant référence au sujet myTopic que vous avez créé précédemment est:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubSubscription
    metadata:
      name: pubsubsubscription-referencing-topic
    spec:
      topicRef:
        name: myTopic
    
  2. Créez PubSubSubscription avec kubectl apply.

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

    Remplacez CC_NAMESPACE par l'espace de noms à partir duquel Config Connector gère les ressources.

Références externes

Config Connector peut référencer des ressources qu'il ne gère pas. Celles-ci sont appelées références externes. Par exemple, le ComputeURLMap ci-dessous fait référence à un BackendService nommé test-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

Le format des valeurs acceptées par external dépend de la ressource. Consultez les informations sur des ressources spécifiques dans la documentation de référence de la ressource. Vous pouvez savoir quelles valeurs external sont acceptées en lisant les descriptions des champs external de la ressource.

Références externes pour IAMPolicy et IAMPolicyMember

IAMPolicy et IAMPolicyMember sont également compatibles avec les références externes. Par exemple, le IAMPolicyMember ci-dessous fait référence à un Project avec l'ID de projet 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:
    apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
    kind: Project
    external: projects/test-project

Pour connaître le format accepté par le champ external, consultez la documentation de référence. Les pages IAMPolicy et IAMPolicyMember répertorie le format accepté pour toutes les ressources compatibles. Les formats sont répertoriés dans la colonne "Formats de référence externes" de la table Ressources compatibles. Vous pouvez également accéder à la page de référence d'une ressource individuelle (par exemple, PubSubTopic) et consulter la valeur répertoriée dans la ligne "IAM Reference Reference Format" (Format de référence externe IAM) de la ressource tableau récapitulatif.

Références entre les espaces de noms

Config Connector permet aux ressources de référencer des ressources dans d'autres espaces de noms. Toutefois, si Config Connector est installé en namespaced-mode, vous devez accorder des autorisations supplémentaires pour Config Connector afin d'autoriser les références entre espaces de noms.

Par exemple, si vous souhaitez créer des ressources dans NAMESPACE_A qui référencent des ressources dans NAMESPACE_B, vous devez créer RoleBinding comme suit:

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

Étape suivante