Comment configurer un pipeline de CD avec Spinnaker sur DigitalOcean Kubernetes

L'auteur a sélectionné lesFree and Open Source Fund pour recevoir un don dans le cadre du programmeWrite for DOnations.

introduction

Spinnaker est une application open source de gestion des ressources et de livraison continue pour des déploiements rapides, sûrs et reproductibles, à l'aide d'un système de pipeline puissant et personnalisable. Spinnaker permet des déploiements automatisés d'applications sur de nombreuses plates-formes, y comprisDigitalOcean Kubernetes. Lors du déploiement, vous pouvez configurer Spinnaker pour utiliser desdeployment strategies intégrés, tels que Highlander et Red / black, avec la possibilité de créer votre propre stratégie de déploiement. Il peut s'intégrer à d'autres outils DevOps, tels que Jenkins et TravisCI, et peut être configuré pour surveiller les référentiels GitHub et les registres Docker.

Spinnaker est géré parHalyard, un outil spécialement conçu pour configurer et déployer Spinnaker sur diverses plates-formes. Spinnaker requiertexternal storage pour conserver les paramètres et les pipelines de votre application. Il prend en charge différentes plates-formes pour cette tâche, commeDigitalOcean Spaces.

Dans ce didacticiel, vous allez déployer Spinnaker sur DigitalOcean Kubernetes à l’aide de Halyard, avec DigitalOcean Spaces en tant que stockage principal sous-jacent. Vous allez également configurer Spinnaker pour qu’il soit disponible sur le domaine de votre choix, sécurisé à l’aide des certificats Let’s Encrypt TLS. Ensuite, vous allez créer un exemple d'application dans Spinnaker, créer un pipeline et déployer une applicationHello World sur votre cluster Kubernetes. Après l'avoir testé, vous introduirez l'authentification et l'autorisation via les organisations GitHub. À la fin, vous disposerez d’un déploiement Spinnaker sécurisé et fonctionnel dans votre cluster Kubernetes.

[.note] #Note: Ce tutoriel a été spécifiquement testé avec Spinnaker1.13.5.
#

Conditions préalables

  • Drisse installée sur votre machine locale, selon lesofficial instructions. Veuillez noter que l'utilisation de Halyard sur les versions Ubuntu supérieures à 16.04 n'est pas prise en charge. Dans de tels cas, vous pouvez l'utiliservia Docker.

  • Un cluster DigitalOcean Kubernetes avec votre connexion configurée commekubectl par défaut. Le cluster doit disposer d'au moins 8 Go de RAM et de 4 cœurs de processeur disponibles pour Spinnaker (il en faudra davantage en cas d'utilisation plus intensive). Les instructions sur la façon de configurerkubectl sont affichées sous l'étapeConnect to your Cluster affichée lorsque vous créez votre cluster. Pour créer un cluster Kubernetes sur DigitalOcean, consultez lesKubernetes Quickstart.

  • Un contrôleur Nginx Ingress et un gestionnaire de certificats installés sur le cluster. Pour obtenir un guide sur la façon de procéder, consultezHow to Set Up an Nginx Ingress with Cert-Manager on DigitalOcean Kubernetes.

  • Un espace DigitalOcean avec des clés API (accès et secret). Pour créer un espace DigitalOcean et des clés API, consultezHow To Create a DigitalOcean Space and API Key.

  • Un nom de domaine avec trois enregistrements DNS A indiquait l’équilibreur de charge DigitalOcean utilisé par l’Ingress. Si vous utilisez DigitalOcean pour gérer les enregistrements DNS de votre domaine, consultezHow to Create DNS Records pour créer des enregistrements A. Dans ce didacticiel, nous désignerons les enregistrements A comme étantspinnaker.example.com,spinnaker-api.example.com ethello-world.example.com.

  • Un compteGitHub, ajouté à une organisation GitHub avec des autorisations d'administrateur et une visibilité publique. Le compte doit également être membre d'une équipe de l'organisation. Ceci est nécessaire pour compléter l'étape 5.

[[step-1 -—- added-a-kubernetes-account-with-drisse]] == Étape 1 - Ajout d'un compte Kubernetes avec Halyard

Dans cette section, vous allez ajouter un compte Kubernetes à Spinnaker via Halyard. Selon les termes de Spinnaker, un compte est un identifiant nommé qu’il utilise pour accéder à un fournisseur de cloud.

Dans le cadre du prérequis, vous avez créé les servicesecho1 etecho2 et une entréeecho_ingress à des fins de test; vous n'en aurez pas besoin dans ce didacticiel, vous pouvez donc les supprimer.

Commencez par supprimer l'entrée en exécutant la commande suivante:

kubectl delete -f echo_ingress.yaml

Ensuite, supprimez les deux services de test:

kubectl delete -f echo1.yaml && kubectl delete -f echo2.yaml

La commandekubectl delete accepte le fichier à supprimer lorsqu'elle est passée au paramètre-f.

Ensuite, depuis votre ordinateur local, créez un dossier qui servira d’espace de travail:

mkdir ~/spinnaker-k8s

Accédez à votre espace de travail en exécutant la commande suivante:

cd ~/spinnaker-k8s

Halyard ne sait pas encore où elle devrait déployer Spinnaker. Activez le fournisseur Kubernetes avec cette commande:

hal config provider kubernetes enable

Vous recevrez le résultat suivant:

Output+ Get current deployment
  Success
+ Edit the kubernetes provider
  Success
Problems in default.provider.kubernetes:
- WARNING Provider kubernetes is enabled, but no accounts have been
  configured.

+ Successfully enabled kubernetes

Halyard a consigné toutes les étapes nécessaires pour activer le fournisseur Kubernetes et a averti qu'aucun compte n'est encore défini.

Ensuite, vous allez créer un Kubernetesservice account pour Spinnaker, avecRBAC. Un compte de service est un type de compte limité à un seul espace de noms. Il est utilisé par les logiciels, qui peuvent effectuer diverses tâches dans le cluster. RBAC (Role Based Access Control) est une méthode de régulation de l'accès aux ressources d'un cluster Kubernetes. Il limite le champ d'action du compte pour garantir qu'aucune configuration importante n'est modifiée par inadvertance sur votre cluster.

Ici, vous accorderez à Spinnakercluster-adminles autorisations pour lui permettre de contrôler l'ensemble du cluster. Si vous souhaitez créer un environnement plus restrictif, consultez lesofficial Kubernetes documentation on RBAC.

Tout d'abord, créez l'espace de nomsspinnaker en exécutant la commande suivante:

kubectl create ns spinnaker

La sortie ressemblera à:

Outputnamespace/spinnaker created

Exécutez la commande suivante pour créer un compte de service nomméspinnaker-service-account:

kubectl create serviceaccount spinnaker-service-account -n spinnaker

Vous avez utilisé l'indicateur-n pour spécifier quekubectl crée le compte de service dans l'espace de nomsspinnaker. La sortie sera:

Outputserviceaccount/spinnaker-service-account created

Ensuite, liez-le au rôlecluster-admin:

kubectl create clusterrolebinding spinnaker-service-account --clusterrole cluster-admin --serviceaccount=spinnaker:spinnaker-service-account

Vous verrez la sortie suivante:

Outputclusterrolebinding.rbac.authorization.k8s.io/spinnaker-service-account created

Halyard utilise le kubectl local pour accéder au cluster. Vous devrez le configurer pour utiliser le compte de service nouvellement créé avant de déployer Spinnaker. Les comptes Kubernetes s'authentifient à l'aide de noms d'utilisateur et de jetons. Lorsqu'un compte de service est créé, Kubernetes crée un nouveau secret et le remplit avec le jeton de compte. Pour récupérer le jeton pour lesspinnaker-service-account, vous devez d'abord obtenir le nom du secret. Vous pouvez le récupérer dans une variable de console, nomméeTOKEN_SECRET, en exécutant:

TOKEN_SECRET=$(kubectl get serviceaccount -n spinnaker spinnaker-service-account -o jsonpath='{.secrets[0].name}')

