web-dev-qa-db-ja.com

keystone OpenStackのエンドポイント、リージョンなどの間の関係

私は、エンドポイント、リージョン、テナント、サービス、ユーザー、およびロール間の関係に関して、キーストーンの内部を本当に理解しようとしています。関連するドキュメントを見つけようとしましたが、残念ながら失敗しました。

誰かが何か指針や説明を与えることができますか?

21
jaeyong

Keystoneは、OpenStackのID管理サービスです。

基本的に、その役割は、ユーザー、サービス、またはその他すべてのユーザーにトークンを付与することです。

OpenStackのどこかでAPIクエリを作成する場合、keystoneのAPIは、そのAPIクエリの作成が許可されている場合に検出される方法です。

地面から上に向かって作業しましょう。

ユーザー。今日のKeystoneのユーザーは一般的に人です。現時点では、OpenStackの多くのユーザーを従来の意味で「サービス」アカウントと呼ぶには、きめ細かいACLサポートが十分ではありません。ただし、OpenStackインフラストラクチャ自体の一部としてKeystoneAPIへのバックホール接続として使用されるサービスアカウントがあります。その異常なユーザーを掘り下げることは避けます。

ユーザーがKeystoneに対して認証を行うと(OS_AUTH_URLを押してkeystoneと通信します。通常はkeystone apiボックスのポート5000)、ユーザーは「私はユーザーX、パスワードYを持っており、テナントZに属しています」と言います。 。

Xはユーザー名またはユーザーID(ユーザーの一意のuuid)にすることができます。Yはパスワードですが、トークンを使用して認証することもできます。 Zは、テナント名またはテナントID(テナントの一意のuuid)です。以前のKeystoneAPIでは、テナント名を指定する必要はありませんでしたが、トークンがテナントに関連付けられず、その上でACLが拒否されるため、指定しなかった場合、トークンはあまり役に立ちませんでした。テナント。

だから...ユーザーはかなり明白なことです。パスワードはかなり明白なものです。しかし、テナントとは何ですか?

さて、テナントはプロジェクトとしても知られています。実際、名前をテナントまたはプロジェクトにする試みが何度も繰り返されていますが、1つの用語に固執できないため、どちらも同じ意味です。 APIに関する限り、プロジェクトISテナント。したがって、ホライズンにログインすると、プロジェクトのドロップダウンが表示されます。各プロジェクトはテナントIDに対応します。トークンは関連付けられています。特定のテナントIDも使用するため、ユーザーが接続している複数のテナントで作業する場合は、ユーザーに複数のトークンが必要になる場合があります。

ここで、adminのテナントIDにユーザーを追加するとします。そのユーザーは管理者権限を取得しますか?答えはノーです。そこで役割が出てきます。管理テナントのユーザーは、管理仮想マシンと仮想マシンを起動するためのクォータにアクセスできる場合がありますが、そのユーザーは、ユーザーリストのキーストーンのクエリなどを実行できません。ただし、そのユーザーに管理者ロールを追加すると、KeystoneAPIやその他のAPIで管理者として機能するACL権限がユーザーに付与されます。したがって、テナントを一種のリソースグループ、ロールをACLセットと考えてください。

リージョンは、OpenStackインフラストラクチャ環境で物理リソースを地理的にグループ化する方法に似ています。セグメント化されたデータセンターが2つあるとします。 1つをopenstack環境のリージョンAに配置し、もう1つをリージョンBに配置することができます。特に最近のopenstackリリースでセルとドメインが導入されたことで、その有用性の点でリージョンは急速に進化しています。大きな雲を設計するつもりがない限り、おそらくこの知識のマスターである必要はありません。

keystoneは最後の便利なものを提供します。カタログ。キーストーンカタログは、openstackAPIの電話帳のようなものです。 nova listを呼び出してインスタンスを一覧表示する場合など、コマンドラインクライアントを使用するときは常に、novaは最初にkeystoneに対して認証し、APIを使用するためのトークンを取得しますが、すぐにkeystoneカタログにAPIエンドポイントの一覧を要求します。 keystone、cinder、nova、glance、Swiftなどの場合、novaは実際にはnova-apiエンドポイントのみを使用しますが、クエリによっては、keystone管理APIエンドポイントを使用する場合があります。 。しかし本質的に、カタログはAPIが世界のどこにあるかについての標準的な情報源です。そうすれば、keystoneのパブリックAPIエンドポイントがどこにあるかをクライアントに伝えるだけで済み、残りはカタログから把握できます。

