리소스 참조 만들기
구성 커넥터로 만든 Google Cloud 리소스는 다른 리소스를 참조할 수 있습니다. 구성 커넥터는 리소스 참조를 통해 이러한 관계를 정의합니다. 이 주제에서는 참조가 있는 리소스를 생성하는 방법에 대해 설명합니다.
참조 유형
구성 커넥터에서 참조는 종속 항목 또는 링크일 수 있습니다.
- 종속 항목
- 종속 항목 참조는 구성 커넥터 리소스에 필요한 기존 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
이름으로 바꿉니다.예를 들어 다음 YAML 파일을 사용하여
myTopic
이라는 주제를 만들 수 있습니다.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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.
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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.
외부 참조
구성 커넥터는 관리하지 않는 리소스를 참조할 수 있습니다. 이를 외부 참조라고 부릅니다. 예를 들어 아래의 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