Cela obtient des informations sur lesspinnaker-service-account depuis l'espace de nomsspinnaker et récupère le nom du premier secret qu'il contient en passant un chemin JSON.

Récupérez le contenu du secret dans une variable nomméeTOKEN en exécutant:

TOKEN=$(kubectl get secret -n spinnaker $TOKEN_SECRET -o jsonpath='{.data.token}' | base64 --decode)

Vous avez maintenant le jeton disponible dans la variable d'environnementTOKEN. Ensuite, vous devrez définir les identifiants pour le compte de service dans kubectl:

kubectl config set-credentials spinnaker-token-user --token $TOKEN

Vous verrez la sortie suivante:

OutputUser "spinnaker-token-user" set.

Ensuite, vous devrez définir l'utilisateur du contexte actuel sur lesspinnaker-token-user nouvellement créés en exécutant la commande suivante:

kubectl config set-context --current --user spinnaker-token-user

En définissant l'utilisateur actuel surspinnaker-token-user, kubectl est maintenant configuré pour utiliser lesspinnaker-service-account, mais Halyard n'en sait rien. Ajoutez un compte à son fournisseur Kubernetes en exécutant:

hal config provider kubernetes account add spinnaker-account --provider-version v2

La sortie ressemblera à ceci:

Output+ Get current deployment
  Success
+ Add the spinnaker-account account
  Success
+ Successfully added account spinnaker-account for provider
  kubernetes.

Cette commande ajoute un compte Kubernetes à Halyard, nomméspinnaker-account, et le marque comme compte de service.

Spinnaker peut généralement être déployé de deux manières: installation distribuée ou installation locale. L'installation deDistributed est ce que vous effectuez dans ce didacticiel: vous la déployez dans le cloud. L'installation deLocal, d'autre part, signifie que Spinnaker sera téléchargé et installé sur la machine sur laquelle Halyard fonctionne. Étant donné que vous déployez Spinnaker sur Kubernetes, vous devrez marquer le déploiement commedistributed, comme ceci:

hal config deploy edit --type distributed --account-name spinnaker-account

Étant donné que votre déploiement Spinnaker créera des images, il est nécessaire d'activerartifacts dans Spinnaker. Vous pouvez les activer en exécutant la commande suivante:

hal config features edit --artifacts true

Ici, vous avez activéartifacts pour permettre à Spinnaker de stocker plus de métadonnées sur les objets qu'il crée.

Vous avez ajouté un compte Kubernetes à Spinnaker, via Halyard. Vous avez activé le fournisseur Kubernetes, configuré les rôles RBAC et ajouté la configuration actuelle de Kubectl à Spinnaker, ajoutant ainsi un compte au fournisseur. Vous allez maintenant configurer votre stockage back-end.

[[step-2 -—- configuration-de-l'espace-comme-stockage-sous-jacent]] == Étape 2 - Configuration de l'espace en tant que stockage sous-jacent

Dans cette section, vous allez configurer l'espace en tant que stockage sous-jacent pour le déploiement de Spinnaker. Spinnaker utilisera cet espace pour stocker sa configuration et ses données relatives au pipeline.

Pour configurer le stockage S3 dans Halyard, exécutez la commande suivante:

hal config storage s3 edit --access-key-id your_space_access_key --secret-access-key --endpoint spaces_endpoint_with_region_prefix --bucket space_name --no-validate

N'oubliez pas de remplaceryour_space_access_key par votre clé d'accès à l'espace etspaces_endpoint_with_region_prefix par l'extrémité de votre espace. Il s'agit généralement deregion-id.digitaloceanspaces.com, oùregion-id est la région de votre espace. Vous pouvez remplacerspace_name par le nom de votre espace. L'indicateur--no-validate indique à Halyard de ne pas valider immédiatement les paramètres donnés, car la validation DigitalOcean Spaces n'est pas prise en charge.

Une fois que vous aurez exécuté cette commande, Halyard vous demandera votre clé d’accès secrète. Entrez-le pour continuer et vous verrez alors le résultat suivant:

Output+ Get current deployment
  Success
+ Get persistent store
  Success
+ Edit persistent store
  Success
+ Successfully edited persistent store "s3".

Maintenant que vous avez configuré le stockage des3, vous vous assurez que votre déploiement l'utilisera comme stockage en exécutant la commande suivante:

hal config storage edit --type s3

La sortie ressemblera à ceci:

Output+ Get current deployment
  Success
+ Get persistent storage settings
  Success
+ Edit persistent storage settings
  Success
+ Successfully edited persistent storage.

Vous avez configuré votre espace comme stockage sous-jacent utilisé par votre instance de Spinnaker. Vous allez maintenant déployer Spinnaker sur votre cluster Kubernetes et l'exposer sur vos domaines à l'aide de Nginx Ingress Controller.

[[step-3 -—- deploying-spinnaker-to-your-cluster]] == Étape 3 - Déploiement de Spinnaker sur votre cluster

Dans cette section, vous allez déployer Spinnaker sur votre cluster à l'aide de Halyard, puis exposer ses composants d'interface utilisateur et d'API sur vos domaines à l'aide d'un Nginx Ingress. Tout d’abord, vous allez configurer les URL de votre domaine: l’une pour l’interface utilisateur de Spinnaker et l’autre pour le composant API. Ensuite, vous choisirez la version de Spinnaker souhaitée et vous la déploierez à l’aide de Halyard. Enfin, vous allez créer une entrée et la configurer en tant que contrôleur Nginx.

Tout d'abord, vous devez modifier les valeurs de configuration de l'URL de l'interface utilisateur et de l'API de Spinnaker dans Halyard et les définir sur les domaines de votre choix. Pour définir le point de terminaison de l'API sur le domaine souhaité, exécutez la commande suivante:

hal config security api edit --override-base-url https://spinnaker-api.example.com

La sortie ressemblera à:

Output+ Get current deployment
  Success
+ Get API security settings
  Success
+ Edit API security settings
  Success
...

Pour définir le point de terminaison de l'interface utilisateur sur votre domaine, qui est l'endroit où vous allez accéder à Spinnaker, exécutez:

hal config security ui edit --override-base-url https://spinnaker.example.com

La sortie ressemblera à:

Output+ Get current deployment
  Success
+ Get UI security settings
  Success
+ Edit UI security settings
  Success
+ Successfully updated UI security settings.

N'oubliez pas de remplacerspinnaker-api.example.com etspinnaker.example.com par vos domaines. Ce sont les domaines sur lesquels vous avez pointé vers l'équilibreur de charge que vous avez créé au cours de la configuration requise pour Nginx Ingress Controller.

Vous avez créé et sécurisé le compte Kubernetes de Spinnaker, configuré votre espace en tant que stockage sous-jacent et défini ses points de terminaison d'interface utilisateur et d'API sur vos domaines. Vous pouvez maintenant lister les versions disponibles de Spinnaker:

hal version list

Votre sortie affichera une liste des versions disponibles. Au moment de la rédaction de cet article,1.13.5 était la dernière version:

Output+ Get current deployment
  Success
+ Get Spinnaker version
  Success
+ Get released versions
  Success
+ You are on version "", and the following are available:
 - 1.11.12 (Cobra Kai):
   Changelog: https://gist.GitHub.com/spinnaker-release/29a01fa17afe7c603e510e202a914161
   Published: Fri Apr 05 14:55:40 UTC 2019
   (Requires Halyard >= 1.11)
 - 1.12.9 (Unbreakable):
   Changelog: https://gist.GitHub.com/spinnaker-release/7fa9145349d6beb2f22163977a94629e
   Published: Fri Apr 05 14:11:44 UTC 2019
   (Requires Halyard >= 1.11)
 - 1.13.5 (BirdBox):
   Changelog: https://gist.GitHub.com/spinnaker-release/23af06bc73aa942c90f89b8e8c8bed3e
   Published: Mon Apr 22 14:32:29 UTC 2019
   (Requires Halyard >= 1.17)

Pour sélectionner une version à installer, exécutez la commande suivante:

hal config version edit --version 1.13.5

Il est recommandé de toujours sélectionner la dernière version, à moins que vous ne rencontriez une sorte de régression.

Vous verrez la sortie suivante:

Output+ Get current deployment
  Success
+ Edit Spinnaker version
  Success
+ Spinnaker has been configured to update/install version "version".
  Deploy this version of Spinnaker with `hal deploy apply`.

Vous avez maintenant entièrement configuré le déploiement de Spinnaker. Vous allez le déployer avec la commande suivante:

hal deploy apply

Cette commande peut prendre quelques minutes.

La sortie finale ressemblera à ceci:

Output+ Get current deployment
  Success
+ Prep deployment
  Success
+ Preparation complete... deploying Spinnaker
+ Get current deployment
  Success
+ Apply deployment
  Success
+ Deploy spin-redis
  Success
+ Deploy spin-clouddriver
  Success
+ Deploy spin-front50
  Success
+ Deploy spin-orca
  Success
+ Deploy spin-deck
  Success
+ Deploy spin-echo
  Success
+ Deploy spin-gate
  Success
+ Deploy spin-rosco
  Success
...

Halyard vous indique l’état de déploiement de chacun des microservices de Spinnaker. Dans les coulisses, il appelle kubectl pour les installer.

Kubernetes mettra un certain temps - dix minutes en moyenne - à monter tous les conteneurs, surtout pour la première fois. Vous pouvez suivre l'évolution en exécutant la commande suivante:

kubectl get pods -n spinnaker -w

Vous avez déployé Spinnaker sur votre cluster Kubernetes, mais vous ne pouvez pas y accéder au-delà de votre cluster.

Vous stockerez la configuration d'entrée dans un fichier nomméspinnaker-ingress.yaml. Créez-le en utilisant votre éditeur de texte:

nano spinnaker-ingress.yaml

Ajoutez les lignes suivantes:

spinnaker-ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: spinnaker-ingress
  namespace: spinnaker
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - spinnaker-api.example.com
    - spinnaker.example.com
    secretName: spinnaker
  rules:
  - host: spinnaker-api.example.com
    http:
      paths:
      - backend:
          serviceName: spin-gate
          servicePort: 8084
  - host: spinnaker.example.com
    http:
      paths:
      - backend:
          serviceName: spin-deck
          servicePort: 9000

N'oubliez pas de remplacerspinnaker-api.example.com par votre domaine API etspinnaker.example.com par votre domaine d'interface utilisateur.

Le fichier de configuration définit une entrée appeléespinnaker-ingress. Les annotations spécifient que le contrôleur de cette entrée sera le contrôleur Nginx et que l'émetteur du clusterletsencrypt-prod générera les certificats TLS, définis dans le didacticiel des prérequis.

Ensuite, il spécifie que TLS sécurisera les domaines d'interface utilisateur et d'API. Il configure le routage en dirigeant le domaine API vers le servicespin-gate (conteneurs API de Spinnaker) et le domaine UI vers le servicespin-deck (conteneurs UI de Spinnaker) aux ports appropriés8084 et 9000.

Enregistrez et fermez le fichier.

Créez l'entrée dans Kubernetes en lançant:

kubectl create -f spinnaker-ingress.yaml

Vous verrez le résultat suivant:

Outputingress.extensions/spinnaker-ingress created

Attendez quelques minutes que Let’s Encrypt provisionne les certificats TLS, puis accédez à votre domaine d’interface utilisateur,spinnaker.example.com, dans un navigateur. Vous verrez l'interface utilisateur de Spinnaker.

Spinnaker’s home page

Vous avez déployé Spinnaker sur votre cluster, exposé les composants d'interface utilisateur et d'API de vos domaines et testé son fonctionnement. Vous allez maintenant créer une application dans Spinnaker et exécuter un pipeline pour déployer l'applicationHello World.

[[step-4 -—- creation-an-application-and-running-a-pipeline]] == Étape 4 - Création d'une application et exécution d'un pipeline

Dans cette section, vous utiliserez votre accès à Spinnaker sur votre domaine pour créer une application avec celui-ci. Vous allez ensuite créer et exécuter un pipeline pour déployer une applicationHello World, qui se trouve àpaulbouwer/hello-kubernetes. Vous accéderez ensuite à l'application.

Accédez à votre domaine où vous avez exposé l'interface utilisateur de Spinnaker. Dans le coin supérieur droit, appuyez surActions, puis sélectionnezCreate Application. Vous verrez le formulaireNew Application.

Creating a new Application in Spinnaker

Saisissezhello-world comme nom, saisissez votre adresse e-mail et appuyez surCreate.

Lorsque la page se charge, accédez àPipelines en cliquant sur le premier onglet dans le menu supérieur. Vous verrez qu'il n'y a pas encore de pipeline défini.

No pipelines defined in Spinnaker

Appuyez surConfigure a new pipeline et un nouveau formulaire s'ouvrira.

Creating a new Pipeline in Spinnaker

RenseignezDeploy Hello World Application comme nom de votre pipeline et appuyez surCreate.

Sur la page suivante, cliquez sur le boutonAdd Stage. En tant queType, sélectionnezDeploy (Manifest), qui est utilisé pour déployer les manifestes Kubernetes que vous spécifiez. Pour lesStage Name, saisissezDeploy Hello World. Faites défiler vers le bas et dans la zone de texte sousManifest Configuration, entrez les lignes suivantes:

Configuration du manifeste

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-world-ingress
  namespace: spinnaker
  annotations:
    kubernetes.io/ingress.class: nginx
    certmanager.k8s.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - hello-world.example.com
    secretName: hello-world
  rules:
  - host: hello-world.example.com
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
  namespace: spinnaker
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
  namespace: spinnaker
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.5
        ports:
        - containerPort: 8080

N'oubliez pas de remplacerhello-world.example.com par votre domaine, qui pointe également vers votre Load Balancer.

Dans cette configuration, vous définissez unDeployment, composé de trois répliques de l'imagepaulbouwer/hello-kubernetes:1.5. Vous définissez également unService pour pouvoir y accéder et une entrée pour exposer lesService de votre domaine.

Appuyez surSave Changes dans le coin inférieur droit de l'écran. Une fois terminé, revenez àPipelines. Sur le côté droit, sélectionnez le pipeline que vous venez de créer et appuyez sur le lienStart Manual Execution. Lorsqu'on vous demande de confirmer, appuyez surRun.

Ce pipeline prendra peu de temps. Vous verrez la barre de progression terminée quand elle est terminée.

Successfully ran a Pipeline

Vous pouvez maintenant naviguer vers le domaine que vous avez défini dans la configuration. Vous verrez l'applicationHello World, que Spinnaker vient de déployer.

Hello World App

Vous avez créé une application dans Spinnaker, exécuté un pipeline pour déployer une applicationHello World et y avez accédé. Dans l'étape suivante, vous sécuriserez Spinnaker en activant l'autorisation de GitHub Organisations.

[[step-5 -—- enabled-role-based-access-with-github-organizations]] == Étape 5 - Activation de l'accès basé sur les rôles avec les organisations GitHub

Dans cette section, vous activerez l'authentification GitHub OAuth et les autorisations des organisations GitHub. L'activation de l'authentification GitHub OAuth oblige les utilisateurs de Spinnaker à se connecter via GitHub, empêchant ainsi l'accès anonyme. L'autorisation via les organisations GitHub restreint l'accès uniquement aux membres d'une organisation. Une organisation GitHub peut contenir desTeams (groupes de membres nommés), que vous pourrez utiliser pour restreindre encore davantage l'accès aux ressources dans Spinnaker.

Pour que l'authentification OAuth fonctionne, vous devez d'abord configurer l'URL de rappel d'autorisation, c'est-à-dire l'endroit où l'utilisateur sera redirigé après l'autorisation. Il s'agit de votre domaine API se terminant par/login. Vous devez spécifier ceci manuellement pour empêcher Spinnaker et les autres services de deviner. Pour configurer cela, exécutez la commande suivante:

hal config security authn oauth2 edit --pre-established-redirect-uri https://spinnaker-api.example.com/login

Vous verrez cette sortie:

Output+ Get current deployment
  Success
+ Get authentication settings
  Success
+ Edit oauth2 authentication settings
  Success
+ Successfully edited oauth2 method.

Pour configurer l’authentification OAuth avec GitHub, vous devez créer une application OAuth pour votre organisation. Pour ce faire, accédez à votre organisation sur GitHub, accédez àSettings, cliquez surDeveloper Settings, puis sélectionnezOAuth Apps dans le menu de gauche. Ensuite, cliquez sur le boutonNew OAuth App à droite. Vous verrez le formulaireRegister a new OAuth application.

Creating a new OAuth App on GitHub

Entrezspinnaker-auth comme nom. Pour lesHomepage URL, entrezhttps://spinnaker.example.com, et pour lesAuthorization callback URL, entrezhttps://spinnaker-api.example.com/login. Ensuite, appuyez surRegister Application.

Vous serez redirigé vers la page des paramètres de votre nouvelle application OAuth. Notez les valeursClient ID etClient Secret - vous en aurez besoin pour la commande suivante.

Avec l'application OAuth créée, vous pouvez configurer Spinnaker pour utiliser l'application OAuth en exécutant la commande suivante:

hal config security authn oauth2 edit --client-id client_id --client-secret client_secret --provider GitHub

N'oubliez pas de remplacerclient_id etclient_secret par les valeurs affichées sur la page des paramètres GitHub.

Votre sortie sera semblable à ce qui suit:

Output+ Get current deployment
  Success
+ Get authentication settings
  Success
+ Edit oauth2 authentication settings
  Success
Problems in default.security.authn:
- WARNING An authentication method is fully or partially
  configured, but not enabled. It must be enabled to take effect.

+ Successfully edited oauth2 method.

Vous avez configuré Spinnaker pour utiliser l'application OAuth. Maintenant, pour l'activer, exécutez:

hal config security authn oauth2 enable

La sortie ressemblera à:

Output+ Get current deployment
  Success
+ Edit oauth2 authentication settings
  Success
+ Successfully enabled oauth2

Vous avez configuré et activé l'authentification GitHub OAuth. Désormais, les utilisateurs seront obligés de se connecter via GitHub pour accéder à Spinnaker. Cependant, pour le moment, tous ceux qui ont un compte GitHub peuvent se connecter, ce qui n'est pas ce que vous voulez. Pour résoudre ce problème, vous allez configurer Spinnaker de manière à limiter l’accès aux membres de l’organisation de votre choix.

Vous devrez le configurer semi-manuellement via des fichiers de configuration locaux, car Halyard n’a pas encore de commande pour le configurer. Pendant le déploiement, Halyard utilisera les fichiers de configuration locaux pour remplacer la configuration générée.

Halyard recherche une configuration personnalisée sous~/.hal/default/profiles/. Les fichiers nommésservice-name-*.yml sont récupérés par Halyard et utilisés pour remplacer les paramètres d'un service particulier. Le service que vous remplacerez s'appellegate et sert de passerelle API pour l'ensemble de Spinnaker.

Créez un fichier sous~/.hal/default/profiles/ nommégate-local.yml:

nano ~/.hal/default/profiles/gate-local.yml

Ajoutez les lignes suivantes:

gate-local.yml

security:
 oauth2:
   providerRequirements:
     type: GitHub
     organization: your_organization_name

Remplacezyour_organization_name par le nom de votre organisation GitHub. Enregistrez et fermez le fichier.

Avec cette configuration, seuls les membres de votre organisation GitHub pourront accéder à Spinnaker.

[.note] #Note: Seuls les membres de votre organisation GitHub dont l'adhésion est définie surPublic pourront se connecter à Spinnaker. Ce paramètre peut être modifié sur la page de la liste des membres de votre organisation.
#

Maintenant, vous allez intégrer Spinnaker à une solution encore plus particulière en matière de règles d’accès: les équipes GitHub. Cela vous permettra de spécifier quelle équipe aura accès aux ressources créées dans Spinnaker, telles que les applications.

Pour ce faire, vous aurez besoin d’un jeton d’accès personnel GitHub pour un compte administrateur dans votre organisation. Pour en créer un, visitezPersonal Access Tokens et appuyez sur le boutonGenerate New Token. Sur la page suivante, donnez-lui une description de votre choix et assurez-vous de vérifier la portée deread:org, située sousadmin:org. Lorsque vous avez terminé, appuyez surGenerate token et notez-le lorsqu'il apparaît - vous ne pourrez plus le voir.

Pour configurer l'autorisation de rôle des équipes GitHub dans Spinnaker, exécutez la commande suivante:

hal config security authz github edit --accessToken access_token --organization organization_name --baseUrl https://api.github.com

Assurez-vous de remplaceraccess_token par votre jeton d'accès personnel que vous avez généré et de remplacerorganization_name par le nom de l'organisation.

La sortie sera:

Output+ Get current deployment
  Success
+ Get GitHub group membership settings
  Success
+ Edit GitHub group membership settings
  Success
+ Successfully edited GitHub method.

Vous avez mis à jour les paramètres de votre groupe GitHub. Vous allez maintenant définir le fournisseur d’autorisation sur GitHub en exécutant la commande suivante:

hal config security authz edit --type github

La sortie ressemblera à:

Output+ Get current deployment
  Success
+ Get group membership settings
  Success
+ Edit group membership settings
  Success
+ Successfully updated roles.

Après avoir mis à jour ces paramètres, activez-les en exécutant:

hal config security authz enable

Vous verrez le résultat suivant:

Output+ Get current deployment
  Success
+ Edit authorization settings
  Success
+ Successfully enabled authorization

Avec toutes les modifications en place, vous pouvez maintenant appliquer les modifications à votre déploiement en cours de Spinnaker. Exécutez la commande suivante pour cela:

hal deploy apply

Une fois terminé, attendez que Kubernetes transmette les modifications. Cela peut prendre un certain temps - vous pouvez suivre la progression en exécutant:

kubectl get pods -n spinnaker -w

Lorsque tous les états des pods deviennentRunning et disponibilité1/1, accédez au domaine de votre interface utilisateur Spinnaker. Vous serez redirigé vers GitHub et invité à vous connecter, si ce n'est déjà fait. Si le compte avec lequel vous vous êtes connecté est membre de l'organisation, vous serez redirigé vers Spinnaker et connecté. Sinon, l'accès vous sera refusé avec un message qui ressemble à ceci:

{"error":"Unauthorized", "message":"Authentication Failed: User's provider info does not have all required fields.", "status":401, "timestamp":...}

L'intégration de GitHub Teams a pour effet que Spinnaker les traduit désormais enroles. Vous pouvez utiliser cesroles dans Spinnaker pour incorporer des restrictions supplémentaires d'accès pour les membres d'équipes particulières. Si vous essayez d'ajouter une autre application, vous remarquerez que vous pouvez désormais également spécifier des autorisations, qui combinent le niveau d'accès (lecture seule ou lecture et écriture) avec un rôle pour cette application.

Vous avez configuré l'authentification et l'autorisation GitHub. Vous avez également configuré Spinnaker pour limiter l'accès aux membres de votre organisation, pour en savoir plus sur les rôles et les autorisations, et pour prendre en compte l'emplacement des équipes GitHub lors de l'intégration à Spinnaker.

Conclusion

Vous avez correctement configuré et déployé Spinnaker sur votre cluster DigitalOcean Kubernetes. Vous pouvez désormais gérer et utiliser vos ressources cloud plus facilement, à partir d'un emplacement central. Vous pouvez utiliser des déclencheurs pour démarrer automatiquement un pipeline. Par exemple, lorsqu'une nouvelle image Docker a été ajoutée au registre. Pour en savoir plus sur les termes et l'architecture de Spinnaker, visitez le siteofficial documentation. Si vous souhaitez déployer un registre Docker privé sur votre cluster pour contenir vos images, visitezHow To Set Up a Private Docker Registry on Top of DigitalOcean Spaces and Use It with DO Kubernetes.

Related