Agente de Serviços da AWS

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

  1. Instalar o agente de serviços da AWS no cluster do Kf Kubernetes (recomendado)
  2. Instale o agente de serviços da AWS e exponha a API por meio de uma ponte VPC

Pré-requisitos

Além de 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 você usará a CLI kf:

  1. helm: siga estas instruções (em inglês) para instalar a CLI helm.

Método 1: instalar no GKE

O agente de serviços da AWS é implantado por meio do gráfico do Helm do guia de primeiros passos do agente de serviços da AWS para Kubernetes.

Infraestrutura

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

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 sinalização --set deployNamespacedServiceBroker=true, que registrará o agente no namespace implantado.

Uma lista completa de parâmetros de configuração pode ser encontrada na definição de values.yaml do modelo Helm.

Verificação

Depois que o gráfico do Helm é implantado, um recurso ClusterServiceBroker precisa ser criado. Você pode verificar isso com 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, houve um problema. Alguns pontos a serem verificados durante a solução de problemas são:

  • A infraestrutura do DynamoDB está ativa
  • O usuário da AWS tem acesso à tabela 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 se registre com o catálogo de serviços. Depois que o agente for registrado, você poderá ver os serviços fornecidos com o comando kf marketplace.

Método 2: instalar no AWS

A desvantagem da instalação do agente de serviços da AWS em um cluster do GKE é o uso obrigatório das credenciais de usuário da AWS em vez de um papel 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, supondo que a API do agente de serviços da AWS seja acessível pelo cluster do GKE.

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

  1. A API pode ser acessada por meio de uma ponte VPN entre o Google Cloud e a AWS
  2. A API é acessível 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 de ClusterServiceBroker e de um Secret do Kubernetes que contenha as credenciais para autorizar com o 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