著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにFree and Open Source Fundを選択しました。
前書き
Spinnakerは、強力でカスタマイズ可能なパイプラインシステムを使用して、高速で安全かつ反復可能な展開を実現するオープンソースのリソース管理および継続的デリバリーアプリケーションです。 Spinnakerを使用すると、DigitalOcean Kubernetesを含む多くのプラットフォームへのアプリケーションの自動展開が可能になります。 デプロイするとき、独自のデプロイメント戦略を作成するオプションを使用して、HighlanderやRed / blackなどの組み込みのdeployment strategiesを使用するようにSpinnakerを構成できます。 JenkinsやTravisCIなどの他のDevOpsツールと統合でき、GitHubリポジトリとDockerレジストリを監視するように構成できます。
Spinnakerは、さまざまなプラットフォームにSpinnakerを構成および展開するために特別に構築されたツールであるHalyardによって管理されます。 Spinnakerでは、アプリケーションの設定とパイプラインを永続化するためにexternal storageが必要です。 DigitalOcean Spacesなど、このタスクのさまざまなプラットフォームをサポートします。
このチュートリアルでは、Halyardを使用して、DigitalOcean Spacesをバックエンドストレージとして、SpinnakerをDigitalOcean Kubernetesにデプロイします。 また、Spinnakerを目的のドメインで使用できるように設定し、Let's Encrypt TLS証明書を使用して保護します。 次に、Spinnakerでサンプルアプリケーションを作成し、パイプラインを作成して、Hello World
アプリをKubernetesクラスターにデプロイします。 テスト後、GitHub Organizationsを介して認証と承認を導入します。 最終的に、Kubernetesクラスターに安全で動作するSpinnaker展開ができます。
[.note]#Note:このチュートリアルは、Spinnaker1.13.5
。
で特別にテストされています#
前提条件
-
official instructionsに従って、ローカルマシンにインストールされたハリヤード。 16.04以降のUbuntuバージョンでHalyardを使用することはサポートされていないことに注意してください。 このような場合は、via Dockerを使用できます。
-
接続が
kubectl
のデフォルトとして構成されたDigitalOceanKubernetesクラスター。 クラスターには、少なくとも8GBのRAMとSpinnakerで使用可能な4つのCPUコアが必要です(より重い使用の場合はさらに多く必要です)。kubectl
を構成する方法の説明は、クラスターの作成時に表示されるConnect to your Clusterステップの下に表示されます。 DigitalOceanでKubernetesクラスターを作成するには、Kubernetes Quickstartを参照してください。 -
クラスタにインストールされたNginx Ingress Controllerおよびcert-manager。 これを行う方法のガイドについては、How to Set Up an Nginx Ingress with Cert-Manager on DigitalOcean Kubernetesを参照してください。
-
APIキー(アクセスおよびシークレット)を持つDigitalOcean Space。 DigitalOcean SpaceおよびAPIキーを作成するには、How To Create a DigitalOcean Space and API Keyを参照してください。
-
イングレスが使用するDigitalOceanロードバランサーを指す3つのDNS Aレコードを持つドメイン名。 DigitalOceanを使用してドメインのDNSレコードを管理している場合は、How to Create DNS Recordsを参照してAレコードを作成してください。 このチュートリアルでは、Aレコードを
spinnaker.example.com
、spinnaker-api.example.com
、およびhello-world.example.com
と呼びます。 -
GitHubアカウント。管理者権限と公開表示を使用して、GitHub組織に追加されます。 アカウントは、組織内のチームのメンバーでもある必要があります。 これは、ステップ5を完了するために必要です。
[[step-1 -—- adding-a-kubernetes-account-with-halyard]] ==ステップ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のKubernetesservice accountを作成します。 サービスアカウントは、単一の名前空間にスコープされるアカウントの一種です。 これはソフトウェアによって使用され、クラスター内のさまざまなタスクを実行できます。 RBAC(Role Based Access Control)は、Kubernetesクラスター内のリソースへのアクセスを規制する方法です。 重要な構成がクラスターで不注意に変更されないように、アカウントのアクションの範囲を制限します。
ここでは、Spinnakerにcluster-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
Halyardはローカルの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
からspinnaker-service-account
に関する情報を取得し、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.
このコマンドは、spinnaker-account
という名前のKubernetesアカウントをHalyardに追加し、サービスアカウントとしてマークします。
一般に、Spinnakerは、分散インストールまたはローカルインストールの2つの方法で展開できます。 Distributedのインストールは、このチュートリアルで完了しているものです。つまり、クラウドにデプロイします。 一方、Localのインストールは、Halyardが実行されているマシンにSpinnakerがダウンロードされてインストールされることを意味します。 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に追加して、プロバイダーにアカウントを追加しました。 次に、バックエンドストレージをセットアップします。
[[step-2 -—- configuring-the-space-as-the-underlying-storage]] ==ステップ2—スペースを基礎となるストレージとして構成する
このセクションでは、スペースをSpinnakerデプロイメントの基礎となるストレージとして構成します。 SpinnakerはSpaceを使用して、その構成とパイプライン関連のデータを保存します。
HalyardでS3ストレージを構成するには、次のコマンドを実行します。
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
フラグは、DigitalOcean Spaces検証がサポートされていないため、指定された設定をすぐに検証しないように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を使用してドメインで公開します。
[[step-3 -—- deploying-spinnaker-to-your-cluster]] ==ステップ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://spinnaker-api.example.com
出力は以下のようになります。
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://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アカウントを作成して保護し、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 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
...
Halyardは、Spinnakerの各マイクロサービスの展開ステータスを表示しています。 舞台裏では、kubectlを呼び出してインストールします。
Kubernetesは、すべてのコンテナを起動するのに、特に初めての場合、平均して10分かかります。 次のコマンドを実行して、進行状況を監視できます。
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
をUIドメインに置き換えることを忘れないでください。
構成ファイルは、spinnaker-ingress
と呼ばれる入力を定義します。 注釈は、この入力のコントローラーがNginxコントローラーになること、およびletsencrypt-prod
クラスター発行者が前提条件のチュートリアルで定義されているTLS証明書を生成することを指定します。
次に、TLSがUIおよびAPIドメインを保護することを指定します。 APIドメインをspin-gate
サービス(SpinnakerのAPIコンテナー)に転送し、UIドメインを適切なポート8084
でspin-deck
サービス(SpinnakerのUIコンテナー)に転送することでルーティングを設定します。 9000
。
ファイルを保存して閉じます。
次を実行して、KubernetesにIngressを作成します。
kubectl create -f spinnaker-ingress.yaml
次の出力が表示されます。
Outputingress.extensions/spinnaker-ingress created
Let’s EncryptがTLS証明書をプロビジョニングするまで数分待ってから、ブラウザでUIドメインspinnaker.example.com
に移動します。 Spinnakerのユーザーインターフェースが表示されます。
Spinnakerをクラスターに展開し、ドメインでUIおよびAPIコンポーネントを公開し、動作するかどうかをテストしました。 次に、Spinnakerでアプリケーションを作成し、パイプラインを実行してHello World
アプリをデプロイします。
[[ステップ-4 -—-アプリケーションの作成とパイプラインの実行]] ==ステップ4—アプリケーションの作成とパイプラインの実行
このセクションでは、ドメインのSpinnakerへのアクセスを使用して、アプリケーションを作成します。 次に、パイプラインを作成して実行し、paulbouwer/hello-kubernetesにあるHello World
アプリをデプロイします。 後でアプリにアクセスします。
SpinnakerのUIを公開したドメインに移動します。 右上隅で、Actionsを押してから、Create Applicationを選択します。 New Applicationフォームが表示されます。
名前としてhello-world
を入力し、メールアドレスを入力して、Createを押します。
ページが読み込まれたら、トップメニューの最初のタブをクリックしてPipelinesに移動します。 パイプラインがまだ定義されていないことがわかります。
Configure a new pipelineを押すと、新しいフォームが開きます。
パイプラインの名前としてDeploy Hello World Application
を入力し、Createを押します。
次のページで、Add Stageボタンをクリックします。 Typeとして、指定したKubernetesマニフェストのデプロイに使用されるDeploy (Manifest)を選択します。 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
をドメインに置き換えることを忘れないでください。ドメインもロードバランサーを指しています。
この構成では、paulbouwer/hello-kubernetes:1.5
イメージの3つのレプリカで構成されるDeployment
を定義します。 また、アクセスできるようにService
を定義し、ドメインでService
を公開するためにIngressを定義します。
画面の右下隅にあるSave Changesを押します。 終了したら、Pipelinesに戻ります。 右側で、作成したパイプラインを選択し、Start Manual Executionリンクを押します。 確認を求められたら、Runを押します。
このパイプラインは完了するまでに少し時間がかかります。 正常に終了すると、進行状況バーが完了します。
これで、構成で定義したドメインに移動できます。 SpinnakerがデプロイしたばかりのHello World
アプリが表示されます。
Spinnakerでアプリケーションを作成し、パイプラインを実行してHello World
アプリをデプロイし、それにアクセスしました。 次のステップでは、GitHub Organizations認証を有効にしてSpinnakerを保護します。
[[step-5 -—- enableing-role-based-access-with-github-organizations]] ==ステップ5—GitHub組織での役割ベースのアクセスの有効化
このセクションでは、GitHub OAuth認証とGitHub Organizations認証を有効にします。 GitHub OAuth認証を有効にすると、SpinnakerユーザーはGitHub経由でログインするように強制されるため、匿名アクセスが防止されます。 GitHub Organizationsを介した承認は、組織内のユーザーのみにアクセスを制限します。 GitHub組織にはTeams(メンバーの名前付きグループ)を含めることができます。これを使用して、Spinnakerのリソースへのアクセスをさらに制限できます。
OAuth認証を機能させるには、最初に承認コールバックURLを設定する必要があります。これは、承認後にユーザーがリダイレクトされる場所です。 これは、/login
で終わるAPIドメインです。 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.
GitHubでOAuth認証を設定するには、組織のOAuthアプリケーションを作成する必要があります。 これを行うには、GitHubで組織に移動し、Settingsに移動し、Developer Settingsをクリックして、左側のメニューからOAuth Appsを選択します。 その後、右側のNew OAuth Appボタンをクリックします。 Register a new OAuth applicationフォームが表示されます。
名前として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アプリを作成したら、次のコマンドを実行して、OAuthアプリを使用するようSpinnakerを構成できます。
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.
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/
の下でカスタム構成を探します。 service-name-*.yml
という名前のファイルは、Halyardによって取得され、特定のサービスの設定を上書きするために使用されます。 オーバーライドするサービスはgate
と呼ばれ、Spinnaker全体のAPIゲートウェイとして機能します。
gate-local.yml
という名前の~/.hal/default/profiles/
の下にファイルを作成します。
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:メンバーシップがPublicに設定されているGitHub組織のメンバーのみが、Spinnakerにログインできます。 この設定は、組織のメンバーリストページで変更できます。
#
次に、Spinnakerをさらに特定のアクセスルールソリューションであるGitHub Teamsと統合します。 これにより、アプリケーションなど、Spinnakerで作成されたリソースにアクセスするチームを指定できます。
これを実現するには、組織の管理者アカウント用のGitHubパーソナルアクセストークンが必要です。 作成するには、Personal Access Tokensにアクセスし、Generate New Tokenボタンを押します。 次のページで、選択した内容を説明し、admin:orgの下にあるread:orgスコープを必ず確認してください。 完了したら、Generate tokenを押して、表示されたらメモします。再び表示することはできません。
SpinnakerでGitHub Teamsの役割の承認を構成するには、次のコマンドを実行します。
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
になったら、SpinnakerUIドメインに移動します。 GitHubにリダイレクトされ、まだログインしていない場合はログインするよう求められます。 ログインしたアカウントが組織のメンバーである場合、Spinnakerにリダイレクトされてログインし直します。 そうしないと、次のようなメッセージでアクセスが拒否されます。
{"error":"Unauthorized", "message":"Authentication Failed: User's provider info does not have all required fields.", "status":401, "timestamp":...}
GitHub Teams統合の効果は、Spinnakerがそれらをrolesに変換することです。 Spinnakerでこれらのrolesを使用して、特定のチームのメンバーのアクセスに対する追加の制限を組み込むことができます。 別のアプリケーションを追加しようとすると、そのアプリケーションのアクセスレベル(読み取り専用または読み取りと書き込み)とロールを組み合わせたアクセス許可も指定できるようになります。
GitHubの認証と承認を設定しました。 また、組織のメンバーへのアクセスを制限するようにSpinnakerを構成し、役割と権限について学習し、Spinnakerと統合する際のGitHubチームの場所を検討しました。
結論
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にアクセスします。