AWS Service Broker

O AWS Service Broker expõe os serviços AWS através do protocolo Open Service Broker (OSB). Estes documentos baseiam-se na documentação do Service Broker da AWS. Este documento abrange duas possíveis instalações:

  1. Instale o AWS Service Broker no cluster do Kf Kubernetes (recomendado)
  2. Instale o AWS Service Broker na AWS e exponha a API através de uma ponte de VPC

Pré-requisitos

Além de um cluster do Kubernetes com o Kf e o Service Catalog instalados (consulte estas instruções), as seguintes ferramentas têm de ser instaladas na estação de trabalho onde vai usar a CLI kf:

  1. helm: siga estas instruções para instalar a CLI helm.

Método 1: instale no GKE

O AWS Service Broker é implementado através do gráfico Helm do guia de introdução do AWS Service Broker para o Kubernetes.

Infraestrutura

O Service Broker da AWS requer uma tabela do DynamoDB e um utilizador do IAM para aceder à tabela. O método mais fácil é implementar o modelo do CloudFormation fornecido. Para a instalação manual, consulte os documentos de pré-requisitos.

Leme

Primeiro, adicione o repositório Helm à sua máquina:

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

Em seguida, implemente o gráfico Helm, definindo os valores accesskeyid e secretkey da AWS corretos:

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

Se não quiser que o agente instalado ao nível do cluster defina a flag --set deployNamespacedServiceBroker=true, que regista o agente no espaço de nomes implementado.

Pode encontrar uma lista completa de parâmetros de configuração na definição values.yaml do modelo Helm.

Validação

Após a implementação do gráfico Helm, deve ter sido criada uma ClusterServiceBroker resource. Pode verificar se tem o ícone com o kubectl:

$ kubectl get ClusterServiceBroker aws-servicebroker

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

Se o STATUS não estiver pronto, ocorreu um problema. Algumas questões a verificar durante a resolução de problemas:

  • A infraestrutura do DynamoDB está operacional
  • O utilizador da AWS tem acesso à tabela do DynamoDB através de uma política ou de um grupo
  • Os valores do gráfico Helm foram definidos corretamente

Pode demorar vários minutos até que o seu agente seja apresentado e se registe no catálogo de serviços. Depois de o agente estar registado, pode ver os serviços fornecidos com o comando kf marketplace.

Método 2: instale no AWS

A desvantagem de instalar o AWS Service Broker num cluster do GKE é a utilização obrigatória de credenciais de utilizador da AWS em vez de uma função da AWS. No entanto, o único recurso do Kubernetes necessário para que o AWS Service Broker funcione com o Kf é o ClusterServiceBroker, partindo do princípio de que a API do AWS Service Broker é acessível a partir do cluster do GKE.

Existem dois métodos através dos quais a API pode ser exposta ao cluster do GKE:

  1. A API é acessível através de uma ponte VPN entre o Google Cloud e a AWS
  2. A API é acessível publicamente (não recomendado)

Em qualquer dos casos, recomendamos vivamente que proteja a API do Service Broker com um certificado TLS fidedigno e credenciais de acesso.

Assim que a API estiver acessível, kubectl apply cria um ClusterServiceBroker e um Kubernetes Secret que contém as credenciais para autorização com o 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