ここで、パブリックAPIとkeystoneの管理APIを参照しました。

うんkeystoneには2つのAPIがあります...ある種。ポート5000でAPIを実行し、32000の範囲で別のAPIを実行します。 5000はパブリックポートです。ここで、カタログを検索したり、他のAPIと通信できるようにトークンを要求したりします。とてもシンプルで、やや固めです。管理APIは、ユーザーのパスワードを変更したり、ユーザーに新しい役割を追加したりするために使用されます。

かなり簡単ですか?

36
Matt Joyce

返信が遅れましたが、将来の読者の役に立つことを願っています。

エンドポイントは、サービスを使用するための連絡先のようなものです。名前が示すように、adminurlは管理者ユーザー専用です。内部URLは、さまざまなサービスが相互に通信するためのものであり、パブリックURLは、他のユーザーが使用するためのものです。

なぜ個別のパブリックURLと内部URLが必要なのかが説明されています ここ

サービスエンドポイントにロールを割り当てる必要はありません。サービスにアクセスするユーザーにロールを割り当てます。 this がその方法です。

4
Akilesh

This は、openstack keystoneのテナント、ユーザー、ロール、パーミッションを理解するための私の方法です。あなたもそれが面白いと思うかもしれません。

3

私はこれを素人の言葉で表現しようと思います。

サービス-Openstackは、クラウドインフラストラクチャ(コンピューティング、ストレージ、ネットワーク)を稼働させるために、多数のサービスを必要とします。それらをスムーズに同時に有効にして、きめ細かい制御を可能にするために、Openstackはサービスの概念を使用します。サービスにより、エンドユーザーはこれら3つのコアリソースのいずれかを操作できます。例:ストレージの場合、cinderおよびSwiftサービスが使用されます。これらのサービスは、バックエンドでCephまたはglusterを使用するようにさらに構成できます。

エンドポイント-openstackサービスに「入り」、有用または破壊的なことを行うポイント。サービスが実行されている可能性がありますが、「入る」には、次のようなエンドポイントが必要です http:// my-fancy-IP:hard-to-remember-port-number/v3. 。では、特定のopenstackサービス用にOpenstackシステムでエンドポイントが作成されていませんか?そのサービスにアクセスできません。

地域-地理や場所とは何の関係もありません。完全なopenstackデプロイメントが多数ある場合に、それらを分割/グループ化するために使用される用語。分割は、物理サーバーの場所に基づく場合があります。

ユーザー-エンドユーザーまたはあなた。

プロジェクト/テナント-リソース(コンピューティング、ストレージネットワーク)を分離するためのコンテナー

ドメイン-プロジェクト、グループ、およびユーザーのグループ。ユーザーにリソースの分離を提供し、複数のプロジェクトに対応できます。ドメイン管理者の役割を持つユーザーは、その特定のドメイン内のプロジェクト、ユーザー、グループなどを作成/削除/更新できます。

役割-openstackサービスで任意の操作を実行するためのユーザーの権利。役割について考え、ユーザーについて考えてください。

トークン-キーストーンから提供されるID(長い文字列)です。このトークンを使用して割り当てられたロールに応じて、任意のopenstackサービスにアクセスできます。

たとえば、novaをリクエストして、keystoneからtoken1を取得したと言うことができます。 'do n't-ever-delete-me-ever'サーバーを削除したい。 Novaはtoken1を受け取り、「キーストーンねえ、このユーザーはtoken1を持っていて、サーバーを削除したい」と言います。Keystoneは、token1を調べ、ユーザーに割り当てられたロールに従って、次のように言います。 ok nova allow/do n't allow user to delete'don't-ever-delete-me-ever'server。

3
pumpkin_cat