SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

デプロイ時の課題をKubernetes×Helmで解決! サードパーティリソースへのアクセス管理

原題:How to Manage Access to 3rd Party Resources in Kubernetes with Helm

  • X ポスト
  • このエントリーをはてなブックマークに追加

課題

 これらの3つの展開シナリオを見ると、それぞれのケースでPostgreSQLを使用するアプリケーションが、独自の名前と内容を持つ個別のシークレットを認識する必要があることがわかります。組み込み型シナリオでは公式のPostgreSQL Helmチャートにより提供される値とシークレットを使用しますが、OSBAシナリオではベンダー固有の属性名でシークレットを使用し、外部シナリオではシークレットの名前と内容を自由に定義できます。

 1つの展開シナリオで作業するだけなら問題ありませんが、通常はそうとは限りません。例えば、開発段階で組み込み型の展開を使用しても、その後の実稼働ではクラウドプロバイダーのマネージドサービスを使用する必要があり、OSBAの展開が必要になることがあります。したがって、データベースの展開方法や場所に関係なく、アプリケーションが同じ方法でデータベースにアクセスできるようにする必要があることがわかります。そこで、抽象化が必要になります。

解決策

 Talendが選択した解決策では、アプリケーションが場所を限定されずにデータベースに接続するために必要な、抽象化層を提供する「ジェネリックシークレット」を使用します。

 シークレットには、機密データを扱うリソースとなる以外にも、ポッドの起動を同期する手段にもなるといったメリットがあります。シークレットファイルに依存するポッドがある場合や、何らかの環境変数がシークレットに依存する場合、シークレットが利用可能になってからでないとポッドは起動すらできません。

図4:ジェネリックシークレットによるカスタムプロビジョニングの抽象化
図4:ジェネリックシークレットによるカスタムプロビジョニングの抽象化

 以下は、PostgreSQLのクラスターとデータベースにアクセスするために作成するジェネリックシークレットの例です。

表:Facebook認証機能実装にあたり追加するgem
シークレットキー シークレットの値の説明 
postgresql.database  データベースの名前
postgresql.host クラスターのホスト名(IPアドレスまたはKubernetesサービス名)
ostgresql.password マスターのパスワード
postgresql.port クラスターのポート(通常は5432)
postgresql.user マスターユーザー

 上記の各展開シナリオにおいて、このジェネリックシークレットを作成するには、以下に説明する通り、異なるメカニズムを使用します。

組み込み型展開シナリオ

 ジェネリックシークレットは、Kubernetesジョブによってvalues.yamlファイルから作成され、PostgreSQLシークレットは公式PostgreSQLチャートによって作成されます。ジョブの環境変数を使用して、組み込まれたPostgreSQLシークレットが作成されるのを待ちます。例についてはこちらを参照してください。

OSBA展開シナリオ

 OSBAプロビジョニングプロセスには、2つのKubernetesリソース、サービスインスタンス、およびサービスバインディングが含まれます。サービスバインディングは、プロビジョニングの実行が成功した後に作成されるシークレットの名前を記述します。このため、組み込みシナリオと同様に、Kubernetesジョブを使用してOSBAシークレットが作成されるのを待ち、そこからジェネリックシークレットを作成します。例についてはこちらを参照してください。

外部展開シナリオ

 このシナリオは、外部から取得したクレデンシャルデータをHelmのインストールプロセスで指定できるため、最も簡単なシナリオです。したがって、単純なシークレットテンプレートだけでジェネリックシークレットを作成できます。例についてはこちらを参照してください。

新しいレベルの接続管理

 Kubernetesは、コンテナ化されたアプリケーションのオーケストレーションを別のレベルに移せるため、ソフトウェアベンダーによる開発、QA、実稼働の環境間で発生するギャップを埋めるうえで役立ちます。それと同時に、サードパーティのリソース/サービスのオプションが大幅に増加しており、ソフトウェアベンダーは、ローカルで管理されるサービスとクラウドベースのサービスの間で柔軟に切り替えることが可能なアプリケーションの構築という課題にも直面しています。

 今回は、KubernetesとHelmを活用して、KubernetesアプリケーションからPostgreSQLデータベースへの接続を管理する例を紹介しました。これは、クラスター内のアプリケーションとともに展開することも、クラウド環境にオンデマンドで展開することも、またはクラスター外で事前に展開することも可能です。ここではHelmチャートを使用して、アプリケーションとデータベースの間に抽象化層を提供する単一のジェネリックシークレットを作成しました。この方法を採れば、アプリケーションはデータベースの展開場所を意識したりデータベースへの接続方法を変更したりすることがありません。

 このアプローチで作成された関連のHelmチャートは、こちらをご覧ください。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

Sébastien Gandon(Talend)(Sébastien Gandon (Talend))

 Bouygues TelecomやCanal +などさまざまな会社で堅牢なソフトウェアの開発に関わった後、2010年にTalendに入社する。Talendでは、Talend Studioの構築、特に統合プラットフォームのコンセプト開発に貢献。現在はTalend Architecture部門の一員と...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Iosif Igna(Talend)(Iosif Igna (Talend))

 TalendのSenioe Software Architect。国際的なバックグラウンドを持ち、多様な文化のもとでソフトウェア開発と構築を経験する。2017年9月にTalendのArchitecture チームに加わり、KubernetesやHelmなどの技術の導入と実行に注力する。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11112 2018/10/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング