SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

マイクロサービスアーキテクチャが支えるOpenStackの動作と仕組み

Keystoneの動作と仕組み~エンドポイントと認証認可

マイクロサービスアーキテクチャが支えるOpenStackの動作と仕組み 第1回


Keystoneとは

Keystoneは、OpenStackのエンドポイント管理および認証を司るサービスです。OpenStackを利用するのであれば、大体の場合keyStoneを使うことになります。

OpenStackを利用するソフトウェアは、「どこにアクセスすればサービスを利用できるのか」をKeystoneに問い合わせて知ります。このアクセスポイントの情報をエンドポイントと呼びます。OpenStackのサービスはそれぞれにエンドポイントを持ちます。しかし、OpenStackで作られたクラウドサービスのどこがエンドポイントなのかは、Keystoneだけが知っています

OpenStackの全てのサービスは、ユーザーからのリクエストを受け取ると、そのリクエストに返答すべきか否かをKeystoneに問い合わせます。Keystoneは要求に従い、認証するか否かの情報と認可に使う情報を、問い合わせてきた各サービスに返答します。

本稿ではKeystoneの次の3要素について、OpenStackがMSAであることで生まれる利点や考慮すべき点について確認していきます。

  • エンドポイントの管理
  • 認証
  • 認可

エンドポイントの管理

Keystoneによるエンドポイント提供の手順

OpenStackで作ったクラウドの管理者は、Keystoneに各サービスのエンドポイントの情報を登録します。登録するのは次の情報です。

  • サービスの名前
  • サービスの役割
  • サービスにアクセスするためのURL
  • サービスの所属するリージョン

リージョンとは、クラウドで使っているサーバーの物理的な所在地です。複数の場所に置かれたサーバーを用いて1つのクラウドサービスを構築している場合、複数のリージョンに同じサービスがあることが考えられます。例えば、東京本社と福岡支社にクラウドサービスのためのサーバーがある場合、「東京リージョン」と「福岡リージョン」とに分けることになります。

Keystoneは各クライアントの要求に応じ、エンドポイントの情報を認証情報とともにクライアントに送信します。

また、サービスが変化した場合は、その変化に合わせてKeystoneに登録された情報を更新します。

エンドポイントを書きかえることでMSA特有の頻繁な変化に対応

MSAは各々のサービスを変化させやすいのが大きな利点です。サービスを移動させたり、新しいサービスを追加したりすることが容易です。しかし、その変更をどのようにして他サービスやクライアントに通知すればよいでしょうか。

Keystoneは、サービスが追加されたら、そのサービスのエンドポイントをKeystoneが管理するエンドポイントリストに追加します。逆に、サービスが削除されたら、そのサービスのエンドポイントをエンドポイントリストから取り除きます。こうしてKeystoneはサービスの増減に対応し、次回の認証を機会としてユーザーに変更されたエンドポイントの情報が伝えられます。

万が一、各サービスが提供するエンドポイントがバージョンアップなどで変化したとしても、Keystoneが管理しているエンドポイントを書き換えれば、ユーザーには次の認証の際に知らされます。あるいは、利用可能なバージョンのエンドポイントを複数個併記しておくことで、古いバージョンを使っているユーザーは「今使っているバージョンも利用できるが、いずれは新しいものに移行しなければならない」ことを認識できます。

また、サービスが移動してURLが変わったとしても、Keystoneに登録されたエンドポイントの情報を更新するだけで、他のサービスはサービスの移動先を把握できます。

エンドポイントは1か所で管理する
エンドポイントは1か所で管理する

Keystoneは他のサービスのエンドポイントを1か所で管理し、エンドポイントの情報を認証の際に共有します。この設計はMSAの柔軟さを活かし、サービスの変化・拡大を鈍化させないための方法として有力な方法といえるでしょう。

Keystoneがエンドポイントについて扱う情報

Keystoneにエンドポイントの情報を要求した場合、次のような返り値が得られます。エンドポイントに関して実際に実装する際に参考にしてみてください。

Keystoneにエンドポイントの情報を要求した場合の返り値
{
    "endpoints": [
        {
            "adminURL": "http://nova.privatenetwork.exampla.com:8774/v2/c7e5e14e38e9438da15ea276c1a04798",
            "id": "411289be7d7e44e3aaec71666cadea0e",
            "internalURL": "http://nova.servicenetwork.exampla.com:8774/v2/c7e5e14e38e9438da15ea276c1a04798",
            "publicURL": "http://nova.publicnetwork.exampla.com:8774/v2/c7e5e14e38e9438da15ea276c1a04798",
            "region": "SampleRegion"
        }
    ],
    "endpoints_links": [],
    "name": "nova",
    "type": "compute"
}
返り値の各項目の意味
項目 説明
endpoints エンドポイントのURL。endpointではなくendpoint”s”なのは、単一のOpenStackで作られたクラウドコンピューティングサービスに複数の同じサービスが存在する場合、エンドポイントも複数個あるため
region そのエンドポイントを持つサービスが存在するリージョン
id そのサービスのID
adminURL 管理用のエンドポイント。サービスを管理するために用いられる一部の操作はこのエンドポイントからしかアクセスを認められない
internalURL 各サービスが互いに通信するために用いるエンドポイント
publicURL クラウドサービスを利用するユーザーがアクセスするために用いるエンドポイント
endpoints_links エンドポイントの一覧を取得しきれなかった場合、残りを取得するためのアクセスポイントが記述される
name サービスの名前。novaやneutronといった名前が入る
type どのようなサービスであるかを示す。novaであればcomputeといった具合

また、Keystoneの持つデータベースにはエンドポイントについて次のような情報が格納されています。

Keystoneのデータベースに格納されているエンドポイントについての情報
項目 説明
id エンドポイントを一意に識別するID
interface エンドポイントがadminURLなのかinternalURLなのかpublicURLなのかを示す
service_id エンドポイントでアクセスできるサービスの指定
url エンドポイントのURL
enabled エンドポイントの有効・無効を示す
region_id 所属するリージョンを示す

次のページ
認証

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

マイクロサービスアーキテクチャが支えるOpenStackの動作と仕組み連載記事一覧

もっと読む

この記事の著者

大嶋 俊祐(株式会社ワークスアプリケーションズ)(オオシマ シュンスケ)

株式会社ワークスアプリケーションズ所属。 社内では技術研修を担当しながら、OpenStackを使ってプライベートクラウドを作っています。 自分が運営する研修を自分が作ったプライベートクラウドを使って運営するのがマイブーム。 あだ名はひよこ。TRPGが趣味なのでどなたかお誘いください。

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9636 2021/03/25 21:17

イベント

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

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

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

メールバックナンバー