Agente de Serviços da AWS

O agente de serviços da AWS expõe os serviços da AWS usando o protocolo Open Service Broker (OSB). Estes documentos são baseados na documentação do agente de serviços da AWS. Este documento abrange duas instalações possíveis:

  1. Instalação do agente de serviços da AWS no cluster do Kubernetes para Kf (recomendado).
  2. Instalação do agente de serviços da AWS na AWS e exposição da API com uma ponte VPC.

Pré-requisitos

Além de ter um cluster do Kubernetes com o Kf e o catálogo de serviços instalados (consulte estas instruções), as seguintes ferramentas precisam ser instaladas na estação de trabalho em que a CLI kf será usada:

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

Método 1: instalação no GKE

O agente de serviços da AWS é implantado usando o gráfico do Helm do guia para iniciantes do agente de serviços da AWS para Kubernetes.

Infraestrutura

O agente de serviços da AWS precisa de uma tabela do DynamoDB e de um usuário do IAM para acessar essa tabela. O método mais fácil é implantar o modelo fornecido do CloudFormation. Para instalação manual, consulte os documentos de pré-requisitos.

Helm

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

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

Em seguida, implante o gráfico do Helm, definindo o accesskeyid e o secretkey corretos da AWS:

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

Se você não quiser que o agente seja instalado em todo o cluster, defina a flag --set deployNamespacedServiceBroker=true, que vai registrar o agente no namespace implantado.

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

Verificação

Depois que o gráfico do Helm é implantado, um recurso ClusterServiceBroker deve ter sido criado. Você pode verificar usando 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 indicou que ele está pronto, aconteceu um problema. Alguns pontos a serem verificados durante a solução de problemas:

  • A infraestrutura do DynamoDB está ativa.
  • O usuário da AWS tem acesso à tabela do DynamoDB por meio da política ou do grupo.
  • Os valores do gráfico do Helm foram definidos corretamente.

Pode levar vários minutos para que o agente apareça e faça o registro no catálogo de serviços. Depois que o agente for registrado, confira os serviços fornecidos usando o comando kf marketplace.

Método 2: instalação na AWS

A desvantagem de instalar o agente de serviços da AWS em um cluster do GKE é que você precisa usar as credenciais de usuário da AWS em vez de um perfil da AWS. No entanto, o único recurso necessário do Kubernetes para que o agente de serviços da AWS funcione com o Kf é o ClusterServiceBroker, presumindo que a API do agente de serviços da AWS seja acessível no cluster do GKE.

Há dois métodos para expor a API ao cluster do GKE:

  1. A API pode ser acessada usando uma ponte VPN entre o Google Cloud e a AWS.
  2. A API pode ser acessada publicamente (não recomendado).

Em ambos os casos, é altamente recomendável proteger a API do agente de serviços com um certificado TLS confiável e credenciais de acesso.

Quando a API estiver acessível, kubectl apply um ClusterServiceBroker e um Secret do Kubernetes que contenha as credenciais para a autorização do agente de serviços.

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