Как настроить конвейер CD со Spinnaker на DigitalOcean Kubernetes

Автор выбралFree and Open Source Fund для получения пожертвования в рамках программыWrite for DOnations.

Вступление

Spinnaker - это приложение с открытым исходным кодом для управления ресурсами и непрерывной доставки для быстрого, безопасного и повторяемого развертывания с использованием мощной и настраиваемой системы конвейеров. Spinnaker позволяет автоматизировать развертывание приложений на многих платформах, включаяDigitalOcean Kubernetes. При развертывании вы можете настроить Spinnaker для использования встроенныхdeployment strategies, таких как Highlander и Red / black, с возможностью создания собственной стратегии развертывания. Он может интегрироваться с другими инструментами DevOps, такими как Jenkins и TravisCI, и может быть настроен для мониторинга хранилищ GitHub и реестров Docker.

Spinnaker управляетсяHalyard, инструментом, специально созданным для настройки и развертывания Spinnaker на различных платформах. Spinnaker требуетexternal storage для сохранения настроек и конвейеров вашего приложения. Он поддерживает разные платформы для этой задачи, напримерDigitalOcean Spaces.

В этом руководстве вы развернете Spinnaker в DigitalOcean Kubernetes с помощью Halyard, а DigitalOcean Spaces станет базовым внутренним хранилищем. Вы также сконфигурируете Spinnaker, чтобы он был доступен в нужном домене и защищен с помощью сертификатов Let Encrypt TLS. Затем вы создадите образец приложения в Spinnaker, создадите конвейер и развернете приложениеHello World в своем кластере Kubernetes. После тестирования вы введете аутентификацию и авторизацию через GitHub Organizations. К концу вы получите безопасное и работающее развертывание Spinnaker в своем кластере Kubernetes.

[.note] #Note: Этот учебник был специально протестирован со спинакером1.13.5.
#

Предпосылки

  • Halyard, установленный на вашем локальном компьютере, согласноofficial instructions. Обратите внимание, что использование Halyard в версиях Ubuntu выше 16.04 не поддерживается. В таких случаях вы можете использоватьvia Docker.

  • Кластер DigitalOcean Kubernetes с вашим подключением, настроенным какkubectl по умолчанию. Кластер должен иметь как минимум 8 ГБ ОЗУ и 4 ядра ЦП, доступных для Spinnaker (в случае более интенсивного использования потребуется больше). Инструкции по настройкеkubectl показаны под этапомConnect to your Cluster, показанным при создании кластера. Чтобы создать кластер Kubernetes в DigitalOcean, см.Kubernetes Quickstart.

  • В кластере установлены Nginx Ingress Controller и cert-manager. Чтобы узнать, как это сделать, см.How to Set Up an Nginx Ingress with Cert-Manager on DigitalOcean Kubernetes.

  • DigitalOcean Space с API-ключами (доступ и секрет). Чтобы создать DigitalOcean Space и ключи API, см.How To Create a DigitalOcean Space and API Key.

  • Доменное имя с тремя записями DNS A, указывающими на балансировщик нагрузки DigitalOcean, используемый Ingress. Если вы используете DigitalOcean для управления записями DNS своего домена, обратитесь кHow to Create DNS Records, чтобы создать записи A. В этом руководстве мы будем называть записи Aspinnaker.example.com,spinnaker-api.example.com иhello-world.example.com.

  • АккаунтGitHub, добавленный в организацию GitHub с правами администратора и общедоступным доступом. Учетная запись также должна быть членом команды в Организации. Это необходимо для завершения шага 5.

[[step-1 -—- add-a-kubernetes-account-with-halyard]] == Шаг 1 - Добавление учетной записи Kubernetes с Halyard

В этом разделе вы добавите учетную запись Kubernetes в Spinnaker через Halyard. С точки зрения Spinnaker, учетная запись - это именное удостоверение, которое она использует для доступа к облачному провайдеру.

Как часть предварительных требований, вы создали службыecho1 иecho2 и входecho_ingress для целей тестирования; они вам не понадобятся в этом руководстве, поэтому теперь вы можете удалить их.

