Agent de service AWS

L'agent de service AWS expose les services AWS via le protocole Open Service Broker (OSB). Ces documents sont basés sur la documentation de l'agent de service AWS. Ce document couvre deux installations possibles :

  1. Installer l'agent de service AWS dans le cluster Kubernetes Kf (recommandé)
  2. Installer l'agent de service AWS dans AWS et exposer l'API via un pont VPC

Prérequis

En plus d'un cluster Kubernetes sur lequel Kf et Service Catalog sont installés (consultez ces instructions), les outils suivants doivent être installés sur le poste de travail sur lequel vous utiliserez la CLI kf :

  1. helm : Suivez ces instructions pour installer la CLI helm.

Méthode 1 : Installer dans GKE

Vous pouvez déployer l'agent de service AWS à l'aide du chart Helm du guide de démarrage de l'agent de service AWS pour Kubernetes.

Infrastructure

L'agent de service AWS nécessite une table DynamoDB et un utilisateur IAM pour y accéder. La méthode la plus simple consiste à déployer le modèle CloudFormation fourni. Pour une installation manuelle, consultez la documentation sur les conditions préalables.

Helm

Commencez par ajouter le dépôt Helm à votre ordinateur :

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

Déployez ensuite le chart Helm en définissant les paramètres AWS accesskeyid et secretkey appropriés :

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

Si vous ne souhaitez pas que l'agent soit installé à l'échelle du cluster, définissez l'option --set deployNamespacedServiceBroker=true, qui enregistrera l'agent dans l'espace de noms déployé.

La liste complète des paramètres de configuration est disponible dans la définition du fichier values.yaml du modèle Helm.

Validation

Une fois le chart Helm déployé, une ressource ClusterServiceBroker a dû être créée. Vous pouvez vérifier à l'aide de la commande kubectl :

$ kubectl get ClusterServiceBroker aws-servicebroker

NAME              URL                                                                    STATUS   AGE
aws-servicebroker https://aws-servicebroker-aws-servicebroker.aws-sb.svc.cluster.local   Ready    3d

Si l'état (STATUS) n'est pas prêt, un problème est survenu. Voici quelques éléments à vérifier lors du dépannage :

  • L'infrastructure DynamoDB est opérationnelle
  • L'utilisateur AWS a accès à la table DynamoDB via une règle ou un groupe
  • Les valeurs du chert Helm ont été définies correctement

Plusieurs minutes peuvent s'écouler avant que votre agent ne parvienne à s'enregistrer auprès de Service Catalog. Une fois l'agent enregistré, vous pouvez afficher les services fournis avec la commande kf marketplace.

Méthode 2 : Installer dans AWS

L'inconvénient de l'installation de l'agent de service AWS dans un cluster GKE est l'utilisation obligatoire des identifiants utilisateur AWS au lieu d'un rôle AWS. Cependant, la seule ressource Kubernetes requise pour que l'agent de service AWS fonctionne avec Kf est ClusterServiceBroker, en supposant que l'API de l'agent de service AWS soit accessible depuis le cluster GKE.

Il existe deux méthodes pour que l'API puisse être exposée au cluster GKE :

  1. L'API est accessible via un pont VPN entre Google Cloud et AWS.
  2. L'API est accessible au public (déconseillé)

Dans les deux cas, il est fortement recommandé de sécuriser l'API de l'agent de service avec un certificat TLS de confiance et des identifiants d'accès.

Une fois l'API accessible, kubectl apply un ClusterServiceBroker et un Secret Kubernetes contenant les identifiants pour l'autorisation auprès de l'agent de service.

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