Service broker AWS

AWS Service Broker espone i servizi AWS tramite il protocollo Open Service Broker (OSB). Queste documentazioni si basano sulla documentazione di AWS Service Broker. Questo documento illustra due possibili installazioni:

  1. Installa AWS Service Broker nel cluster Kubernetes Kf (opzione consigliata)
  2. Installa AWS Service Broker in AWS ed esponi l'API tramite un bridge VPC

Prerequisiti

Oltre a un cluster Kubernetes con Kf e catalogo dei servizi installati (consulta queste istruzioni), sulla workstation in cui utilizzerai la CLI kf devono essere installati i seguenti strumenti:

  1. helm: segui queste istruzioni per installare l'interfaccia a riga di comando helm.

Metodo 1: installazione in GKE

AWS Service Broker viene dispiegato utilizzando il grafico Helm riportato nella guida introduttiva di AWS Service Broker per Kubernetes.

Infrastruttura

AWS Service Broker richiede una tabella DynamoDB e un utente IAM per accedere alla tabella. Il metodo più semplice è eseguire il deployment del modello CloudFormation fornito. Per l'installazione manuale, consulta la documentazione sui prerequisiti.

Helm

Innanzitutto, aggiungi il repository Helm alla tua macchina:

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

Poi esegui il deployment del grafico Helm impostando accesskeyid e secretkey AWS corretti:

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

Se non vuoi che il broker venga installato a livello di cluster, imposta il flag--set deployNamespacedServiceBroker=true che registrerà il broker nello spazio dei nomi di cui è stato eseguito il deployment.

Un elenco completo dei parametri di configurazione è disponibile nella definizione values.yaml del modello Helm.

Verifica

Dopo il deployment del grafico Helm, dovrebbe essere stata creata una risorsa ClusterServiceBroker. Puoi controllare 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

Se STATUS non è pronto, si è verificato un problema. Ecco alcuni aspetti da controllare durante la risoluzione dei problemi:

  • L'infrastruttura DynamoDB è attiva
  • L'utente AWS ha accesso alla tabella DynamoDB tramite criteri o gruppo
  • I valori del grafico Helm sono stati impostati correttamente

Potrebbero essere necessari diversi minuti prima che il tuo broker venga visualizzato e si registri nel Catalogo dei servizi. Una volta registrato il broker, puoi visualizzare i servizi forniti con il comando kf marketplace.

Metodo 2: installazione in AWS

Lo svantaggio dell'installazione di AWS Service Broker in un cluster GKE è l'uso obbligatorio delle credenziali utente AWS anziché di un ruolo AWS. Tuttavia, l'unica risorsa Kubernetes richiesta per il funzionamento di AWS Service Broker con Kf è ClusterServiceBroker, supponendo che l'API di AWS Service Broker sia raggiungibile dal cluster GKE.

Esistono due metodi per esporre l'API al cluster GKE:

  1. L'API è accessibile tramite un ponte VPN tra Google Cloud e AWS
  2. L'API è accessibile pubblicamente (non consigliata)

In entrambi i casi, è vivamente consigliato proteggere l'API di Service Broker con un certificato TLS attendibile e le credenziali di accesso.

Una volta che l'API è accessibile, kubectl apply un ClusterServiceBroker e un Secret Kubernetes che contengono le credenziali per l'autorizzazione con il 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