Descubre y usa 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 del servicio 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 del servicio.

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

Descubre los servicios y planes de Google Cloud Platform

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

Enumera servicios

svcat

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

svcat get classes --scope cluster

Aparecerá una lista con información 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 enumerar los servicios disponibles en GCP, ejecuta el comando kubectl get clusterserviceclasses de la siguiente manera:

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

Aparecerá una lista con información 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:

Enumera los planes de servicios

svcat

También puedes enumerar los siguientes planes de servicios disponibles:

svcat get plans --scope cluster

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

A fin de 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.

Mira 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 siguiente comando:

svcat describe plan [CLASS_NAME]/[PLAN_NAME] --scope cluster

Por ejemplo, svcat describe plan cloud-pubsub/beta --scope cluster:

  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 de la siguiente manera:

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

A fin de 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 aprovisionamiento y vinculación.

svcat

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

svcat describe plan [CLASS_NAME]/[PLAN_NAME] --scope cluster

Por ejemplo, svcat describe plan cloud-pubsub/beta --scope cluster:


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

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

Aprovisiona una instancia

El Catálogo de servicios aprovisiona nuevos recursos de servicios de Google Cloud en comunicación 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 para ServiceInstance llamado service_instance_spec.yaml, que se usa con el fin de aprovisionar una nueva instancia de un servicio.

El siguiente es un ejemplo de una especificación YAML para 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.

Vincula a una instancia

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

Cuando se crea una vinculación, el Agente del 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 de recursos YAML para ServiceBinding llamado service_binding_spec.yaml con la siguiente especificación:

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 la 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 que muestra el agente y la aplicación puede usarla para conectarse a la instancia de servicio.

Realiza una limpieza

Borra la instancia de servicio y la vinculación

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 de la siguiente manera:

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

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

    Deberías ver un error de unable to get instance si la instancia de servicio ya no existe.

kubectl

  1. Use el comando kubectl para borrar la vinculación del servicio mediante service_binding_spec.yaml de la siguiente manera:

    kubectl delete -f service_binding_spec.yaml
  2. Desaprovisiona la instancia de servicio mediante service_instance_spec.yaml de la siguiente manera:

    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

    Deberías ver un error de NotFound si la instancia de servicio ya no existe.

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) Desinstala el catálogo y el Agente del 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 de la siguiente manera:

    sc remove-gcp-broker

    Si es correcto, se mostrará el siguiente mensaje:

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

    sc uninstall

    Si es correcto, se mostrará 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.

Qué sigue

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

Enviar comentarios sobre...

Documentación de Kubernetes Engine