Descubre y usa los servicios de GCP

Descripción general

Puedes usar el Catálogo de servicios de Kubernetes para enumerar los servicios disponibles mediante el Agente del servicio de Google Cloud, aprovisionar instancias de servicio y vincular las instancias de servicio aprovisionadas 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

El Agente del servicio ofrece varios servicios de Google Cloud, 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 obtener una lista de los servicios de Google Cloud disponibles en este momento, 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
                                  Cloud 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 obtener una lista de los servicios de Google Cloud disponibles en este momento, ejecuta el comando kubectl get clusterserviceclasses:

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 Google Cloud Cloud 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

Se recomienda revisar el esquema JSON del plan de servicios cuando escribas la configuración YAML de 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

Para usar un servicio de Google Cloud en un clúster de GKE, primero debes aprovisionar una instancia del servicio y, luego, vincular el servicio 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 recursos de servicios de Google Cloud nuevos mediante la 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 en el botón Configurar instancia junto al servicio del que deseas crear una instancia.
  • Completa 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
    • Los parámetros adicionales específicos del servicio (opcional)
  • 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ó de manera correcta:

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.

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

    • El nombre de la vinculación del servicio
    • El nombre del secreto de Kubernetes que almacenará la información de vinculación (aquí usa el mismo nombre de la vinculación)
    • Los parámetros adicionales específicos del servicio (opcional)
  • Haz clic en el botón Guardar en la parte inferior del formulario para completar la creación de la vinculación del 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 con el 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.

Limpieza

Borra la vinculación y la instancia de servicio

A fin de evitar que se generen cargos en tu cuenta de Google Cloud por los recursos que usaste en 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. Usa el comando de kubectl para borrar la vinculación del servicio mediante service_binding_spec.yaml:

    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ó de forma correcta.

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

(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 de sc:

    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
        

Borra el clúster de Kubernetes (opcional)

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

Próximos pasos