GCP 서비스 검색 및 사용

개요

Kubernetes 서비스 카탈로그를 사용하면 GCP(Google Cloud Platform) 서비스 브로커를 통해 제공되는 서비스를 나열하고, 서비스 인스턴스를 프로비저닝하고, Google Kubernetes Engine 클러스터에서 실행되는 애플리케이션에 프로비저닝된 서비스 인스턴스를 결합할 수 있습니다.

이 기능을 사용하기 위해서는 먼저 서비스 카탈로그를 설치하고 서비스 브로커를 등록해야 합니다.

서비스 카탈로그에 대한 자세한 내용은 Kubernetes 서비스 카탈로그 문서를 참조하세요.

Google Cloud Platform 서비스 및 계획 탐색

서비스 브로커는 Pub/Sub, Cloud SQL(MySQL), Cloud Storage, Cloud Spanner, 등을 포함하여 몇 가지 GCP 서비스를 제공합니다. 각 서비스는 하나 이상의 서비스 계획을 제공할 수 있습니다. 각 서비스 계획은 서비스에 대한 서로 다른 구성 또는 서비스 계층을 나타냅니다.

서비스 나열

svcat

현재 사용 가능한 GCP 서비스를 나열하려면 다음 명령어를 실행합니다.

svcat get classes

다음과 비슷한 목록이 출력됩니다.

            NAME                       DESCRIPTION                             UUID
+---------------------------+--------------------------------+--------------------------------------+
  cloud-spanner               The first horizontally           4197a602-3eb9-4d40-8e21-0311a7a8eecb
                              scalable, strongly consistent,
                              relational database service
  cloud-iam-service-account   Specialized service which        5dcd0ba6-8df6-4a2a-b5fd-981d0aa76803
                              provisions Google Cloud
                              Platform IAM service accounts.
  cloud-pubsub                Ingest event streams from        6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c
                              anywhere, at any scale, for
                              simple, reliable, real-time
                              stream analytics
  ...                         ...                              ...

kubectl

현재 사용 가능한 GCP 서비스를 나열하려면 kubectl get clusterserviceclasses 명령어를 실행합니다.

kubectl -o 'custom-columns=SERVICE-NAME:.metadata.name,SERVICE-EXTERNAL-NAME:.spec.externalName' get clusterserviceclasses

다음과 비슷한 목록이 출력됩니다.

SERVICE-NAME                           SERVICE-EXTERNAL-NAME
4197a602-3eb9-4d40-8e21-0311a7a8eecb   cloud-spanner
5dcd0ba6-8df6-4a2a-b5fd-981d0aa76803   cloud-iam-service-account
6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c   cloud-pubsub
...                                    ...

콘솔 UI

현재 사용 가능한 Google Cloud 서비스 목록을 보려면 다음 중 하나를 수행하세요.

서비스 계획 나열

svcat

또한 사용 가능한 서비스 계획을 나열할 수도 있습니다.

svcat get plans

다음 형식의 목록이 출력됩니다.

  NAME             CLASS                      DESCRIPTION                             UUID
+------+---------------------------+--------------------------------+--------------------------------------+
  beta   cloud-spanner               Cloud Spanner plan for Beta      21198c77-9452-4bf2-8935-babacc8294cb
                                     release of the Google Cloud Platform Service Broker
  beta   cloud-iam-service-account   A GCP IAM      d6f98382-a101-401f-80df-33afe9c4b5c7
                                     service account
  beta   cloud-pubsub                Pub/Sub plan for Beta release    444fe472-aabc-4c8a-a707-1975e2e908c8
                                     of the Google Cloud Platform Service Broker
  ...    ...                         ...                              ...

kubectl

또한 사용 가능한 서비스 계획을 나열할 수도 있습니다.

kubectl -o 'custom-columns=PLAN-NAME:.metadata.name,PLAN-EXTERNAL-NAME:.spec.externalName,CLASS:.spec.clusterServiceClassRef.name' get clusterserviceplans

다음 형식의 목록이 표시됩니다.

