So richten Sie eine CD-Pipeline mit Spinnaker auf DigitalOcean Kubernetes ein

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ürkubectlkonfiguriert 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 alsspinnaker.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-admindie 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 Namespacespinnakererstellen. 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 vons3konfiguriert 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-proddie 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.

Spinnaker’s home page

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.

Creating a new Application in Spinnaker

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.

No pipelines defined in Spinnaker

Drücken Sie aufConfigure a new pipeline und ein neues Formular wird geöffnet.

Creating a new Pipeline in Spinnaker

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.

Successfully ran a Pipeline

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.

Hello World App

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.

Creating a new OAuth App on GitHub

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 zuRunningund Verfügbarkeit zu1/1werden, 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.

Related