Agente de servicio de AWS

El agente de servicio de AWS expone los servicios de AWS a través del protocolo Open Service Broker (OSB). Estos documentos se basan en la documentación de AWS Service Broker. En este documento se describen dos posibles instalaciones:

  1. Instalar el agente de servicio de AWS en el clúster de Kubernetes de Kf (opción recomendada)
  2. Instalar el agente de servicio de AWS en AWS y exponer la API a través de un puente de VPC

Requisitos previos

Además de un clúster de Kubernetes con Kf y Service Catalog instalados (consulta estas instrucciones), debes instalar las siguientes herramientas en la estación de trabajo en la que vayas a usar la CLI de kf:

  1. helm: sigue estas instrucciones para instalar la CLI de helm.

Método 1: Instalar en GKE

El agente de servicio de AWS se implementa mediante el gráfico de Helm de la guía de inicio del agente de servicio de AWS para Kubernetes.

Infraestructura

AWS Service Broker requiere una tabla de DynamoDB y un usuario de IAM para acceder a la tabla. El método más sencillo es implementar la plantilla de CloudFormation proporcionada. Para realizar la instalación manualmente, consulta los documentos de requisitos previos.

Helm

Primero, añade el repositorio de Helm a tu máquina:

$ helm repo add aws-sb https://awsservicebroker.s3.amazonaws.com/charts

A continuación, implementa el gráfico de Helm y define los valores de accesskeyid y secretkey de AWS correctos:

$ helm install aws-sb/aws-servicebroker \
  --name aws-servicebroker \
  --namespace aws-sb \
  --set aws.secretkey=REPLACEME \
  --set aws.accesskeyid=REPLACEME

Si no quieres que el broker se instale en todo el clúster, define la marca --set deployNamespacedServiceBroker=true, que registrará el broker en el espacio de nombres implementado.

Puedes consultar una lista completa de los parámetros de configuración en la definición values.yaml de la plantilla de Helm.

Verificación

Una vez que se haya desplegado el gráfico de Helm, se habrá creado un recurso ClusterServiceBroker. Puedes comprobarlo con kubectl:

$ kubectl get ClusterServiceBroker aws-servicebroker

NAME              URL                                                                    STATUS   AGE
aws-servicebroker https://aws-servicebroker-aws-servicebroker.aws-sb.svc.cluster.local   Ready    3d

Si el STATUS no está listo, significa que ha habido un problema. Algunos aspectos que debes comprobar al solucionar problemas son los siguientes:

  • La infraestructura de DynamoDB está activa
  • El usuario de AWS tiene acceso a la tabla de DynamoDB a través de una política o un grupo.
  • Los valores del gráfico de Helm se han definido correctamente

Puede que tu broker tarde varios minutos en iniciarse y registrarse en el catálogo de servicios. Una vez que se haya registrado el agente, puedes ver los servicios proporcionados con el comando kf marketplace.

Método 2: Instalar en AWS

La desventaja de instalar AWS Service Broker en un clúster de GKE es que se deben usar las credenciales de usuario de AWS en lugar de un rol de AWS. Sin embargo, el único recurso de Kubernetes necesario para que AWS Service Broker funcione con Kf es ClusterServiceBroker, siempre que se pueda acceder a la API de AWS Service Broker desde el clúster de GKE.

Hay dos métodos para exponer la API al clúster de GKE:

  1. Se puede acceder a la API a través de un puente VPN entre Google Cloud y AWS.
  2. La API es accesible públicamente (no recomendado)

En cualquier caso, recomendamos encarecidamente proteger la API de Service Broker con un certificado TLS de confianza y credenciales de acceso.

Una vez que se puede acceder a la API, kubectl apply un ClusterServiceBroker y un Secret de Kubernetes que contiene las credenciales para autorizar con el Service Broker.

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServiceBroker
metadata:
  name: aws-sb
spec:
  # For all configuration options, look at the service catalog's
  # type definitions:
  #  https://github.com/kubernetes-sigs/service-catalog/blob/master/pkg/apis/servicecatalog/v1beta1/types.go#L185
  url: https://replace.with.url.to.service.broker
  insecureSkipTLSVerify: false # use a trusted TLS certificate
  authInfo:
    bearer: # or basic
      secretRef:
        namespace: some-namespace
        name: some-secret-name