Descubrir y usar los servicios de GCP

Descripción general

Puedes usar el catálogo de servicios de Kubernetes a fin de enumerar los servicios disponibles en el agente de servicios de Google Cloud Platform (GCP), aprovisionar instancias de servicios y vincular las instancias de servicios aprovisionados a una aplicación que se ejecute en tu clúster de Google Kubernetes Engine.

Para usar esta característica, primero debes instalar el catálogo de servicios y registrar el agente de servicios.

Para obtener más información sobre el catálogo de servicios, consulta la documentación sobre el catálogo de servicios de Kubernetes.

Descubrir los planes y servicios de Google Cloud Platform

El agente de servicios ofrece varios servicios de GCP, incluidos Pub/Sub, Cloud SQL (MySQL), Cloud Storage, Cloud Spanner, entre otros. Cada servicio puede ofrecerte uno o más planes de servicios; y cada uno de estos representa un nivel distinto de la configuración o del servicio.

Mostrar servicios

svcat

Para mostrar los servicios disponibles en GCP, ejecuta el siguiente comando:

svcat get classes

Aparecerá una lista similar a la siguiente:

            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

Para mostrar los servicios disponibles en GCP, ejecuta el comando kubectl get clusterserviceclasses:

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

Aparecerá una lista similar a la siguiente:

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
...                                    ...

console ui

Para ver una lista de los servicios disponibles de Google Cloud, tienes las dos opciones que se indican a continuación:

Enumerar los planes de servicios

svcat

También puedes enumerar los planes de servicios disponibles:

svcat get plans

Aparecerá una lista con el siguiente formato:

  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

También puedes enumerar los planes de servicios disponibles:

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

Aparecerá una lista con el siguiente formato:

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
...                                    ...                  ...

console ui

Para ver una lista de los planes de servicios disponibles para un servicio en particular, visita la página de instancias de servicios de Google Cloud Console y haz clic en el nombre del servicio en la lista. Aparecerá una página con una descripción general del servicio junto con una lista de los planes disponibles y sus descripciones.

Mirar planes de servicios

svcat

Si deseas ver los detalles de un plan para un servicio en particular, incluidos los detalles sobre el aprovisionamiento y la vinculación de parámetros, puedes usar el comando:

svcat describe plan [CLASS_NAME]/[PLAN_NAME]

Por ejemplo, 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

Para ver un plan de un servicio en particular, incluidos los detalles sobre el aprovisionamiento y la vinculación de parámetros, usa el siguiente comando con un PLAN-NAME (GUID) de la lista de planes de servicios disponibles:

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

Por ejemplo, kubectl get clusterserviceplans 444fe472-aabc-4c8a-a707-1975e2e908c8 -o yaml muestra los detalles del plan en formato 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:
  ...

console ui

Para ver una lista de los planes de servicios disponibles para un servicio en particular, visita la página de instancias de servicios de Google Cloud Console y haz clic en el nombre del servicio en la lista. Aparecerá una página con una descripción general de los servicios junto con una lista de los planes disponibles.

Mira el esquema JSON del plan de servicios

Es posible que te sea de utilidad revisar el esquema JSON del plan de servicios cuando escribes configuraciones YAML para aprovisionar y vincular.

svcat

Para mirar el esquema JSON del plan de servicios, usa el siguiente comando:

svcat describe plan [CLASS_NAME]/[PLAN_NAME]

Por ejemplo, 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 hace referencia al esquema JSON de aprovisionamiento. En este ejemplo, debes especificar topicId, que es un campo obligatorio.

Del mismo modo, puedes ver el esquema JSON de vinculación en Binding Create Parameter Schema.

kubectl

Para mirar el esquema JSON del plan de servicios, usa el siguiente comando con un PLAN-NAME (GUID):

kubectl get clusterserviceplans [PLAN_NAME] -o yaml

Por ejemplo, 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 hace referencia al esquema JSON de aprovisionamiento. En este ejemplo, debes especificar topicId, que es un campo obligatorio.

Del mismo modo, puedes ver el esquema JSON de vinculación en serviceBindingCreateParameterSchema.

console ui

Por ahora, no mostramos el esquema JSON en Google Cloud Console. Usa kubectl o svcat.

Usar un servicio de Google Cloud Platform

Para usar un servicio de GCP en un clúster de GKE, primero debes aprovisionar una instancia del servicio y, luego, vincularla a la instancia. Esta vinculación otorgará los permisos adecuados a la cuenta de servicio que use tu aplicación, a fin de que pueda acceder a la instancia del servicio. También permite que la información de acceso a la instancia esté disponible para la aplicación como secreto de Kubernetes.

Aprovisionar una instancia

El catálogo de servicios aprovisiona nuevos recursos de servicios de Google Cloud comunicándose con el agente del servicio por medio de la API de Open Service Broker.

svcat

Usa el siguiente comando de svcat para aprovisionar una instancia nueva de un servicio:

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

Puedes ejecutar el siguiente comando para revisar el estado de la instancia:

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

kubectl

Crea un archivo YAML ServiceInstance llamado service_instance_spec.yaml, que se usa para aprovisionar una instancia nueva de un servicio.

El siguiente es un ejemplo de un archivo YAML ServiceInstance:

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]
    ...

Usa el siguiente comando de kubectl para crear la instancia de servicio con el archivo YAML:

kubectl create -f service_instance_spec.yaml

Puedes ejecutar el siguiente comando para verificar que el aprovisionamiento se realizó correctamente:

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'