Начните с удаления входа, выполнив следующую команду:

kubectl delete -f echo_ingress.yaml

Затем удалите две службы тестирования:

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

Командаkubectl delete принимает файл для удаления при передаче параметра-f.

Затем на локальном компьютере создайте папку, которая будет служить вашим рабочим пространством:

mkdir ~/spinnaker-k8s

Перейдите в рабочее пространство, выполнив следующую команду:

cd ~/spinnaker-k8s

Халярд пока не знает, где ему следует развернуть Спинакер. Включите провайдера Kubernetes с помощью этой команды:

hal config provider kubernetes enable

Вы получите следующий вывод:

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

Халярд зарегистрировал все шаги, необходимые для включения провайдера Kubernetes, и предупредил, что учетные записи еще не определены.

Затем вы создадите Kubernetesservice account для Spinnaker вместе сRBAC. Учетная запись службы - это тип учетной записи, которая ограничена одним пространством имен. Он используется программным обеспечением, которое может выполнять различные задачи в кластере. RBAC (управление доступом на основе ролей) - это метод регулирования доступа к ресурсам в кластере Kubernetes. Это ограничивает область действия учетной записи, чтобы гарантировать, что никакие важные конфигурации не были случайно изменены в вашем кластере.

Здесь вы предоставите Spinnakercluster-admin разрешения, чтобы позволить ему управлять всем кластером. Если вы хотите создать более строгую среду, обратитесь кofficial Kubernetes documentation on RBAC.

Сначала создайте пространство именspinnaker, выполнив следующую команду:

kubectl create ns spinnaker

Вывод будет выглядеть так:

Outputnamespace/spinnaker created

Выполните следующую команду, чтобы создать учетную запись службы с именемspinnaker-service-account:

kubectl create serviceaccount spinnaker-service-account -n spinnaker

Вы использовали флаг-n, чтобы указать, чтоkubectl создает учетную запись службы в пространстве именspinnaker. Выход будет:

Outputserviceaccount/spinnaker-service-account created

Затем привяжите его к ролиcluster-admin:

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

Вы увидите следующий вывод:

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

Халярд использует локальный kubectl для доступа к кластеру. Вам необходимо настроить его на использование только что созданной учетной записи службы, прежде чем развертывать Spinnaker. Учетные записи Kubernetes аутентифицируются с использованием имен пользователей и токенов. При создании учетной записи службы Kubernetes создает новый секрет и заполняет его токеном учетной записи. Чтобы получить токен дляspinnaker-service-account, вам сначала нужно получить имя секрета. Вы можете загрузить его в консольную переменную с именемTOKEN_SECRET, запустив:

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

Он получает информацию оspinnaker-service-account из пространства именspinnaker и извлекает имя первого содержащегося в нем секрета, передавая путь JSON.

Загрузите содержимое секрета в переменную с именемTOKEN, запустив:

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

Теперь у вас есть токен, доступный в переменной средыTOKEN. Далее вам необходимо установить учетные данные для учетной записи службы в kubectl:

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

Вы увидите следующий вывод:

OutputUser "spinnaker-token-user" set.

Затем вам нужно будет установить пользователя текущего контекста на вновь созданныйspinnaker-token-user, выполнив следующую команду:

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

Установив текущего пользователя наspinnaker-token-user, kubectl теперь настроен на использованиеspinnaker-service-account, но Halyard ничего об этом не знает. Добавьте учетную запись к своему провайдеру Kubernetes, выполнив:

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

Вывод будет выглядеть так:

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

Эта команда добавляет учетную запись Kubernetes в Halyard с именемspinnaker-account и отмечает ее как учетную запись службы.

Как правило, Spinnaker может быть развернут двумя способами: распределенная установка или локальная установка. УстановкаDistributed - это то, что вы завершаете в этом руководстве - вы развертываете его в облаке. С другой стороны, установкаLocal означает, что Spinnaker будет загружен и установлен на машине, на которой работает Halyard. Поскольку вы развертываете Spinnaker в Kubernetes, вам необходимо пометить развертывание какdistributed, например:

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