PLAN-NAME                              PLAN-EXTERNAL-NAME   CLASS
21198c77-9452-4bf2-8935-babacc8294cb   beta                 4197a602-3eb9-4d40-8e21-0311a7a8eecb
444fe472-aabc-4c8a-a707-1975e2e908c8   beta                 6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c
7bb7e217-2088-4455-8298-f711b09b1806   beta                 8e0bbfa6-2cac-40b6-8adf-e5ee8dcbe4e8
...                                    ...                  ...

콘솔 UI

Google Cloud Console에서 서비스 인스턴스 페이지로 이동하고 목록에서 서비스 이름을 클릭하여 특정 서비스에 사용 가능한 서비스 계획 목록을 볼 수 있습니다. 사용 가능한 계획 목록 및 해당 설명과 함께 서비스 개요가 포함된 페이지가 표시됩니다.

서비스 계획 보기

svcat

프로비저닝 및 결합 매개변수에 대한 세부정보를 포함하여 특정 서비스의 계획에 대한 세부정보를 보려면 다음 명령어를 사용하면 됩니다.

svcat describe plan [CLASS_NAME]/[PLAN_NAME]

예를 들어 svcat describe plan cloud-pubsub/beta의 경우 다음과 같습니다.

  Name:          beta
  Description:   Pub/Sub plan for the Beta release of the Google Cloud Platform Service Broker
UUID: 444fe472-aabc-4c8a-a707-1975e2e908c8 Status: Active Free: false Class: cloud-pubsub Instances: No instances defined Instance Create Parameter Schema: ...

kubectl

프로비저닝 및 바인딩 매개변수에 대한 세부정보를 포함하여 특정 서비스의 계획을 보려면 사용 가능한 서비스 계획 목록에서 PLAN-NAME(GUID)으로 다음 명령어를 사용합니다.

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

예를 들어 kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml은 YAML 형식으로 계획 세부정보를 출력합니다.

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServicePlan
metadata:
  creationTimestamp: 2018-04-11T18:09:30Z
  name: 444fe472-aabc-4c8a-a707-1975e2e908c8
  resourceVersion: "280"
  selfLink: /apis/servicecatalog.k8s.io/v1beta1/clusterserviceplans/444fe472-aabc-4c8a-a707-1975e2e908c8
  uid: 7b2f013c-3db3-11e8-b262-0a580a140108
spec:
  bindable: true
  clusterServiceBrokerName: gcp-beta
  clusterServiceClassRef:
    name: 6f4e8d17-4fde-45bd-9dcf-28bcb7eeea5c
  description: |
    Pub/Sub plan for the Beta release of the Google Cloud Platform Service Broker
  externalID: 444fe472-aabc-4c8a-a707-1975e2e908c8
  externalMetadata:
    bullets:
    - Provisioning an instance will create a new pubsub topic
    - Binding will grant the provided service account with access on the pubsub topic
    displayName: Cloud Pub/Sub
  externalName: beta
  free: false
  instanceCreateParameterSchema:
  ...

콘솔 UI

Google Cloud Console에서 서비스 인스턴스 페이지로 이동하고 목록에서 서비스 이름을 클릭하여 특정 서비스에 사용 가능한 서비스 계획 목록을 볼 수 있습니다. 사용 가능한 계획 목록과 함께 서비스 개요가 포함된 페이지가 표시됩니다.

서비스 계획의 JSON 스키마 보기

프로비저닝 및 결합을 위해 YAML 구성을 작성할 때 서비스 계획의 JSON 스키마를 확인해야 할 수 있습니다.

svcat

서비스 계획의 JSON 스키마를 보기 위해서는 다음 명령어를 사용할 수 있습니다.

svcat describe plan [CLASS_NAME]/[PLAN_NAME]

예를 들어 svcat describe plan cloud-pubsub/beta의 경우 다음과 같습니다.


  Name:          beta
  Description:   Pub/Sub plan for the Beta release of the Google Cloud Platform Service Broker
UUID: 444fe472-aabc-4c8a-a707-1975e2e908c8 Status: Active Free: false Class: cloud-pubsub

Instances: No instances defined

Instance Create Parameter Schema: $schema: http://json-schema.org/draft-04/schema# definitions: {} description: Input parameters to create an instance - a Pubsub topic. form:

  • key: topicId validationMessage: 'Must be 3-255 characters, start with an alphanumeric character, and contain only the following characters: letters, numbers, dashes, periods, underscores, tildes, percents or plus signs. Cannot start with goog.' properties: topicId: description: A user-specified Pubsub topic ID. maxLength: 255 minLength: 3 pattern: ^[A-Za-z][-_.~+%A-Za-z0-9]+$ title: Topic name type: string required:
  • topicId type: object ...

Instance Create Parameter Schema는 프로비저닝을 위한 JSON 스키마를 나타냅니다. 이 예에서는 필수 필드인 topicId를 지정해야 합니다.

마찬가지로 Binding Create Parameter Schema에서 바인딩을 위한 JSON 스키마를 볼 수 있습니다.

kubectl

서비스 계획의 JSON 스키마를 보려면 PLAN-NAME(GUID)과 함께 다음 명령어를 사용합니다.

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

예를 들면 다음과 같습니다. kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml:

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServicePlan
metadata:
  creationTimestamp: 2018-04-11T18:09:30Z
  name: 444fe472-aabc-4c8a-a707-1975e2e908c8
  resourceVersion: "280"
  selfLink: /apis/servicecatalog.k8s.io/v1beta1/clusterserviceplans/444fe472-aabc-4c8a-a707-1975e2e908c8
  uid: 7b2f013c-3db3-11e8-b262-0a580a140108
spec:
  ...
  instanceCreateParameterSchema:
    $schema: http://json-schema.org/draft-04/schema#
    definitions: {}
    description: Input parameters to create an instance - a Pubsub topic.
    form:
    - key: topicId
      validationMessage: 'Must be 3-255 characters, start with an alphanumeric character,
        and contain only the following characters: letters, numbers, dashes, periods,
        underscores, tildes, percents or plus signs. Cannot start with goog.'
    properties:
      topicId:
        description: A user-specified Pubsub topic ID.
        maxLength: 255
        minLength: 3
        pattern: ^[A-Za-z][-_.~+%A-Za-z0-9]+$
        title: Topic name
        type: string
    required:
    - topicId
    type: object
...

instanceCreateParameterSchema는 프로비저닝을 위한 JSON 스키마를 나타냅니다. 이 예에서는 필수 필드인 topicId를 지정해야 합니다.

마찬가지로 serviceBindingCreateParameterSchema에서 바인딩을 위한 JSON 스키마를 볼 수 있습니다.

콘솔 UI

현재는 Google Cloud Console에서 JSON 스키마를 표시하지 않습니다. kubectl 또는 svcat를 사용하세요.

Google Cloud Platform 서비스 사용

GKE 클러스터 내에서 GCP 서비스를 사용하려면 먼저 서비스 인스턴스를 프로비저닝하고 이를 인스턴스에 결합해야 합니다. 결합을 만들면 애플리케이션에서 사용되는 서비스 계정에 서비스 인스턴스에 액세스할 수 있는 적합한 권한이 부여됩니다. 또한 인스턴스에 액세스하는 데 필요한 정보가 Kubernetes 보안 비밀의 형태로 애플리케이션에 제공됩니다.

인스턴스 프로비저닝

서비스 카탈로그는 Open Service Broker API를 통해 서비스 브로커와 통신하여 새로운 Google Cloud 서비스 리소스를 프로비저닝합니다.

svcat

다음 svcat 명령어를 사용하여 새로운 서비스 인스턴스를 프로비저닝합니다.

svcat provision [NAME] --class [CLASS_NAME] --plan [PLAN_NAME] (--namespace [NAMESPACE] --param [KEY1]=[VALUE1] --param [KEY2]=[VALUE2] ...)

다음 명령어로 인스턴스 상태를 확인할 수 있습니다.

svcat get instance [NAME] (--namespace [NAMESPACE])

kubectl

서비스의 새 인스턴스를 프로비저닝하기 위해 사용되는 service_instance_spec.yaml이라는 ServiceInstance YAML 파일을 만듭니다.

다음은 ServiceInstance YAML 사양의 예입니다.

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
  name: [SERVICE_INSTANCE_NAME]  # example: gcp-pubsub-instance
  namespace: [NAMESPACE]         # example: pubsub-app-namespace
spec:
  # References one of the previously returned services
  clusterServiceClassExternalName: [GCP_SERVICE_NAME]  # example: cloud-pubsub
  clusterServicePlanExternalName: [SERVICE_PLAN_NAME]  # example: beta
  parameters:
    [KEY1]: [VALUE1]
    ...

kubectl 명령어를 사용해서 YAML 파일을 사용하는 서비스 인스턴스를 만듭니다.

kubectl create -f service_instance_spec.yaml

다음 명령어를 실행하여 프로비저닝이 성공했는지 확인합니다.

kubectl get -f service_instance_spec.yaml -o 'custom-columns=INSTANCE-NAME:.metadata.name,SERVICE:.spec.clusterServiceClassExternalName,PLAN:.spec.clusterServicePlanExternalName,STATUS:.status.conditions[0].reason'

콘솔 UI

  • 서비스 클래스 페이지에서 제공되는 서비스 목록에서 인스턴스를 만들려는 서비스 옆에 있는 인스턴스 구성 버튼을 클릭합니다.
  • 서비스 인스턴스 만들기 양식을 작성합니다. 다음을 지정해야 합니다.

    • 서비스 인스턴스 이름
    • 서비스를 사용할 클러스터
    • 서비스 제공 항목의 계층인 서비스 계획
    • 결합을 위해 서비스 인스턴스를 제공할 네임스페이스
    • (선택 사항) 서비스와 관련된 추가 매개변수
  • 양식 아래에서 저장 버튼을 클릭하여 서비스 인스턴스 만들기를 완료합니다. 그러면 다른 활성 서비스 인스턴스와 함께 새 인스턴스가 목록에 표시되는 서비스 인스턴스 페이지로 돌아갑니다.

서비스 인스턴스가 준비되었으면 이를 결합할 수 있습니다.

인스턴스 결합

서비스 계정을 가져오려면 다음 중 하나를 수행할 수 있습니다.

서비스 브로커는 결합을 만들어서 지정된 서비스 계정에 권한/역할을 부여하고, 인스턴스 연결 및 액세스를 위해 필요한 정보를 반환합니다. 따라서 서비스 계정으로 작동하는 애플리케이션에는 서비스 인스턴스에 대한 액세스 권한이 부여되어야 합니다.

svcat

다음 svcat 명령어를 사용하여 기존 서비스 인스턴스에 결합합니다.

svcat bind [INSTANCE_NAME] (--namespace [NAMESPACE] --param [KEY1]=[VALUE1] --param [KEY2]=[VALUE2] ...)

그러면 서비스 인스턴스와 동일한 이름의 결합이 생성됩니다. 다음 명령어로 결합 상태를 확인할 수 있습니다.

svcat get binding [NAME] (--namespace [NAMESPACE])

kubectl

다음 사양에 따라 service_binding_spec.yaml이라는 ServiceBinding YAML 리소스 파일을 만듭니다.

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
  name: [SERVICE_BINDING_NAME]     # example: gcp-pubsub-binding
  namespace: [NAMESPACE]           # example: pubsub-app-namespace
spec:
  instanceRef:
    name: [SERVICE_INSTANCE_NAME]  # example: gcp-pubsub-instance
  parameters:
    [KEY1]: [VALUE1]
    ...

kubectl 명령어를 사용해서 YAML 파일을 사용하는 서비스 결합을 만듭니다.

kubectl create -f service_binding_spec.yaml

다음 명령어를 실행하여 결합이 성공했는지 확인합니다.

kubectl get -f service_binding_spec.yaml -o 'custom-columns=BINDING-NAME:.metadata.name,SERVICE-INSTANCE:.spec.instanceRef.name,STATUS:.status.conditions[0].reason,OUTPUT-SECRET:.spec.secretName'

콘솔 UI

  • 서비스 인스턴스 페이지로 이동하고 결합하려는 서비스 인스턴스의 이름을 클릭합니다. 서비스 인스턴스 세부정보가 포함된 페이지가 표시됩니다. 페이지 하단 쪽의 결합 만들기 버튼을 클릭합니다.

  • 서비스 결합 만들기... 양식을 작성합니다. 다음을 지정해야 합니다.

    • 서비스 결합의 이름
    • 결합 정보를 저장하기 위한 Kubernetes 보안 비밀의 이름. 여기에서는 결합과 동일한 이름을 사용합니다.
    • (선택 사항) 서비스와 관련된 추가 매개변수
  • 양식 아래에서 저장 버튼을 클릭하여 서비스 결합 만들기를 완료합니다. 그러면 다른 활성 서비스 결합과 함께 결합이 목록에 표시되는 서비스 인스턴스 세부정보 페이지로 돌아갑니다.

결합의 결과로 서비스 인스턴스의 네임스페이스에 동일한 이름의 보안 비밀이 생성됩니다. 보안 비밀에는 브로커에서 반환된 연결 정보가 포함되며, 애플리케이션이 이를 사용하여 서비스 인스턴스에 연결할 수 있습니다.

삭제

서비스 인스턴스 및 결합 삭제

위에 표시된 단계에서 사용된 리소스에 대한 비용이 GCP 계정에 청구되지 않도록 하려면 서비스 인스턴스 및 결합을 삭제합니다.

svcat

  1. 다음 svcat 명령어를 사용하여 서비스 인스턴스 결합을 해제합니다.

    svcat unbind [INSTANCE_NAME] (--namespace [NAMESPACE])

    그러면 서비스 인스턴스 결합이 모두 삭제됩니다.

  2. 서비스 인스턴스를 프로비저닝 해제합니다.

    svcat deprovision [NAME] (--namespace [NAMESPACE])
  3. 서비스 인스턴스가 성공적으로 삭제되었는지 확인합니다.

    svcat get instances [NAME] (--namespace [NAMESPACE])

    서비스 인스턴스가 더 이상 존재하지 않으면 unable to get instance 오류가 표시됩니다.

kubectl

  1. kubectl 명령어를 사용해서 service_binding_spec.yaml을 사용하는 서비스 결합을 삭제합니다.

    kubectl delete -f service_binding_spec.yaml
  2. service_instance_spec.yaml을 사용하는 서비스 인스턴스를 프로비저닝 해제합니다.

    kubectl delete -f service_instance_spec.yaml
  3. 서비스 인스턴스가 성공적으로 삭제되었는지 확인합니다.

    kubectl get -f service_instance_spec.yaml

    서비스 인스턴스가 더 이상 존재하지 않으면 NotFound 오류가 표시됩니다.

콘솔 UI

  1. 서비스 인스턴스 페이지로 이동하고 결합 해제하려는 서비스 인스턴스의 이름을 클릭합니다. 서비스 인스턴스 세부정보가 포함된 페이지가 표시됩니다. 페이지 하단에서 삭제하려는 결합 옆의 휴지통 버튼을 클릭합니다.

  2. 확인 대화상자에서 DELETE 버튼을 클릭합니다. 서비스 결합 상태가 Unbinding으로 변경됩니다.

  3. 서비스 인스턴스 세부정보 페이지 상단에서 DELETE 버튼을 클릭하고 확인 대화상자에서 DELETE 버튼을 클릭합니다. 그러면 서비스 인스턴스 목록 페이지로 돌아갑니다.

  4. 서비스 인스턴스 목록 페이지를 새로고침하고 서비스 인스턴스가 성공적으로 삭제되었는지 확인합니다.

서비스 인스턴스가 존재하지 않으면 서비스 인스턴스 및 결합 삭제가 완료된 것입니다.

(선택 사항) 서비스 카탈로그 및 서비스 브로커 설치 제거

서비스 카탈로그에 대한 다른 샘플을 진행하지 않으려면 서비스 카탈로그 및 서비스 브로커를 설치 제거할 수 있습니다.

  1. sc 설치 프로그램 도구를 사용하여 서비스 브로커를 등록 해제합니다.

    sc remove-gcp-broker

    성공하면 다음 메시지가 출력됩니다.

    The Service Broker removed successfully.
  2. Kubernetes 클러스터에서 서비스 카탈로그를 설치 제거합니다.

    sc uninstall

    성공하면 다음 메시지가 출력됩니다.

    deleting service catalog configs...
    uninstalled service catalog successfully
    

(선택 사항) Kubernetes 클러스터 삭제

비용이 부과되지 않도록 하려면 Kubernetes 가이드에 따라 더 이상 필요하지 않은 클러스터를 삭제합니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine