리소스 참조 만들기
구성 커넥터로 만든 Google Cloud 리소스는 다른 리소스를 참조할 수 있습니다. 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_NAMETOPIC_NAME을 원하는PubSubTopic이름으로 바꿉니다.예를 들어 다음 YAML 파일을 사용하여
myTopic이라는 주제를 만들 수 있습니다.apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: myTopickubectl apply로PubSubTopic을 만듭니다.kubectl --namespace CC_NAMESPACE apply -f pubsub-topic.yaml
CC_NAMESPACE를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.
PubSubSubscription 만들기
다음을 `pubsub-subscription.yaml' 파일로 복사합니다.
apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubSubscription metadata: name: pubsubsubscription-referencing-topic spec: topicRef: name: TOPIC_NAMETOPIC_NAME을 1단계에서 사용한PubSubTopic이름으로 바꿉니다. 예를 들어 앞에서 만든myTopic주제를 참조하는 YAML은 다음과 같습니다.apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubSubscription metadata: name: pubsubsubscription-referencing-topic spec: topicRef: name: myTopickubectl apply로PubSubSubscription을 만듭니다.kubectl --namespace CC_NAMESPACE apply -f pubsub-subscription.yaml
CC_NAMESPACE를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.
외부 참조
구성 커넥터는 관리하지 않는 리소스를 참조할 수 있습니다. 이를 외부 참조라고 부릅니다. 예를 들어 아래의 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 외부 참조 형식' 행에 나열된 값을 확인할 수도 있습니다.
교차 네임스페이스 참조
구성 커넥터를 사용하면 리소스가 다른 네임스페이스의 리소스를 참조할 수 있습니다. 하지만 구성 커넥터가 네임스페이스 모드로 설치된 경우 교차 네임스페이스 참조를 허용하려면 구성 커넥터에 추가 권한을 부여해야 합니다.
예를 들어 NAMESPACE_B의 리소스를 참조하는 리소스를 NAMESPACE_A에 만들려면 다음 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