Service broker AWS

Il AWS Service Broker espone i servizi AWS tramite il protocollo Open Service Broker (OSB). Questi documenti si basano sulla documentazione di AWS Service Broker. Questo documento descrive due possibili installazioni:

  1. Installare AWS Service Broker nel cluster Kf Kubernetes (consigliato)
  2. Installare AWS Service Broker in AWS ed esporre l'API tramite un bridge VPC

Prerequisiti

Oltre a un cluster Kubernetes in cui sono installati Kf e catalogo dei servizi (vedi queste istruzioni), devi installare i seguenti strumenti sulla workstation in cui utilizzerai l'interfaccia a riga di comando kf:

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

Metodo 1: installazione in GKE

Il deployment di AWS Service Broker viene eseguito utilizzando il grafico Helm della Guida introduttiva di AWS Service Broker per Kubernetes.

Infrastruttura

Il broker di servizi AWS 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 relativa ai prerequisiti.

Helm

Innanzitutto, aggiungi il repository Helm alla tua macchina:

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

Quindi esegui il deployment del grafico Helm, impostando i valori AWS accesskeyid e secretkey 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 abbia 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 divalues.yaml del modello Helm.

Verifica

Dopo il deployment del grafico Helm, dovrebbe essere stata creata una risorsa ClusterServiceBroker. Puoi verificarlo 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 verificare 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 intermediario crei e si registri al catalogo dei servizi. Una volta registrato il broker, puoi visualizzare i servizi forniti con il comando kf marketplace.

Metodo 2: installa in AWS

Lo svantaggio dell'installazione di AWS Service Broker in un cluster GKE è l'utilizzo obbligatorio delle credenziali utente AWS anziché di un ruolo AWS. Tuttavia, l'unica risorsa Kubernetes necessaria affinché AWS Service Broker possa funzionare con Kf è ClusterServiceBroker, supponendo che l'API di AWS Service Broker sia raggiungibile dal cluster GKE.

Esistono due metodi con cui l'API può essere esposta al cluster GKE:

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

In entrambi i casi, ti consigliamo vivamente di proteggere l'API del service broker con un certificato TLS e credenziali di accesso attendibili.

Una volta che l'API è accessibile, kubectl apply un ClusterServiceBroker e un Secret Kubernetes che contiene 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