Поскольку ваше развертывание Spinnaker будет создавать образы, необходимо включитьartifacts в Spinnaker. Вы можете включить их, выполнив следующую команду:

hal config features edit --artifacts true

Здесь вы включилиartifacts, чтобы Spinnaker мог хранить больше метаданных о создаваемых им объектах.

Вы добавили учетную запись Kubernetes в Spinnaker через Halyard. Вы включили провайдера Kubernetes, настроили роли RBAC и добавили текущую конфигурацию kubectl в Spinnaker, тем самым добавив учетную запись в провайдера. Теперь вы настроите свое внутреннее хранилище.

[[step-2 -—- configuring-the-space-as-the-under-storage]] == Шаг 2 - Настройка пространства как базового хранилища

В этом разделе вы настроите пространство в качестве основного хранилища для развертывания Spinnaker. Spinnaker будет использовать Space для хранения своей конфигурации и данных, связанных с конвейером.

Чтобы настроить хранилище S3 в Halyard, выполните следующую команду:

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

Не забудьте заменитьyour_space_access_key на свой ключ доступа к пространству, аspaces_endpoint_with_region_prefix - на конечную точку вашего пространства. Обычно этоregion-id.digitaloceanspaces.com, гдеregion-id - это область вашего пространства. Вы можете заменитьspace_name названием вашего пространства. Флаг--no-validate указывает Halyard не проверять данные настройки сразу, потому что проверка DigitalOcean Spaces не поддерживается.

После того, как вы запустите эту команду, Халярд запросит у вас секретный ключ доступа. Введите его, чтобы продолжить, и вы увидите следующий вывод:

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

Теперь, когда вы настроили хранилищеs3, убедитесь, что ваше развертывание будет использовать его в качестве хранилища, выполнив следующую команду:

hal config storage edit --type s3

Вывод будет выглядеть так:

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

Вы установили свое Пространство как основное хранилище, которое будет использовать ваш экземпляр Spinnaker. Теперь вы будете развертывать Spinnaker в своем кластере Kubernetes и выставлять его на своих доменах с помощью Nginx Ingress Controller.

[[step-3 -—- deploying-spinnaker-to-your-cluster]] == Шаг 3 - Развертывание спинакера в вашем кластере

В этом разделе вы развернете Spinnaker в своем кластере с помощью Halyard, а затем представите его компоненты пользовательского интерфейса и API на своих доменах с помощью Nginx Ingress. Во-первых, вы настроите URL своего домена: один для пользовательского интерфейса Spinnaker и один для компонента API. Затем вы выберете нужную версию Spinnaker и развернете ее с помощью Halyard. Наконец, вы создадите вход и сконфигурируете его как контроллер Nginx.

Во-первых, вам нужно отредактировать значения конфигурации интерфейса пользователя и URL-адреса Spinnaker в Halyard и установить для них нужные домены. Чтобы установить конечную точку API для желаемого домена, выполните следующую команду:

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

Вывод будет выглядеть так:

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

Чтобы установить конечную точку пользовательского интерфейса в свой домен, где вы будете получать доступ к Spinnaker, запустите:

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

Вывод будет выглядеть так:

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

Не забудьте заменитьspinnaker-api.example.com иspinnaker.example.com своими доменами. Это домены, которые вы указали для балансировщика нагрузки, который вы создали во время предварительного условия Nginx Ingress Controller.

Вы создали и защитили учетную запись Spinnaker в Kubernetes, настроили свое пространство в качестве основного хранилища и задали его конечные точки пользовательского интерфейса и API для своих доменов. Теперь вы можете перечислить доступные версии Spinnaker:

hal version list

Ваш вывод покажет список доступных версий. На момент написания этой статьи1.13.5 была последней версией:

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)

Чтобы выбрать версию для установки, выполните следующую команду:

hal config version edit --version 1.13.5

Рекомендуется всегда выбирать последнюю версию, если только вы не столкнулись с какой-либо регрессией.

