Der Autor hat dieFree and Open Source Fundausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.
Einführung
Spinnaker ist eine Open-Source-Anwendung für Ressourcenmanagement und kontinuierliche Bereitstellung für schnelle, sichere und wiederholbare Bereitstellungen unter Verwendung eines leistungsstarken und anpassbaren Pipelinesystems. Spinnaker ermöglicht automatisierte Anwendungsbereitstellungen auf vielen Plattformen, einschließlichDigitalOcean Kubernetes. Während der Bereitstellung können Sie Spinnaker so konfigurieren, dass integriertedeployment strategies wie Highlander und Rot / Schwarz verwendet werden. Außerdem können Sie Ihre eigene Bereitstellungsstrategie erstellen. Es kann in andere DevOps-Tools wie Jenkins und TravisCI integriert und so konfiguriert werden, dass es GitHub-Repositorys und Docker-Registries überwacht.
Spinnaker wird vonHalyard verwaltet, einem Tool, das speziell für die Konfiguration und Bereitstellung von Spinnaker auf verschiedenen Plattformen entwickelt wurde. Spinnaker benötigtexternal storage, um die Einstellungen und Pipelines Ihrer Anwendung beizubehalten. Es unterstützt verschiedene Plattformen für diese Aufgabe, wieDigitalOcean Spaces.
In diesem Lernprogramm stellen Sie Spinnaker mithilfe von Halyard für DigitalOcean Kubernetes bereit, wobei DigitalOcean Spaces als zugrunde liegender Back-End-Speicher verwendet werden. Sie konfigurieren Spinnaker auch so, dass es in Ihrer gewünschten Domain verfügbar ist und mit Let's Encrypt TLS-Zertifikaten gesichert wird. Anschließend erstellen Sie eine Beispielanwendung in Spinnaker, erstellen eine Pipeline und stellen eineHello World
-App für Ihren Kubernetes-Cluster bereit. Nach dem Testen führen Sie die Authentifizierung und Autorisierung über GitHub Organizations ein. Am Ende haben Sie eine sichere und funktionsfähige Spinnaker-Bereitstellung in Ihrem Kubernetes-Cluster.
[.note] #Note: Dieses Tutorial wurde speziell mit Spinnaker1.13.5
.
# getestet.
Voraussetzungen
-
Halyard auf Ihrem lokalen Computer gemäßofficial instructions installiert. Bitte beachten Sie, dass die Verwendung von Halyard auf Ubuntu-Versionen höher als 16.04 nicht unterstützt wird. In solchen Fällen können Sievia Docker verwenden.
-
Ein DigitalOcean Kubernetes-Cluster, dessen Verbindung als Standardwert für
kubectl
konfiguriert ist. Der Cluster muss über mindestens 8 GB RAM und 4 CPU-Kerne für Spinnaker verfügen (bei starker Nutzung ist mehr erforderlich). Anweisungen zum Konfigurieren vonkubectl
finden Sie unter dem SchrittConnect to your Cluster, der beim Erstellen Ihres Clusters angezeigt wird. Informationen zum Erstellen eines Kubernetes-Clusters in DigitalOcean finden Sie unterKubernetes Quickstart. -
Ein auf dem Cluster installierter Nginx Ingress Controller und Cert-Manager. Eine Anleitung dazu finden Sie unterHow to Set Up an Nginx Ingress with Cert-Manager on DigitalOcean Kubernetes.
-
Ein DigitalOcean Space mit API-Schlüsseln (Zugriff und Geheimnis). Informationen zum Erstellen eines DigitalOcean Space- und API-Schlüssels finden Sie unterHow To Create a DigitalOcean Space and API Key.
-
Ein Domain-Name mit drei DNS-A-Einträgen verweist auf den von Ingress verwendeten DigitalOcean Load Balancer. Wenn Sie die DNS-Einträge Ihrer Domain mit DigitalOcean verwalten, konsultieren SieHow to Create DNS Records, um A-Einträge zu erstellen. In diesem Lernprogramm werden die A-Datensätze als
spinnaker.example.com
,spinnaker-api.example.com
undhello-world.example.com
bezeichnet. -
EinGitHub-Konto, das einer GitHub-Organisation mit Administratorrechten und öffentlicher Sichtbarkeit hinzugefügt wurde. Das Konto muss außerdem Mitglied eines Teams in der Organisation sein. Dies ist erforderlich, um Schritt 5 abzuschließen.
[[Schritt-1 - Hinzufügen eines Kubernetes-Kontos mit Fall]] == Schritt 1 - Hinzufügen eines Kubernetes-Kontos bei Halyard
In diesem Abschnitt fügen Sie Spinnaker über Halyard ein Kubernetes-Konto hinzu. Ein Konto ist gemäß Spinnaker ein benannter Berechtigungsnachweis, der für den Zugriff auf einen Cloud-Anbieter verwendet wird.
Als Teil der Voraussetzung haben Sie die Diensteecho1
undecho2
und einenecho_ingress
-Eingang zu Testzwecken erstellt. Sie werden diese in diesem Tutorial nicht benötigen, sodass Sie sie jetzt löschen können.
Beginnen Sie mit dem Löschen des Eingangs, indem Sie den folgenden Befehl ausführen:
kubectl delete -f echo_ingress.yaml
Löschen Sie dann die beiden Testdienste:
kubectl delete -f echo1.yaml && kubectl delete -f echo2.yaml
Der Befehlkubectl delete
akzeptiert die zu löschende Datei, wenn der Parameter-f
übergeben wird.
Erstellen Sie als Nächstes auf Ihrem lokalen Computer einen Ordner, der als Arbeitsbereich dient:
mkdir ~/spinnaker-k8s
Navigieren Sie zu Ihrem Arbeitsbereich, indem Sie den folgenden Befehl ausführen:
cd ~/spinnaker-k8s
Halyard weiß noch nicht, wo es Spinnaker einsetzen soll. Aktivieren Sie den Kubernetes-Provider mit diesem Befehl:
hal config provider kubernetes enable
Sie erhalten folgende Ausgabe:
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 protokollierte alle Schritte, die zur Aktivierung des Kubernetes-Providers erforderlich waren, und warnte, dass noch keine Konten definiert wurden.
Als Nächstes erstellen Sie ein Kubernetesservice account für Spinnaker sowieRBAC. Ein Dienstkonto ist ein Kontotyp, der auf einen einzelnen Namespace beschränkt ist. Es wird von Software verwendet, die verschiedene Aufgaben im Cluster ausführen kann. RBAC (Role Based Access Control) ist eine Methode zur Regulierung des Zugriffs auf Ressourcen in einem Kubernetes-Cluster. Es schränkt den Aktionsbereich des Kontos ein, um sicherzustellen, dass keine wichtigen Konfigurationen versehentlich in Ihrem Cluster geändert werden.
Hier erteilen Sie Spinnakercluster-admin
die Berechtigungen, damit der gesamte Cluster gesteuert werden kann. Wenn Sie eine restriktivere Umgebung erstellen möchten, konsultieren Sieofficial Kubernetes documentation on RBAC.
Erstellen Sie zunächst den Namespacespinnaker
, indem Sie den folgenden Befehl ausführen:
kubectl create ns spinnaker
Die Ausgabe sieht folgendermaßen aus:
Outputnamespace/spinnaker created
Führen Sie den folgenden Befehl aus, um ein Dienstkonto mit dem Namenspinnaker-service-account
zu erstellen:
kubectl create serviceaccount spinnaker-service-account -n spinnaker
Sie haben das Flag-n
verwendet, um anzugeben, dasskubectl
das Dienstkonto im Namespacespinnaker
erstellen. Die Ausgabe wird sein:
Outputserviceaccount/spinnaker-service-account created
Binden Sie es dann an die Rolle voncluster-admin
:
kubectl create clusterrolebinding spinnaker-service-account --clusterrole cluster-admin --serviceaccount=spinnaker:spinnaker-service-account
Sie werden die folgende Ausgabe sehen:
Outputclusterrolebinding.rbac.authorization.k8s.io/spinnaker-service-account created
Halyard verwendet das lokale Kubectl, um auf den Cluster zuzugreifen. Sie müssen es so konfigurieren, dass es das neu erstellte Dienstkonto verwendet, bevor Sie Spinnaker bereitstellen. Kubernetes-Konten authentifizieren sich mit Benutzernamen und Tokens. Wenn ein Dienstkonto erstellt wird, erstellt Kubernetes ein neues Geheimnis und füllt es mit dem Kontotoken. Um das Token fürspinnaker-service-account
abzurufen, müssen Sie zuerst den Namen des Geheimnisses abrufen. Sie können es in eine Konsolenvariable mit dem NamenTOKEN_SECRET
abrufen, indem Sie Folgendes ausführen:
TOKEN_SECRET=$(kubectl get serviceaccount -n spinnaker spinnaker-service-account -o jsonpath='{.secrets[0].name}')
Dadurch werden Informationen zuspinnaker-service-account
aus dem Namespacespinnaker
abgerufen und der Name des ersten darin enthaltenen Geheimnisses durch Übergabe eines JSON-Pfads abgerufen.
Rufen Sie den Inhalt des Geheimnisses in eine Variable mit dem NamenTOKEN
ab, indem Sie Folgendes ausführen:
TOKEN=$(kubectl get secret -n spinnaker $TOKEN_SECRET -o jsonpath='{.data.token}' | base64 --decode)
Sie haben jetzt das Token in der UmgebungsvariablenTOKEN
verfügbar. Als Nächstes müssen Sie in kubectl Anmeldeinformationen für das Dienstkonto festlegen:
kubectl config set-credentials spinnaker-token-user --token $TOKEN
Sie werden die folgende Ausgabe sehen:
OutputUser "spinnaker-token-user" set.
Anschließend müssen Sie den Benutzer des aktuellen Kontexts auf die neu erstelltenspinnaker-token-user
einstellen, indem Sie den folgenden Befehl ausführen:
kubectl config set-context --current --user spinnaker-token-user
Durch Festlegen des aktuellen Benutzers aufspinnaker-token-user
ist kubectl jetzt für die Verwendung vonspinnaker-service-account
konfiguriert, aber Halyard weiß nichts darüber. Fügen Sie seinem Kubernetes-Anbieter ein Konto hinzu, indem Sie Folgendes ausführen:
hal config provider kubernetes account add spinnaker-account --provider-version v2
Die Ausgabe sieht folgendermaßen aus:
Output+ Get current deployment
Success
+ Add the spinnaker-account account
Success
+ Successfully added account spinnaker-account for provider
kubernetes.
Dieser Befehl fügt Halyard ein Kubernetes-Konto mit dem Namenspinnaker-account
hinzu und markiert es als Dienstkonto.
Im Allgemeinen kann Spinnaker auf zwei Arten bereitgestellt werden: als verteilte Installation oder als lokale Installation. Die Installation vonDistributedwird in diesem Lernprogramm abgeschlossen. Sie stellen sie in der Cloud bereit. Die Installation vonLocalbedeutet andererseits, dass Spinnaker heruntergeladen und auf dem Computer installiert wird, auf dem Halyard ausgeführt wird. Da Sie Spinnaker auf Kubernetes bereitstellen, müssen Sie die Bereitstellung wie folgt alsdistributed
markieren:
hal config deploy edit --type distributed --account-name spinnaker-account
Da in Ihrer Spinnaker-Bereitstellung Images erstellt werden, müssenartifacts
in Spinnaker aktiviert werden. Sie können sie aktivieren, indem Sie den folgenden Befehl ausführen:
hal config features edit --artifacts true
Hier haben Sieartifacts
aktiviert, damit Spinnaker mehr Metadaten zu den von ihm erstellten Objekten speichern kann.
Sie haben über Halyard einen Kubernetes-Account zu Spinnaker hinzugefügt. Sie haben den Kubernetes-Provider aktiviert, RBAC-Rollen konfiguriert und die aktuelle Kubectl-Konfiguration zu Spinnaker hinzugefügt. Auf diese Weise haben Sie dem Provider ein Konto hinzugefügt. Jetzt richten Sie Ihren Back-End-Speicher ein.
[[Schritt 2 - Konfigurieren des Speicherplatzes als zugrunde liegenden Speicher]] == Schritt 2 - Konfigurieren des Speicherplatzes als zugrunde liegender Speicher
In diesem Abschnitt konfigurieren Sie den Space als zugrunde liegenden Speicher für die Spinnaker-Bereitstellung. Spinnaker verwendet den Space zum Speichern seiner Konfigurations- und Pipeline-bezogenen Daten.
Führen Sie den folgenden Befehl aus, um den S3-Speicher in Halyard zu konfigurieren:
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
Denken Sie daran,your_space_access_key
durch Ihren Space-Zugriffsschlüssel undspaces_endpoint_with_region_prefix
durch den Endpunkt Ihres Space zu ersetzen. Dies ist normalerweiseregion-id.digitaloceanspaces.com
, wobeiregion-id
die Region Ihres Raums ist. Sie könnenspace_name
durch den Namen Ihres Space ersetzen. Das--no-validate
-Flag weist Halyard an, die angegebenen Einstellungen nicht sofort zu validieren, da die Validierung von DigitalOcean Spaces nicht unterstützt wird.
Sobald Sie diesen Befehl ausgeführt haben, werden Sie von Halyard nach Ihrem geheimen Zugriffsschlüssel gefragt. Geben Sie es ein, um fortzufahren. Die folgende Ausgabe wird angezeigt:
Output+ Get current deployment
Success
+ Get persistent store
Success
+ Edit persistent store
Success
+ Successfully edited persistent store "s3".
Nachdem Sie den Speicher vons3
konfiguriert haben, stellen Sie sicher, dass Ihre Bereitstellung diesen als Speicher verwendet, indem Sie den folgenden Befehl ausführen:
hal config storage edit --type s3
Die Ausgabe sieht folgendermaßen aus:
Output+ Get current deployment
Success
+ Get persistent storage settings
Success
+ Edit persistent storage settings
Success
+ Successfully edited persistent storage.
Sie haben Ihren Space als zugrunde liegenden Speicher eingerichtet, den Ihre Spinnaker-Instanz verwenden wird. Jetzt stellen Sie Spinnaker in Ihrem Kubernetes-Cluster bereit und stellen es in Ihren Domänen mithilfe des Nginx Ingress Controllers zur Verfügung.
[[Schritt 3 - Bereitstellen von Spinnaker in Ihrem Cluster]] == Schritt 3 - Bereitstellen von Spinnaker in Ihrem Cluster
In diesem Abschnitt stellen Sie Spinnaker mithilfe von Halyard in Ihrem Cluster bereit und legen dann die UI- und API-Komponenten in Ihren Domänen mithilfe von Nginx Ingress offen. Zunächst konfigurieren Sie Ihre Domain-URLs: eine für die Benutzeroberfläche von Spinnaker und eine für die API-Komponente. Anschließend wählen Sie die gewünschte Spinnaker-Version aus und stellen sie mithilfe von Halyard bereit. Zuletzt erstellen Sie einen Eingang und konfigurieren ihn als Nginx-Controller.
Zunächst müssen Sie die UI- und API-URL-Konfigurationswerte von Spinnaker in Halyard bearbeiten und auf die gewünschten Domänen einstellen. Führen Sie den folgenden Befehl aus, um den API-Endpunkt auf Ihre gewünschte Domäne festzulegen:
hal config security api edit --override-base-url https://spinnaker-api.example.com
Die Ausgabe sieht folgendermaßen aus:
Output+ Get current deployment
Success
+ Get API security settings
Success
+ Edit API security settings
Success
...
Führen Sie Folgendes aus, um den Endpunkt der Benutzeroberfläche auf Ihre Domain festzulegen, auf die Sie in Spinnaker zugreifen möchten:
hal config security ui edit --override-base-url https://spinnaker.example.com
Die Ausgabe sieht folgendermaßen aus:
Output+ Get current deployment
Success
+ Get UI security settings
Success
+ Edit UI security settings
Success
+ Successfully updated UI security settings.
Denken Sie daran,spinnaker-api.example.com
undspinnaker.example.com
durch Ihre Domains zu ersetzen. Dies sind die Domänen, auf die Sie auf den Load Balancer hingewiesen haben, den Sie unter der Voraussetzung von Nginx Ingress Controller erstellt haben.
Sie haben das Kubernetes-Konto von Spinnaker erstellt und gesichert, Ihren Space als zugrunde liegenden Speicher konfiguriert und die Endpunkte für die Benutzeroberfläche und die API auf Ihre Domains festgelegt. Jetzt können Sie die verfügbaren Spinnaker-Versionen auflisten:
hal version list
Ihre Ausgabe zeigt eine Liste der verfügbaren Versionen. Zum Zeitpunkt des Schreibens dieses Artikels war1.13.5
die neueste 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)
Führen Sie den folgenden Befehl aus, um eine zu installierende Version auszuwählen:
hal config version edit --version 1.13.5
Es wird empfohlen, immer die neueste Version auszuwählen, es sei denn, Sie stoßen auf eine Art Regression.
Sie werden die folgende Ausgabe sehen:
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`.
Sie haben die Bereitstellung von Spinnaker jetzt vollständig konfiguriert. Sie stellen es mit dem folgenden Befehl bereit:
hal deploy apply
Dieser Befehl kann einige Minuten dauern.
Die endgültige Ausgabe sieht folgendermaßen aus:
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 zeigt Ihnen den Bereitstellungsstatus der einzelnen Mikrodienste von Spinnaker an. Hinter den Kulissen ruft es kubectl auf, um sie zu installieren.
Kubernetes wird einige Zeit - im Durchschnitt zehn Minuten - in Anspruch nehmen, um alle Container zu laden, insbesondere zum ersten Mal. Sie können den Fortschritt verfolgen, indem Sie den folgenden Befehl ausführen:
kubectl get pods -n spinnaker -w
Sie haben Spinnaker in Ihrem Kubernetes-Cluster bereitgestellt, aber Sie können nicht außerhalb Ihres Clusters darauf zugreifen.
Sie speichern die Eingangskonfiguration in einer Datei mit dem Namenspinnaker-ingress.yaml
. Erstellen Sie es mit Ihrem Texteditor:
nano spinnaker-ingress.yaml
Fügen Sie die folgenden Zeilen hinzu:
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
Denken Sie daran,spinnaker-api.example.com
durch Ihre API-Domäne undspinnaker.example.com
durch Ihre UI-Domäne zu ersetzen.
Die Konfigurationsdatei definiert einen Eingang namensspinnaker-ingress
. In den Anmerkungen wird angegeben, dass der Controller für diesen Eingang der Nginx-Controller ist und dass der Cluster-Aussteller vonletsencrypt-prod
die TLS-Zertifikate generiert, die im vorausgesetzten Lernprogramm definiert sind.
Anschließend wird angegeben, dass TLS die UI- und API-Domänen schützt. Das Routing wird eingerichtet, indem die API-Domäne an den entsprechenden Ports8084
und an den Dienstspin-gate
(Spinnaker-API-Container) und die UI-Domäne an den Dienstspin-deck
(Spinnaker-UI-Container) geleitet wird 9000
.
Speichern und schließen Sie die Datei.
Erstellen Sie den Ingress in Kubernetes, indem Sie Folgendes ausführen:
kubectl create -f spinnaker-ingress.yaml
Sie sehen die folgende Ausgabe:
Outputingress.extensions/spinnaker-ingress created
Warten Sie einige Minuten, bis Let's Encrypt die TLS-Zertifikate bereitgestellt hat, und navigieren Sie dann in einem Browser zu Ihrer UI-Domänespinnaker.example.com
. Sie sehen die Benutzeroberfläche von Spinnaker.
Sie haben Spinnaker in Ihrem Cluster bereitgestellt, die UI- und API-Komponenten in Ihren Domänen verfügbar gemacht und getestet, ob es funktioniert. Jetzt erstellen Sie eine Anwendung in Spinnaker und führen eine Pipeline aus, um dieHello World
-App bereitzustellen.
[[Schritt 4 - Erstellen einer Anwendung und Ausführen einer Pipeline] == Schritt 4 - Erstellen einer Anwendung und Ausführen einer Pipeline
In diesem Abschnitt verwenden Sie Ihren Zugriff auf Spinnaker in Ihrer Domain, um eine Anwendung damit zu erstellen. Anschließend erstellen Sie eine Pipeline und führen sie aus, um eineHello World
-App bereitzustellen, die unterpaulbouwer/hello-kubernetes zu finden ist. Sie greifen anschließend auf die App zu.
Navigieren Sie zu Ihrer Domain, in der Sie die Benutzeroberfläche von Spinnaker angezeigt haben. Drücken Sie in der oberen rechten Ecke aufActions und wählen Sie dannCreate Application aus. Sie sehen das FormularNew Application.
Geben Siehello-world
als Namen ein, geben Sie Ihre E-Mail-Adresse ein und drücken SieCreate.
Navigieren Sie beim Laden der Seite zuPipelines, indem Sie auf die erste Registerkarte im oberen Menü klicken. Sie werden sehen, dass noch keine Pipelines definiert sind.
Drücken Sie aufConfigure a new pipeline und ein neues Formular wird geöffnet.
Geben SieDeploy Hello World Application
als Namen Ihrer Pipeline ein und drücken SieCreate.
Klicken Sie auf der nächsten Seite auf die SchaltflächeAdd Stage. Wählen Sie alsTypeDeploy (Manifest) aus, das zum Bereitstellen der von Ihnen angegebenen Kubernetes-Manifeste verwendet wird. Geben Sie fürStage NameDeploy Hello World
ein. Scrollen Sie nach unten und geben Sie im Textfeld unterManifest Configuration die folgenden Zeilen ein:
Manifest-Konfiguration
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
Denken Sie daran,hello-world.example.com
durch Ihre Domain zu ersetzen, die auch auf Ihren Load Balancer verweist.
In dieser Konfiguration definieren Sie einDeployment
, das aus drei Replikaten despaulbouwer/hello-kubernetes:1.5
-Images besteht. Sie definieren auch einService
, um darauf zugreifen zu können, und einen Ingress, um dieService
in Ihrer Domain verfügbar zu machen.
Drücken SieSave Changes in der unteren rechten Ecke des Bildschirms. Wenn es fertig ist, navigieren Sie zurück zuPipelines. Wählen Sie auf der rechten Seite die gerade erstellte Pipeline aus und klicken Sie auf den LinkStart Manual Execution. Wenn Sie zur Bestätigung aufgefordert werden, drücken SieRun.
Diese Pipeline wird eine kurze Zeit in Anspruch nehmen. Sie sehen, dass der Fortschrittsbalken vollständig ist, wenn er erfolgreich abgeschlossen wurde.
Sie können nun zu der Domäne navigieren, die Sie in der Konfiguration definiert haben. Sie sehen dieHello World
-App, die Spinnaker gerade bereitgestellt hat.
Sie haben eine Anwendung in Spinnaker erstellt, eine Pipeline zum Bereitstellen einerHello World
-App ausgeführt und darauf zugegriffen. Im nächsten Schritt sichern Sie Spinnaker, indem Sie die Autorisierung von GitHub Organizations aktivieren.
[[Schritt 5 - Aktivieren des rollenbasierten Zugriffs mit Github-Organisationen]] == Schritt 5 - Aktivieren des rollenbasierten Zugriffs mit GitHub-Organisationen
In diesem Abschnitt aktivieren Sie die GitHub OAuth-Authentifizierung und die GitHub Organizations-Autorisierung. Durch Aktivieren der GitHub-OAuth-Authentifizierung werden Spinnaker-Benutzer gezwungen, sich über GitHub anzumelden, wodurch anonymer Zugriff verhindert wird. Die Autorisierung über GitHub-Organisationen beschränkt den Zugriff nur auf diejenigen in einer Organisation. Eine GitHub-Organisation kannTeams (benannte Gruppen von Mitgliedern) enthalten, mit denen Sie den Zugriff auf Ressourcen in Spinnaker noch weiter einschränken können.
Damit die OAuth-Authentifizierung funktioniert, müssen Sie zuerst die Autorisierungs-Rückruf-URL einrichten, über die der Benutzer nach der Autorisierung umgeleitet wird. Dies ist Ihre API-Domain, die mit/login
endet. Sie müssen dies manuell angeben, um zu verhindern, dass Spinnaker und andere Dienste raten. Führen Sie den folgenden Befehl aus, um dies zu konfigurieren:
hal config security authn oauth2 edit --pre-established-redirect-uri https://spinnaker-api.example.com/login
Sie werden diese Ausgabe sehen:
Output+ Get current deployment
Success
+ Get authentication settings
Success
+ Edit oauth2 authentication settings
Success
+ Successfully edited oauth2 method.
Um die OAuth-Authentifizierung mit GitHub einzurichten, müssen Sie eine OAuth-Anwendung für Ihre Organisation erstellen. Navigieren Sie dazu auf GitHub zu Ihrer Organisation, gehen Sie zuSettings, klicken Sie aufDeveloper Settings und wählen Sie dannOAuth Apps aus dem linken Menü. Klicken Sie anschließend rechts auf die SchaltflächeNew OAuth App. Sie sehen das FormularRegister a new OAuth application.
Geben Siespinnaker-auth
als Namen ein. Geben Sie fürHomepage URLhttps://spinnaker.example.com
und fürAuthorization callback URLhttps://spinnaker-api.example.com/login
ein. Drücken Sie dannRegister Application.
Sie werden zur Einstellungsseite für Ihre neue OAuth-App weitergeleitet. Beachten Sie die WerteClient ID undClient Secret - Sie benötigen sie für den nächsten Befehl.
Mit der erstellten OAuth-App können Sie Spinnaker für die Verwendung der OAuth-App konfigurieren, indem Sie den folgenden Befehl ausführen:
hal config security authn oauth2 edit --client-id client_id --client-secret client_secret --provider GitHub
Denken Sie daran,client_id
undclient_secret
durch die auf der GitHub-Einstellungsseite angezeigten Werte zu ersetzen.
Ihre Ausgabe sieht ungefähr so aus:
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.
Sie haben Spinnaker für die Verwendung der OAuth-App konfiguriert. Führen Sie nun zum Aktivieren Folgendes aus:
hal config security authn oauth2 enable
Die Ausgabe sieht folgendermaßen aus:
Output+ Get current deployment
Success
+ Edit oauth2 authentication settings
Success
+ Successfully enabled oauth2
Sie haben die GitHub OAuth-Authentifizierung konfiguriert und aktiviert. Jetzt müssen sich Benutzer über GitHub anmelden, um auf Spinnaker zugreifen zu können. Im Moment kann sich jedoch jeder, der ein GitHub-Konto hat, anmelden, was nicht das ist, was Sie wollen. Um dies zu umgehen, konfigurieren Sie Spinnaker so, dass der Zugriff auf Mitglieder Ihrer gewünschten Organisation beschränkt wird.
Sie müssen dies halbmanuell über lokale Konfigurationsdateien einrichten, da Halyard noch keinen Befehl zum Festlegen dieser Einstellungen hat. Während der Bereitstellung verwendet Halyard die lokalen Konfigurationsdateien, um die generierte Konfiguration zu überschreiben.
Halyard sucht nach benutzerdefinierten Konfigurationen unter~/.hal/default/profiles/
. Dateien mit dem Namenservice-name-*.yml
werden von Halyard erfasst und zum Überschreiben der Einstellungen eines bestimmten Dienstes verwendet. Der Dienst, den Sie überschreiben, heißtgate
und dient als API-Gateway für ganz Spinnaker.
Erstellen Sie eine Datei unter~/.hal/default/profiles/
mit dem Namengate-local.yml
:
nano ~/.hal/default/profiles/gate-local.yml
Fügen Sie die folgenden Zeilen hinzu:
gate-local.yml
security:
oauth2:
providerRequirements:
type: GitHub
organization: your_organization_name
Ersetzen Sieyour_organization_name
durch den Namen Ihrer GitHub-Organisation. Speichern und schließen Sie die Datei.
Mit dieser Konfiguration können nur Mitglieder Ihrer GitHub-Organisation auf Spinnaker zugreifen.
[.note] #Note: Nur diejenigen Mitglieder Ihrer GitHub-Organisation, deren Mitgliedschaft aufPublic festgelegt ist, können sich bei Spinnaker anmelden. Diese Einstellung kann auf der Mitgliederlistenseite Ihrer Organisation geändert werden.
#
Jetzt integrieren Sie Spinnaker in eine noch speziellere Lösung für Zugriffsregeln: GitHub Teams. Auf diese Weise können Sie festlegen, welche Teams Zugriff auf in Spinnaker erstellte Ressourcen haben, z. B. Anwendungen.
Um dies zu erreichen, benötigen Sie ein GitHub Personal Access Token für ein Administratorkonto in Ihrer Organisation. Um eine zu erstellen, besuchen SiePersonal Access Tokens und drücken Sie die TasteGenerate New Token. Geben Sie auf der nächsten Seite eine Beschreibung Ihrer Wahl ein und überprüfen Sie den Bereich vonread:orgunteradmin:org. Wenn Sie fertig sind, drücken SieGenerate token und notieren Sie es, wenn es angezeigt wird. Sie können es nicht mehr sehen.
Führen Sie den folgenden Befehl aus, um die Rollenautorisierung für GitHub Teams in Spinnaker zu konfigurieren:
hal config security authz github edit --accessToken access_token --organization organization_name --baseUrl https://api.github.com
Stellen Sie sicher, dass Sieaccess_token
durch Ihr von Ihnen generiertes persönliches Zugriffstoken ersetzen undorganization_name
durch den Namen der Organisation ersetzen.
Die Ausgabe wird sein:
Output+ Get current deployment
Success
+ Get GitHub group membership settings
Success
+ Edit GitHub group membership settings
Success
+ Successfully edited GitHub method.
Sie haben Ihre GitHub-Gruppeneinstellungen aktualisiert. Jetzt legen Sie den Autorisierungsanbieter auf GitHub fest, indem Sie den folgenden Befehl ausführen:
hal config security authz edit --type github
Die Ausgabe sieht folgendermaßen aus:
Output+ Get current deployment
Success
+ Get group membership settings
Success
+ Edit group membership settings
Success
+ Successfully updated roles.
Aktivieren Sie diese Einstellungen, nachdem Sie sie aktualisiert haben, indem Sie Folgendes ausführen:
hal config security authz enable
Sie sehen die folgende Ausgabe:
Output+ Get current deployment
Success
+ Edit authorization settings
Success
+ Successfully enabled authorization
Nachdem alle Änderungen vorgenommen wurden, können Sie die Änderungen jetzt auf die ausgeführte Spinnaker-Bereitstellung anwenden. Führen Sie dazu den folgenden Befehl aus:
hal deploy apply
Warten Sie, bis Kubernetes die Änderungen übernommen hat. Dies kann einige Zeit in Anspruch nehmen. Sie können den Fortschritt verfolgen, indem Sie Folgendes ausführen:
kubectl get pods -n spinnaker -w
Wenn alle Status der Pods zuRunning
und Verfügbarkeit zu1/1
werden, navigieren Sie zu Ihrer Spinnaker-UI-Domäne. Sie werden zu GitHub weitergeleitet und aufgefordert, sich anzumelden, sofern Sie dies nicht bereits getan haben. Wenn das Konto, mit dem Sie sich angemeldet haben, Mitglied der Organisation ist, werden Sie zurück zu Spinnaker geleitet und angemeldet. Andernfalls wird Ihnen der Zugriff mit einer Nachricht verweigert, die wie folgt aussieht:
{"error":"Unauthorized", "message":"Authentication Failed: User's provider info does not have all required fields.", "status":401, "timestamp":...}
Die Integration von GitHub Teams bewirkt, dass Spinnaker sie jetzt inroles übersetzt. Sie können dieserolesin Spinnaker verwenden, um zusätzliche Zugriffsbeschränkungen für Mitglieder bestimmter Teams aufzunehmen. Wenn Sie versuchen, eine andere Anwendung hinzuzufügen, werden Sie feststellen, dass Sie jetzt auch Berechtigungen angeben können, die die Zugriffsebene (schreibgeschützt oder schreibgeschützt und schreibgeschützt) mit einer Rolle für diese Anwendung kombinieren.
Sie haben die GitHub-Authentifizierung und -Autorisierung eingerichtet. Sie haben Spinnaker auch so konfiguriert, dass der Zugriff auf Mitglieder Ihrer Organisation eingeschränkt wird, Sie haben Informationen zu Rollen und Berechtigungen erhalten und Sie haben bei der Integration in Spinnaker den Platz von GitHub-Teams in Betracht gezogen.
Fazit
Sie haben Spinnaker erfolgreich konfiguriert und in Ihrem DigitalOcean Kubernetes-Cluster bereitgestellt. Sie können Ihre Cloud-Ressourcen jetzt von einem zentralen Ort aus einfacher verwalten und nutzen. Sie können Trigger verwenden, um eine Pipeline automatisch zu starten. Zum Beispiel, wenn der Registrierung ein neues Docker-Image hinzugefügt wurde. Um mehr über die Begriffe und die Architektur von Spinnaker zu erfahren, besuchen Sie dieofficial documentation. Wenn Sie eine private Docker-Registrierung für Ihren Cluster bereitstellen möchten, um Ihre Images zu speichern, besuchen SieHow To Set Up a Private Docker Registry on Top of DigitalOcean Spaces and Use It with DO Kubernetes.