著者はhttps://www.brightfunds.org/funds/foss-nonprofits [無料およびオープンソース基金]を選択して、https://do.co/w4do-cta [Donationsのために書く]の一部として寄付を受け取りましたプログラム。

前書き

Spin​​nakerは、強力でカスタマイズ可能なパイプラインシステムを使用した、高速で安全かつ再現可能な展開のためのオープンソースのリソース管理および継続的配信アプリケーションです。 Spinnakerでは、https://www.digitalocean.com/products/kubernetes/ [DigitalOcean Kubernetes]を含む多くのプラットフォームへのアプリケーションの自動展開が可能です。 デプロイするときに、独自のデプロイメント戦略を作成するオプションを使用して、組み込みのhttps://www.spinnaker.io/concepts/#deployment-strategies [デプロイメント戦略](HighlanderやRed / blackなど)を使用するようにSpinnakerを構成できます。 。 JenkinsやTravisCIなどの他のDevOpsツールと統合でき、GitHubリポジトリとDockerレジストリを監視するように構成できます。

Spinnakerは、https://www.spinnaker.io/reference/halyard/#halyard [Halyard]によって管理されています。これは、Spinnakerをさまざまなプラットフォームに構成および展開するために特別に構築されたツールです。 Spinnakerでは、アプリケーションの設定とパイプラインを保持するためにhttps://www.spinnaker.io/setup/install/storage/[external storage]が必要です。 DigitalOcean Spacesのように、このタスクのさまざまなプラットフォームをサポートしています。

このチュートリアルでは、Halyardを使用して、DigitalOcean Spacesをバックエンドストレージとして、SpinnakerをDigitalOcean Kubernetesにデプロイします。 また、Spinnakerを目的のドメインで使用できるように設定し、Let’s Encrypt TLS証明書を使用して保護します。 次に、Spinnakerでサンプルアプリケーションを作成し、パイプラインを作成し、 `+ Hello World +`アプリをKubernetesクラスターにデプロイします。 テスト後、GitHub Organizationsを介して認証と承認を導入します。 最終的に、Kubernetesクラスターに安全で動作するSpinnaker展開ができます。

前提条件

  • https://www.spinnaker.io/setup/install/halyard/ [公式の指示]に従って、ローカルマシンにインストールされたHalyard。 16.04以降のUbuntuバージョンでHalyardを使用することはサポートされていないことに注意してください。 このような場合、https://www.spinnaker.io/setup/install/halyard/#install-halyard-on-docker [via Docker]を使用できます。

  • 接続が `+ kubectl `デフォルトとして設定されたDigitalOcean Kubernetesクラスター。 クラスターには、少なくとも8GBのRAMとSpinnakerで使用可能な4つのCPUコアが必要です(より重い使用の場合はさらに多く必要です)。 ` kubectl +`の設定方法については、クラスターを作成するときに表示される[クラスターに接続]ステップの下に表示されます。 DigitalOceanでKubernetesクラスターを作成するには、https://www.digitalocean.com/docs/kubernetes/quickstart/ [Kubernetes Quickstart]を参照してください。

  • クラスタにインストールされたNginx Ingress Controllerおよびcert-manager。 これを行う方法のガイドについては、https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes [ DigitalOcean KubernetesでCert-Managerを使用してNginx Ingressをセットアップする方法]。

  • APIキー(アクセスおよびシークレット)を持つDigitalOcean Space。 DigitalOceanスペースとAPIキーを作成するには、https://www.digitalocean.com/community/tutorials/how-to-create-a-digitalocean-space-and-api-key [DigitalOceanスペースとAPIを作成する方法]を参照してください。キー]。

  • イングレスが使用するDigitalOceanロードバランサーを指す3つのDNS Aレコードを持つドメイン名。 DigitalOceanを使用してドメインのDNSレコードを管理している場合は、https://www.digitalocean.com/docs/networking/dns/how-to/manage-records/ [DNSレコードの作成方法]を参照してAレコードを作成してください。 このチュートリアルでは、Aレコードを「」、「」、「++」と呼びます。

  • GitHubアカウント。GitHub組織に追加され、管理者権限と一般公開されています。 アカウントは、組織内のチームのメンバーでもある必要があります。 これは、ステップ5を完了するために必要です。

