Menu Close
8.2. サービスディスカバリーを有効にするための OpenShift 設定
3scale の管理者は、Open Authorization (OAuth) サーバーの使用/不使用とは独立に、サービスディスカバリーを設定することができます。
OAuth サーバーと共に 3scale サービスディスカバリーを設定する場合、ユーザーが 3scale にサインインした際のフローは以下のとおりです。
- ユーザーが OAuth サーバーにリダイレクトされる。
- ユーザーがまだ OAuth サーバーにログインしていなければ、ログインを求められる。
- ユーザーが 3scale のサービスディスカバリーと SSO の組み合わせを初めて実装する場合には、OAuth サーバーは必要なアクションを実行するために承認を要求する。
- ユーザーが再度 3scale にリダイレクトされる。
OAuth サーバー と組み合わせてサービスディスカバリーを設定する場合には、以下のオプションがあります。
OAuth サーバーと組み合わせずにサービスディスカバリーを設定する 場合、ユーザーが 3scale にサインインしてもリダイレクトされません。その代わりに、サービスディスカバリーのために、3scale Single Service Account がクラスターに対してシームレスに認証を行います。3scale を通じて API サービスを検出する間、すべての 3scale テナント管理ユーザーはクラスターに対して同じアクセスレベルを持ちます。
8.2.1. OpenShift OAuth サーバーと組み合わせたサービスディスカバリーの設定
3scale のシステム管理者は、ユーザーが OpenShift の組み込み OAuth サーバーを使用して、個別に認証、3scale を承認して API を検出するのを許可することができます。
前提条件
- OpenShift クラスター (バージョン 3.11 以降) に 3scale 2.8 をデプロイしている必要があります。
- 3scale を OpenShift にデプロイするには、3scale-amp-openshift-templates を使用する必要があります。
- 3scale でサービスディスカバリーを使用する 3scale ユーザーは、OpenShift クラスターにアクセスできる必要があります。
手順
3scale 用の OpenShift OAuth クライアントを作成します。詳細は、OpenShift の認証に関するドキュメント を参照してください。以下の例で、
<provide-a-client-secret>
を生成するシークレットに、<3scale-master-domain-route>
を 3scale マスター管理ポータルにアクセスするための URL に、それぞれ置き換えます。$ oc project default $ cat <<-EOF | oc create -f - kind: OAuthClient apiVersion: v1 metadata: name: 3scale secret: "<provide-a-client-secret>" redirectURIs: - "<3scale-master-domain-route>" grantMethod: prompt EOF
3scale サービスディスカバリーの設定ファイルを開きます。
$ oc project <3scale-project> $ oc edit configmap system
以下のように設定します。
service_discovery.yml: production: enabled: true authentication_method: oauth oauth_server_type: builtin client_id: '3scale' client_secret: '<choose-a-client-secret>'
ユーザーが適切なアクセス権限を持ち、検出可能なサービスが含まれるクラスタープロジェクトを表示できるようにしてください。
<user> で表される管理ユーザーに、検出されるサービスが含まれる <namespace> プロジェクトを表示する権限を付与するには、以下のコマンドを使用します。
oc adm policy add-role-to-user view <user> -n <namespace>
configmap
を変更したら、system-app
およびsystem-sidekiq
Pod を再デプロイし、変更を適用する必要があります。oc rollout latest dc/system-app oc rollout latest dc/system-sidekiq
ロールアウトのステータスをチェックし、完了したことを確認します。
oc rollout status dc/system-app oc rollout status dc/system-sidekiq
補足説明
OpenShift OAuth トークンについての詳細は、『認証』の「内部 OAuth サーバーの設定」を参照してください。
8.2.2. RH-SSO サーバー (Keycloak) と組み合わせたサービスディスカバリーの設定
システム管理者は、ユーザーが OpenShift 向け Red Hat Single Sign-On を使用して、個別に認証、3scale を承認してサービスを検出するのを許可することができます。
OpenShift の承認ゲートウェイとして RH-SSO デプロイメントを使用する OpenShift の設定例については、この ワークフロー を参照してください
前提条件
- OpenShift クラスター (バージョン 3.11 以降) に 3scale 2.8 をデプロイしている必要があります。
- 3scale を OpenShift にデプロイするには、3scale-amp-openshift-templates を使用する必要があります。
- 3scale でサービスディスカバリーを使用する 3scale ユーザーは、OpenShift クラスターにアクセスできる必要があります。
手順
Red Hat OAuth サーバー (Keycloak) に、3scale 用の OAuth クライアントを作成します。
注記クライアント設定で、OpenShift がアカウントをリンクすることができるように、
username
がpreferred_username
にマッピングされていることを確認します。3scale サービスディスカバリーの設定を編集します。
$ oc project <3scale-project> $ oc edit configmap system
以下のように設定されていることを確認します。ここで、
<the-client-secret-from-Keycloak>
は、OAuth クライアントの作成時に Keycloak が自動生成した値です。service_discovery.yml: production: enabled: true authentication_method: oauth oauth_server_type: rh_sso client_id: '3scale' client_secret: '<the-client-secret-from-Keycloak>'
ユーザーが適切なアクセス権限を持ち、検出可能なサービスが含まれるクラスタープロジェクトを表示できるようにしてください。
たとえば、
<user>
に<namespace>
プロジェクトを表示する権限を付与するには、以下のコマンドを使用します。oc adm policy add-role-to-user view <user> -n <namespace>
-
configmap
を変更したら、system-app
およびsystem-sidekiq
Pod を再デプロイし、変更を適用する必要があります。
補足説明:
- トークンの有効期限:『Keycloak Server Administration Guide』の「Session and Token Timeouts」に記載されるように、デフォルトではセッショントークンの有効期限は 1 分です。ただし、タイムアウトを妥当な値 (たとえば 1 日) に設定することを推奨します。
8.2.3. OAuth サーバーと組み合わせないサービスディスカバリーの設定
OAuth サーバーを使用しない状況で 3scale のサービスディスカバリーを設定する場合には、3scale Single Service Account を使用して OpenShift API サービスに対する認証を行うことができます。
前提条件
- OpenShift クラスター (バージョン 3.11 以降) に 3scale 2.8 をデプロイしている必要があります。
- 3scale を OpenShift にデプロイするには、3scale-amp-openshift-templates を使用する必要があります。
- 3scale でサービスディスカバリーを使用する 3scale ユーザーは、OpenShift クラスターにアクセスできる必要があります。
手順
3scale プロジェクトをアクティブなプロジェクトにします。
$ oc project <3scale-project>
エディターで 3scale サービスディスカバリーの設定を開きます。
$ oc edit configmap system
以下のように設定されていることを確認します。
service_discovery.yml: production: enabled: <%= cluster_token_file_exists = File.exists?(cluster_token_file_path = '/var/run/secrets/kubernetes.io/serviceaccount/token') %> bearer_token: "<%= File.read(cluster_token_file_path) if cluster_token_file_exists %>" authentication_method: service_account
以下のいずれかのオプションに従って、3scale デプロイメントの
amp
サービスアカウントに、検出可能なサービスが含まれるプロジェクトを表示するための適切な権限を付与します。3scale デプロイメントの
amp
サービスアカウントに、クラスターレベルの表示
権限を付与する。oc adm policy add-cluster-role-to-user view system:serviceaccount:<3scale-project>:amp
- 『Developer Guide』の「Service Accounts」で説明するように、より厳しいポリシーを適用する。