console ui

  • En la lista de servicios disponibles en la página de clases de servicios, haz clic el botón Configurar instancia junto al servicio del que deseas crear una instancia.
  • Llena el formulario Crear instancia de servicio. Debes especificar lo siguiente:

    • El nombre de la instancia del servidor
    • El clúster en el que quieres usar el servicio
    • El plan de servicio (el nivel de oferta del servicio)
    • El espacio de nombres en el que la instancia de servicio está disponible para vinculación
    • (Opcional) los parámetros adicionales específicos del servicio
  • Haz clic en el botón Guardar en la parte inferior del formulario para completar la creación de la instancia de servicio. Volverás a la página de instancias de servicio, en la que la instancia nueva aparecerá en una lista junto con las otras que se encuentren activas.

Cuando la instancia de servicio esté lista, puedes vincularte a ella.

Vincularse a una instancia

Para obtener una cuenta de servicio, puedes elegir una de las siguientes opciones:

Cuando se crea una vinculación, el agente de servicio otorga funciones o permisos a una cuenta de servicio específica y muestra la información necesaria para conectarse y acceder a la instancia. De esta forma, la aplicación que actúa como cuenta de servicio recibirá acceso a la instancia de servicio.

svcat

Usa el siguiente comando de svcat para realizar una vinculación a una instancia de servicio existente:

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

Esta función crea una vinculación del mismo nombre que la instancia de servicio. Puedes ejecutar el siguiente comando para revisar el estado de la vinculación:

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

kubectl

Crea un archivo YAML de ServiceBinding llamado service_binding_spec.yaml con las siguientes especificaciones:

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]
    ...

Usa el siguiente comando de kubectl para crear la vinculación del servicio con el archivo YAML:

kubectl create -f service_binding_spec.yaml

Puedes ejecutar el siguiente comando para verificar que vinculación se realizó correctamente:

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'

console ui

  • Ve a la página de instancias de servicios y haz clic en el nombre de la instancia de servicio a la que deseas realizar la vinculación. Aparecerá una página con los detalles de la instancia de servicio. Haz clic en el botón Crear vinculación en la parte inferior de la página.

  • Llena el formulario Crear vinculación del servicio con…. Debes especificar lo siguiente:

    • El nombre de la vinculación de servicio
    • El nombre del secreto de Kubernetes que almacenará la información de vinculación. Aquí, usa el mismo nombre de la vinculación
    • (Opcional) los parámetros adicionales específicos del servicio
  • Haz clic en el botón Guardar en la parte inferior del formulario para completar la creación de la vinculación de servicio. Volverás a la página de detalles de la instancia de servicio, en la que la vinculación aparecerá en una lista junto a otras vinculaciones de servicio activas.

Como resultado de la vinculación, se creará un secreto del mismo nombre en el espacio de nombres de la instancia del servicio. El secreto contiene la información de conexión obtenida del agente y la aplicación puede usarla para conectarse a la instancia de servicio.

Limpiar

Borrar la vinculación y la instancia de servicio

Para evitar que se generen cargos en tu cuenta de GCP por los recursos que usaste con los pasos anteriores, haz lo siguiente para borrar la vinculación y la instancia de servicio:

svcat

  1. Usa el siguiente comando de svcat para desvincular la instancia de servicio:

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

    Con esto se borrarán todas las vinculaciones de la instancia de servicio.

  2. Desaprovisiona la instancia de servicio:

    svcat deprovision [NAME] (--namespace [NAMESPACE])
  3. Revisa que la instancia de servicio se haya borrado correctamente:

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

    Si ya no queda rastro de la instancia de servicio, deberías ver el error unable to get instance.

kubectl

  1. Usa el comando kubectl para borrar la vinculación del servicio con service_binding_spec.yaml:

    kubectl delete -f service_binding_spec.yaml
  2. Desaprovisiona la instancia de servicio con service_instance_spec.yaml:

    kubectl delete -f service_instance_spec.yaml
  3. Verifica que la instancia de servicio se haya borrado correctamente:

    kubectl get -f service_instance_spec.yaml

    Si ya no queda rastro de la instancia de servicio, deberías ver el error NotFound.

console ui

  1. Ve a la página de instancias de servicios y haz clic en el nombre de la instancia de servicio de la que deseas realizar la desvinculación. Aparecerá una página con los detalles de la instancia de servicio. Haz clic en el botón Papelera junto a la vinculación que deseas borrar en la parte inferior de la página.

  2. Haz clic en el botón BORRAR en el cuadro de diálogo de confirmación. El estado de la vinculación del servicio cambiará a Unbinding.

  3. Haz clic en el botón BORRAR en la parte superior de la página de detalles de la instancia de servicio y, luego, vuelve a hacer clic en BORRAR en el cuadro de diálogo de confirmación. Volverás a la página con la lista de instancias de servicio.

  4. Actualiza la página y revisa si la instancia de servicio se borró correctamente.

Cuando la instancia de servicio ya no exista, habrás completado la limpieza de la instancia y la vinculación.

(Opcional) Desinstalar el catálogo y el agente de servicio

Si decides no seguir usando muestras del catálogo de servicios, puedes desinstalarlo junto con el agente del servicio.

  1. Cancela el registro del agente del servicio con la herramienta de instalación sc:

    sc remove-gcp-broker

    Si se realiza correctamente, verás el siguiente mensaje:

    The Service Broker removed successfully.
  2. Desinstala el catálogo de servicio de tu clúster de Kubernetes:

    sc uninstall

    Si se realiza correctamente, verás el siguiente mensaje:

    deleting service catalog configs...
    uninstalled service catalog successfully
    

(Opcional) Borrar el clúster de Kubernetes

Para evitar cobros adicionales, sigue el instructivo de Kubernetes para borrar el clúster cuando ya no lo necesites.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...