手順1-HalyardでKubernetesアカウントを追加する

このセクションでは、Halyardを介してKubernetesアカウントをSpinnakerに追加します。 アカウントは、Spinnakerの用語では、クラウドプロバイダーへのアクセスに使用する名前付きの資格情報です。

前提条件の一部として、テストのために「+ echo1 」および「 echo2 」サービスと「 echo_ingress +」イングレスを作成しました。このチュートリアルではこれらは必要ないので、削除できます。

次のコマンドを実行して、イングレスを削除することから始めます。

kubectl delete -f echo_ingress.yaml

次に、2つのテストサービスを削除します。

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

`+ kubectl delete `コマンドは、 ` -f +`パラメーターが渡されたときに削除するファイルを受け入れます。

次に、ローカルマシンから、ワークスペースとして機能するフォルダーを作成します。

mkdir ~/spinnaker-k8s

次のコマンドを実行して、ワークスペースに移動します。

cd ~/spinnaker-k8s

HalyardはSpinnakerの展開先をまだ知りません。 次のコマンドで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

Halyardは、Kubernetesプロバイダーを有効にするために行ったすべての手順を記録し、アカウントがまだ定義されていないことを警告しました。

次に、_RBAC_とともに、SpinnakerのKubernetes _サービスアカウント_を作成します。 サービスアカウントは、単一の名前空間にスコープされるアカウントの一種です。 これはソフトウェアによって使用され、クラスター内のさまざまなタスクを実行できます。 RBAC(Role Based Access Control)は、Kubernetesクラスター内のリソースへのアクセスを規制する方法です。 重要な構成がクラスターで不注意に変更されないように、アカウントのアクションの範囲を制限します。

ここでは、Spinnakerに「+ cluster-admin +」権限を付与して、クラスター全体を制御できるようにします。 より制限的な環境を作成する場合は、https://kubernetes.io/docs/reference/access-authn-authz/rbac/ [RBACに関するKubernetesの公式ドキュメント]を参照してください。

まず、次のコマンドを実行して、 `+ spinnaker +`名前空間を作成します。

kubectl create ns spinnaker

出力は以下のようになります。

Outputnamespace/spinnaker created

次のコマンドを実行して、 `++`という名前のサービスアカウントを作成します。

kubectl create serviceaccount  -n spinnaker

`+ -n `フラグを使用して、 ` kubectl `が ` spinnaker +`名前空間にサービスアカウントを作成することを指定しました。 出力は次のようになります。

Outputserviceaccount/ created

次に、それを `+ cluster-admin`ロールにバインドします:

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

次の出力が表示されます。

Outputclusterrolebinding.rbac.authorization.k8s.io/ created

Halyardはローカルのkubectlを使用してクラスターにアクセスします。 Spinnakerを展開する前に、新しく作成したサービスアカウントを使用するように設定する必要があります。 Kubernetesアカウントは、ユーザー名とトークンを使用して認証します。 サービスアカウントが作成されると、Kubernetesは新しいシークレットを作成し、アカウントトークンを設定します。 「+」のトークンを取得するには、最初にシークレットの名前を取得する必要があります。 次のコマンドを実行して、 ` TOKEN_SECRET +`という名前のコンソール変数に取得できます。

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

これは、ネームスペース「+ spinnaker 」から「+」に関する情報を取得し、JSONパスを渡すことで、含まれる最初のシークレットの名前を取得します。

次を実行して、シークレットの内容を `+ TOKEN +`という名前の変数に取得します。

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

これで、トークンが環境変数 `+ TOKEN`で利用可能になりました。 次に、kubectlでサービスアカウントの認証情報を設定する必要があります。

kubectl config set-credentials  --token $TOKEN

次の出力が表示されます。

OutputUser "" set.

次に、次のコマンドを実行して、現在のコンテキストのユーザーを新しく作成された「++」に設定する必要があります。

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

現在のユーザーを「」に設定すると、kubectlは「」を使用するように設定されますが、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.

このコマンドは、 `+ spinnaker-account`という名前のKubernetesアカウントをHalyardに追加し、サービスアカウントとしてマークします。

一般に、Spinnakerは、分散インストールまたはローカルインストールの2つの方法で展開できます。 _Distributed_インストールは、このチュートリアルで完了しているもので、クラウドに展開しています。 一方、_Local_インストールは、Spinnakerがダウンロードされ、Halyardが実行されているマシンにインストールされることを意味します。 SpinnakerをKubernetesにデプロイしているため、次のようにデプロイメントを「+ distributed +」としてマークする必要があります。

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

Spinnakerデプロイメントはイメージを構築するため、Spinnakerで `+ artifacts +`を有効にする必要があります。 次のコマンドを実行して、それらを有効にできます。

hal config features edit --artifacts true

ここでは、 `+ artifacts +`を有効にして、Spinnakerが作成するオブジェクトに関するより多くのメタデータを保存できるようにしました。

Halyardを介してSpinnakerにKubernetesアカウントを追加しました。 Kubernetesプロバイダーを有効にし、RBACロールを構成し、現在のkubectl構成をSpinnakerに追加して、プロバイダーにアカウントを追加しました。 次に、バックエンドストレージをセットアップします。

手順2-スペースを基になるストレージとして構成する

このセクションでは、スペースをSpinnakerデプロイメントの基礎となるストレージとして構成します。 SpinnakerはSpaceを使用して、その構成とパイプライン関連のデータを保存します。

HalyardでS3ストレージを構成するには、次のコマンドを実行します。

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

“をSpaceアクセスキーに、 “をSpaceのエンドポイントに置き換えてください。 これは通常、「。digitaloceanspaces.com +」で、「」はスペースの領域です。 “をスペースの名前に置き換えることができます。 DigitalOcean Spaces検証はサポートされていないため、 `-no-validate +`フラグは、指定された設定をすぐに検証しないようHalyardに指示します。

このコマンドを実行すると、Halyardはシークレットアクセスキーを要求します。 入力して続行すると、次の出力が表示されます。

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のインスタンスが使用する基礎となるストレージとしてSpaceを設定しました。 次に、SpinnakerをKubernetesクラスターにデプロイし、Nginx Ingress Controllerを使用してドメインで公開します。

手順3-Spinnakerをクラスターに展開する

このセクションでは、Halyardを使用してSpinnakerをクラスターにデプロイし、Nginx Ingressを使用してドメインのUIおよびAPIコンポーネントを公開します。 まず、ドメインURLを構成します。1つはSpinnakerのユーザーインターフェイス用で、もう1つはAPIコンポーネント用です。 次に、目的のバージョンのSpinnakerを選択し、Halyardを使用して展開します。 最後に、イングレスを作成し、Nginxコントローラーとして構成します。

最初に、HalyardでSpinnakerのUIとAPI URLの構成値を編集し、目的のドメインに設定する必要があります。 APIエンドポイントを目的のドメインに設定するには、次のコマンドを実行します。

hal config security api edit --override-base-url https://

出力は以下のようになります。

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

SpinnakerにアクセスするドメインにUIエンドポイントを設定するには、次を実行します。

hal config security ui edit --override-base-url https://

出力は以下のようになります。

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

「」と「」をドメインに置き換えることを忘れないでください。 これらは、Nginx Ingress Controllerの前提条件で作成したロードバランサーを指しているドメインです。

SpinnakerのKubernetesアカウントを作成して保護し、Spaceを基盤となるストレージとして設定し、UIと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

何らかのリグレッションが発生しない限り、常に最新バージョンを選択することをお勧めします。

次の出力が表示されます。

Output+ Get current deployment
 Success
+ Edit Spinnaker version
 Success
+ Spinnaker has been configured to update/install 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
...

Halyardは、Spinnakerの各マイクロサービスの展開ステータスを表示しています。 舞台裏では、kubectlを呼び出してインストールします。

Kubernetesは、すべてのコンテナを起動するのに、特に初めての場合、平均で10分ほどかかります。 次のコマンドを実行して、進行状況を監視できます。

kubectl get pods -n spinnaker -w

SpinnakerをKubernetesクラスターにデプロイしましたが、クラスターを超えてアクセスすることはできません。

入力設定を「++」という名前のファイルに保存します。 テキストエディターを使用して作成します。

nano

次の行を追加します。

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:
   -
   -
   secretName: spinnaker
 rules:
 - host:
   http:
     paths:
     - backend:
         serviceName: spin-gate
         servicePort: 8084
 - host:
   http:
     paths:
     - backend:
         serviceName: spin-deck
         servicePort: 9000

「」をAPIドメインに、「」をUIドメインに置き換えてください。

設定ファイルは、 `+ spinnaker-ingress `と呼ばれるイングレスを定義します。 アノテーションは、このイングレスのコントローラーがNginxコントローラーになり、 ` letsencrypt-prod +`クラスター発行者が前提条件チュートリアルで定義されたTLS証明書を生成することを指定します。

次に、TLSがUIおよびAPIドメインを保護することを指定します。 APIドメインを適切なポート +8084+で + spin-gate + サービス(SpinnakerのAPIコンテナ)に誘導し、UIドメインを + spin-deck + サービス(SpinnakerのUIコンテナ)に誘導することでルーティングを設定します。 `および + 9000 + `。

ファイルを保存して閉じます。

次を実行して、KubernetesにIngressを作成します。

kubectl create -f

次の出力が表示されます。

Outputingress.extensions/spinnaker-ingress created

Let’s EncryptがTLS証明書をプロビジョニングするまで数分待ってから、ブラウザでUIドメイン「++」に移動します。 Spinnakerのユーザーインターフェースが表示されます。

image:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step3.png [Spin​​nakerのホームページ]

Spinnakerをクラスターに展開し、ドメインでUIおよびAPIコンポーネントを公開し、動作するかどうかをテストしました。 次に、Spinnakerでアプリケーションを作成し、パイプラインを実行して「+ Hello World +」アプリをデプロイします。

手順4-アプリケーションの作成とパイプラインの実行

このセクションでは、ドメインのSpinnakerへのアクセスを使用して、アプリケーションを作成します。 次に、パイプラインを作成して実行し、「+ Hello World +」アプリをデプロイします。これはhttps://hub.docker.com/r/paulbouwer/hello-kubernetes/[paulbouwer/hello-kubernetes]にあります。 後でアプリにアクセスします。

SpinnakerのUIを公開したドメインに移動します。 右上隅の*アクション*を押し、*アプリケーションの作成*を選択します。 * New Application *フォームが表示されます。

image:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step4a.png [Spin​​nakerでの新しいアプリケーションの作成]

名前に「+ hello-world +」と入力し、メールアドレスを入力して、*作成*を押します。

ページが読み込まれたら、トップメニューの最初のタブをクリックして*パイプライン*に移動します。 パイプラインがまだ定義されていないことがわかります。

image:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step4b.png [Spin​​nakerで定義されたパイプラインはありません]

[新しいパイプラインの設定]を押すと、新しいフォームが開きます。

image:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step4c.png [Spin​​nakerでの新しいパイプラインの作成]

パイプラインの名前として「+ Hello World Application +」を入力し、*作成*を押します。

次のページで、ステージの追加*ボタンをクリックします。 * Type *として、 Deploy(Manifest)を選択します。これは、指定したKubernetesマニフェストの展開に使用されます。 *ステージ名*には、「+ 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:
   -
   secretName: hello-world
 rules:
 - host:
   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

ロードバランサーを指すドメインで、「++」を忘れずに置き換えてください。

この設定では、 `+ paulbouwer / hello-kubernetes:1.5 `イメージの3つのレプリカで構成される ` Deployment `を定義します。 また、アクセスできるように「 Service 」を定義し、ドメインで「 Service +」を公開するIngressを定義します。

画面の右下にある[変更を保存]を押します。 終了したら、* Pipelines *に戻ります。 右側で、作成したパイプラインを選択し、*手動実行の開始*リンクを押します。 確認を求められたら、[実行]を押します。

このパイプラインは完了するまでに少し時間がかかります。 正常に終了すると、進行状況バーが完了します。

image:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step4d.png [パイプラインを正常に実行しました]

これで、構成で定義したドメインに移動できます。 Spinnakerが展開したばかりの「+ Hello World +」アプリが表示されます。

画像:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step4e.png [Hello World App]

Spinnakerでアプリケーションを作成し、パイプラインを実行して「+ Hello World」アプリをデプロイし、アクセスしました。 次のステップでは、GitHub Organizations認証を有効にしてSpinnakerを保護します。

ステップ5-GitHub組織での役割ベースのアクセスの有効化

このセクションでは、GitHub OAuth認証とGitHub Organizations認証を有効にします。 GitHub OAuth認証を有効にすると、SpinnakerユーザーはGitHub経由でログインするように強制されるため、匿名アクセスが防止されます。 GitHub Organizationsを介した承認は、組織内のユーザーのみにアクセスを制限します。 GitHub組織にはhttps://help.github.com/en/articles/about-teams[Teams](メンバーのグループ名)を含めることができます。これを使用して、Spinnakerのリソースへのアクセスをさらに制限できます。

OAuth認証を機能させるには、最初に承認コールバックURLを設定する必要があります。これは、承認後にユーザーがリダイレクトされる場所です。 これは、「+ / login」で終わるAPIドメインです。 Spinnakerや他のサービスが推測するのを防ぐために、これを手動で指定する必要があります。 これを構成するには、次のコマンドを実行します。

hal config security authn oauth2 edit --pre-established-redirect-uri https:///login

次の出力が表示されます。

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

GitHubでOAuth認証を設定するには、組織のOAuthアプリケーションを作成する必要があります。 これを行うには、GitHubで組織に移動し、設定*に移動して、*開発者設定*をクリックし、左側のメニューから OAuthアプリ*を選択します。 その後、右側の[新しいOAuthアプリ]ボタンをクリックします。 *新しいOAuthアプリケーションの登録*フォームが表示されます。

image:https://assets.digitalocean.com/articles/spinnakerk8spipeline/step5a.png [GitHubでの新しいOAuthアプリの作成]

名前として「+」を入力します。 *ホームページのURL *には「 https:// 」と入力し、「認証コールバックURL *」には「 https:/// login +」と入力します。 次に、*アプリケーションの登録*を押します。

新しいOAuthアプリの設定ページにリダイレクトされます。 *クライアントID *および*クライアントシークレット*の値に注意してください。次のコマンドで必要になります。

OAuthアプリを作成したら、次のコマンドを実行して、OAuthアプリを使用するようSpinnakerを構成できます。

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

“と “を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.

OAuthアプリを使用するようにSpinnakerを構成しました。 今、それを有効にするには、次を実行します:

hal config security authn oauth2 enable

出力は以下のようになります。

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

