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 comme
kubectl
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 étant
spinnaker.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-admin
les 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.
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.
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.
Appuyez surConfigure a new pipeline et un nouveau formulaire s'ouvrira.
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.
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.
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.
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.