Вы увидите следующий вывод:

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`.

Теперь вы полностью настроили развертывание Spinnaker. Вы развернете его с помощью следующей команды:

hal deploy apply

Эта команда может занять несколько минут, чтобы закончить.

Окончательный результат будет выглядеть так:

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
...

Халярд показывает вам состояние развертывания каждого из микросервисов Spinnaker. За кулисами он вызывает kubectl для их установки.

Kubernetes потребуется некоторое время - в среднем десять минут - чтобы поднять все контейнеры, особенно в первый раз. Вы можете наблюдать за прогрессом, выполнив следующую команду:

kubectl get pods -n spinnaker -w

Вы развернули Spinnaker в своем кластере Kubernetes, но к нему нельзя получить доступ за пределами вашего кластера.

Вы сохраните входящую конфигурацию в файле с именемspinnaker-ingress.yaml. Создайте его, используя ваш текстовый редактор:

nano spinnaker-ingress.yaml

Добавьте следующие строки:

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

Не забудьте заменитьspinnaker-api.example.com своим доменом API, аspinnaker.example.com - своим доменом пользовательского интерфейса.

В файле конфигурации определяется вход под названиемspinnaker-ingress. В аннотациях указано, что контроллером для этого входа будет контроллер Nginx, а эмитент кластераletsencrypt-prod будет генерировать сертификаты TLS, определенные в предварительном руководстве.

Затем он указывает, что TLS будет защищать домены пользовательского интерфейса и API. Он устанавливает маршрутизацию, направляя домен API к службеspin-gate (контейнеры API Spinnaker) и домен пользовательского интерфейса к службеspin-deck (контейнеры пользовательского интерфейса Spinnaker) в соответствующих портах8084 и 9000.

Сохраните и закройте файл.

Создайте Ingress в Kubernetes, запустив:

kubectl create -f spinnaker-ingress.yaml

Вы увидите следующий вывод:

Outputingress.extensions/spinnaker-ingress created

Подождите несколько минут, пока Let's Encrypt предоставит сертификаты TLS, а затем перейдите в свой домен пользовательского интерфейсаspinnaker.example.com в браузере. Вы увидите пользовательский интерфейс Spinnaker.

Spinnaker’s home page

Вы развернули Spinnaker в своем кластере, открыли компоненты пользовательского интерфейса и API на своих доменах и проверили, работает ли он. Теперь вы создадите приложение в Spinnaker и запустите конвейер для развертывания приложенияHello World.

[[step-4 -—- create-an-application-and-running-a-pipeline]] == Шаг 4 - Создание приложения и запуск конвейера

В этом разделе вы будете использовать свой доступ к Spinnaker в своем домене для создания приложения с ним. Затем вы создадите и запустите конвейер для развертывания приложенияHello World, которое можно найти вpaulbouwer/hello-kubernetes. Вы получите доступ к приложению позже.

Перейдите к своему домену, где вы открыли доступ к интерфейсу Spinnaker. В правом верхнем углу нажмитеActions, затем выберитеCreate Application. Вы увидите формуNew Application.

Creating a new Application in Spinnaker

Введитеhello-world в качестве имени, введите свой адрес электронной почты и нажмитеCreate.

Когда страница загрузится, перейдите кPipelines, щелкнув первую вкладку в верхнем меню. Вы увидите, что конвейеры еще не определены.

No pipelines defined in Spinnaker

Нажмите наConfigure a new pipeline, и откроется новая форма.

Creating a new Pipeline in Spinnaker

ВведитеDeploy Hello World Application в качестве имени вашего конвейера и нажмитеCreate.

На следующей странице нажмите кнопкуAdd Stage. В качествеType выберитеDeploy (Manifest), который используется для развертывания указанных вами манифестов Kubernetes. ДляStage Name введитеDeploy Hello World. Прокрутите вниз и в текстовом поле подManifest Configuration введите следующие строки:

Конфигурация манифеста

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

Не забудьте заменитьhello-world.example.com своим доменом, который также указывает на балансировщик нагрузки.

В этой конфигурации вы определяетеDeployment, состоящий из трех реплик образаpaulbouwer/hello-kubernetes:1.5. Вы также определяетеService, чтобы иметь к нему доступ, и Ingress, чтобы выставлятьService в вашем домене.

НажмитеSave Changes в правом нижнем углу экрана. Когда он закончится, вернитесь кPipelines. Справа выберите только что созданный конвейер и нажмите ссылкуStart Manual Execution. Когда вас попросят подтвердить, нажмитеRun.

Этот трубопровод займет короткое время для завершения. После успешного завершения вы увидите индикатор выполнения.

Successfully ran a Pipeline

Теперь вы можете перейти к домену, который вы определили в конфигурации. Вы увидите приложениеHello World, которое только что развернул Spinnaker.

Hello World App

Вы создали приложение в Spinnaker, запустили конвейер для развертывания приложенияHello World и получили к нему доступ. На следующем шаге вы защитите Spinnaker, включив авторизацию GitHub Organizations.

[[step-5 -—- enable-role-based-access-with-github-organization]] == Шаг 5. Включение ролевого доступа с GitHub Organizations

В этом разделе вы включите аутентификацию GitHub OAuth и авторизацию организаций GitHub. Включение аутентификации GitHub OAuth заставляет пользователей Spinnaker входить в систему через GitHub, что предотвращает анонимный доступ. Авторизация через GitHub Organisations ограничивает доступ только тем, кто находится в Организации. Организация GitHub может содержатьTeams (именованные группы участников), которые вы сможете использовать для дальнейшего ограничения доступа к ресурсам в Spinnaker.

Чтобы проверка подлинности OAuth работала, сначала необходимо настроить URL-адрес обратного вызова авторизации, по которому пользователь будет перенаправлен после авторизации. Это ваш домен API, заканчивающийся на/login. Вы должны указать это вручную, чтобы Spinnaker и другие сервисы не могли угадать. Чтобы настроить это, выполните следующую команду:

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

Вы увидите этот вывод:

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

Чтобы настроить аутентификацию OAuth с помощью GitHub, вам необходимо создать приложение OAuth для вашей Организации. Для этого перейдите в свою организацию на GitHub, перейдите кSettings, нажмитеDeveloper Settings, а затем выберитеOAuth Apps в левом меню. После этого нажмите кнопкуNew OAuth App справа. Вы увидите формуRegister a new OAuth application.

Creating a new OAuth App on GitHub

Введитеspinnaker-auth в качестве имени. ДляHomepage URL введитеhttps://spinnaker.example.com, а дляAuthorization callback URL введитеhttps://spinnaker-api.example.com/login. Затем нажмитеRegister Application.

Вы будете перенаправлены на страницу настроек вашего нового приложения OAuth. Обратите внимание на значенияClient ID иClient Secret - они понадобятся вам для следующей команды.

Создав приложение OAuth, вы можете настроить Spinnaker на использование приложения OAuth, выполнив следующую команду:

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

Не забудьте заменитьclient_id иclient_secret значениями, показанными на странице настроек GitHub.

Ваш вывод будет похож на следующее:

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.

Вы настроили Spinnaker для использования приложения OAuth. Теперь, чтобы включить его, выполните:

hal config security authn oauth2 enable

Вывод будет выглядеть так:

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

Вы настроили и включили аутентификацию GitHub OAuth. Теперь пользователи будут вынуждены войти через GitHub, чтобы получить доступ к Spinnaker. Однако прямо сейчас каждый, кто имеет учетную запись GitHub, может войти в систему, а это не то, что вам нужно. Чтобы преодолеть это, вы сконфигурируете Spinnaker, чтобы ограничить доступ к членам желаемой организации.

Вам нужно будет настроить это полу-вручную через локальные конфигурационные файлы, потому что у Halyard еще нет команды для настройки этого. Во время развертывания Halyard будет использовать локальные файлы конфигурации для переопределения сгенерированной конфигурации.

Halyard ищет нестандартную конфигурацию в~/.hal/default/profiles/. Файлы с именемservice-name-*.yml подбираются Halyard и используются для переопределения настроек конкретной службы. Сервис, который вы переопределите, называетсяgate и служит шлюзом API для всего Spinnaker.

Создайте файл под~/.hal/default/profiles/ с именемgate-local.yml:

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

Добавьте следующие строки:

gate-local.yml

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

Заменитеyour_organization_name названием вашей организации GitHub. Сохраните и закройте файл.

С этим небольшим количеством конфигурации только члены вашей организации GitHub смогут получить доступ к Spinnaker.

[.note] #Note: Только те члены вашей организации GitHub, для которых установлено значениеPublic, смогут войти в Spinnaker. Этот параметр можно изменить на странице списка участников вашей организации.
#

Теперь вы интегрируете Spinnaker с еще более конкретным решением для правил доступа: GitHub Teams. Это позволит вам указать, какие команды будут иметь доступ к ресурсам, созданным в Spinnaker, таким как приложения.

Для этого вам потребуется личный токен GitHub для учетной записи администратора в вашей организации. Чтобы создать его, посетитеPersonal Access Tokens и нажмите кнопкуGenerate New Token. На следующей странице дайте ему описание по вашему выбору и не забудьте проверить областьread:org, расположенную подadmin:org. Когда вы закончите, нажмитеGenerate token и запишите его, когда он появится - вы больше не сможете его увидеть.

Чтобы настроить авторизацию роли GitHub Teams в Spinnaker, выполните следующую команду:

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

Обязательно заменитеaccess_token на свой личный токен доступа, который вы создали, и заменитеorganization_name на имя Организации.

Выход будет:

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

Вы обновили настройки группы GitHub. Теперь вы установите для провайдера авторизации GitHub, выполнив следующую команду:

hal config security authz edit --type github

Вывод будет выглядеть так:

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

После обновления этих настроек включите их, выполнив:

hal config security authz enable

Вы увидите следующий вывод:

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

После внесения всех изменений вы можете применить эти изменения к запущенному развертыванию Spinnaker. Для этого выполните следующую команду:

hal deploy apply

Когда он закончится, подождите, пока Kubernetes распространит изменения. Это может занять некоторое время - вы можете наблюдать за прогрессом, выполнив

kubectl get pods -n spinnaker -w

Когда состояния всех модулей станутRunning, а доступность1/1, перейдите в свой домен пользовательского интерфейса Spinnaker. Вы будете перенаправлены на GitHub и вам будет предложено войти, если вы еще этого не сделали. Если учетная запись, в которую вы вошли, является членом Организации, вы будете перенаправлены обратно в Spinnaker и войдете в систему. В противном случае вам будет отказано в доступе с сообщением, которое выглядит следующим образом:

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

Эффект от интеграции GitHub Teams заключается в том, что Spinnaker теперь переводит их вroles. Вы можете использовать этиrolesв Spinnaker для включения дополнительных ограничений доступа для членов определенных команд. Если вы попытаетесь добавить другое приложение, вы заметите, что теперь вы также можете указать разрешения, которые объединяют уровень доступа - только чтение или чтение и запись - с ролью для этого приложения.

Вы настроили аутентификацию и авторизацию на GitHub. Вы также настроили Spinnaker для ограничения доступа к членам вашей Организации, узнали о ролях и разрешениях и рассмотрели место команд GitHub при интеграции со Spinnaker.

Заключение

Вы успешно настроили и развернули Spinnaker в своем кластере DigitalOcean Kubernetes. Теперь вы можете более легко управлять и использовать свои облачные ресурсы из единого центра. Вы можете использовать триггеры для автоматического запуска конвейера; например, когда новый образ Docker был добавлен в реестр. Чтобы узнать больше об условиях и архитектуре Spinnaker, посетитеofficial documentation. Если вы хотите развернуть частный реестр Docker в своем кластере для хранения образов, посетитеHow To Set Up a Private Docker Registry on Top of DigitalOcean Spaces and Use It with DO Kubernetes.

Related