Service broker AWS

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

  1. Installa il Service Broker AWS in Kf Kubernetes Cluster (consigliato)
  2. Installa AWS Service Broker in AWS ed esponi l'API tramite un bridge VPC

Prerequisiti

Oltre a un cluster Kubernetes con Kf e Service Catalog 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

Il deployment di AWS Service Broker viene eseguito utilizzando il grafico Helm dal 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 CloudFormation fornito modello. 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

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 il flag a livello di cluster, imposta il flag --set deployNamespacedServiceBroker=true che registrerà il broker in 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 verificare durante la risoluzione dei problemi:

  • L'infrastruttura DynamoDB è attiva
  • L'utente AWS ha accesso alla tabella DynamoDB tramite criterio 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 è richiesto l'utilizzo delle credenziali utente AWS anziché 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 bridge VPN tra Google Cloud e AWS
  2. L'API è accessibile pubblicamente (non consigliata)

In ogni caso, ti consigliamo vivamente di proteggere l'API del service broker con un certificato TLS attendibile e con credenziali di accesso.

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