GitHub OAuth認証を構成して有効にしました。 これで、ユーザーはSpinnakerにアクセスするためにGitHub経由でのログインを強制されます。 ただし、現時点では、GitHubアカウントを持っているすべてのユーザーがログインできますが、これは望みのものではありません。 これを克服するには、目的の組織のメンバーへのアクセスを制限するようにSpinnakerを構成します。

Halyardにはこれを設定するコマンドがまだないため、ローカルの設定ファイルを使用してこれを半手動で設定する必要があります。 デプロイ中、Halyardはローカル構成ファイルを使用して、生成された構成をオーバーライドします。

Halyardは、 `〜/ .hal / default / profiles / +`の下でカスタム設定を探します。 `-*。yml `という名前のファイルはHalyardによって取得され、特定のサービスの設定をオーバーライドするために使用されます。 オーバーライドするサービスは「 gate +」と呼ばれ、Spinnaker全体のAPIゲートウェイとして機能します。

`〜/ .hal / default / profiles / +`の下に ` gate-local.yml +`という名前のファイルを作成します。

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

次の行を追加します。

gate-local.yml

security:
oauth2:
  providerRequirements:
    type: GitHub
    organization:

`++`をGitHub組織の名前に置き換えます。 ファイルを保存して閉じます。

この少しの構成では、GitHub組織のメンバーのみがSpinnakerにアクセスできます。

次に、Spinnakerをさらに具体的なアクセスルールソリューションであるGitHub Teamsと統合します。 これにより、アプリケーションなど、Spinnakerで作成されたリソースにアクセスするチームを指定できます。

これを実現するには、組織の管理者アカウント用のGitHubパーソナルアクセストークンが必要です。 作成するには、https://GitHub.com/settings/tokens [Personal Access Tokens]にアクセスし、* Generate New Token ボタンを押してください。 次のページで、選択の説明を入力し、 admin:org の下にある read:org スコープを確認してください。 完了したら、 Generate token *を押して、表示されたらそれを書き留めます。再び表示することはできません。

SpinnakerでGitHub Teamsの役割の承認を構成するには、次のコマンドを実行します。

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

生成した個人アクセストークンで「」を置き換え、「」を組織の名前で置き換えてください。

出力は次のようになります。

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 UIドメインに移動します。 GitHubにリダイレクトされ、まだログインしていない場合はログインするよう求められます。 ログインしたアカウントが組織のメンバーである場合、Spinnakerにリダイレクトされてログインし直します。 そうしないと、次のようなメッセージでアクセスが拒否されます。

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

GitHub Teams統合の効果は、Spinnakerがそれらを_roles_に変換することです。 これらのhttps://www.spinnaker.io/setup/security/authorization/#role-providers[roles]をSpinnakerで使用して、特定のチームのメンバーのアクセスに追加の制限を組み込むことができます。 別のアプリケーションを追加しようとすると、そのアプリケーションのアクセス許可(読み取り専用レベルまたは読み取りと書き込みレベル)を組み合わせたアクセス許可も指定できるようになります。

GitHubの認証と承認を設定しました。 また、組織のメンバーへのアクセスを制限するようにSpinnakerを構成し、役割と権限について学習し、Spinnakerと統合する際のGitHubチームの場所を検討しました。

結論

SpinnakerをDigitalOcean Kubernetesクラスターに正常に構成およびデプロイしました。 クラウドリソースを中央の場所からより簡単に管理および使用できるようになりました。 トリガーを使用して、パイプラインを自動的に開始できます。たとえば、新しいDockerイメージがレジストリに追加されたとき。 Spinnakerの用語とアーキテクチャの詳細については、https://www.spinnaker.io/guides/user/applications/ [公式ドキュメント]をご覧ください。 クラスターにプライベートDockerレジストリをデプロイしてイメージを保持する場合は、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-にアクセスしてください。 top-of-digitalocean-spaces-and-it-with-do-kubernetes [DigitalOcean Spacesの上にプライベートDockerレジストリを設定し、DO Kubernetesで使用する方法]。