第7章 OpenShift Ansible Broker の設定
7.1. 概要
OpenShift Ansible Broker (OAB) をクラスターにデプロイする際に、その動作の大半は、起動時に読み込まれるブローカーの設定ファイルによって決定されます。ブローカーの設定は、ブローカーの namespace (デフォルトでは (openshift-ansible-service-broker) に ConfigMap オブジェクトとして格納されます。
OpenShift Ansible Broker 設定ファイルの例
registry: 1 - type: dockerhub name: docker url: https://registry.hub.docker.com org: <dockerhub_org> fail_on_error: false - type: rhcc name: rhcc url: https://registry.access.redhat.com fail_on_error: true white_list: - "^foo.*-apb$" - ".*-apb$" black_list: - "bar.*-apb$" - "^my-apb$" - type: local_openshift name: lo namespaces: - openshift white_list: - ".*-apb$" dao: 2 etcd_host: localhost etcd_port: 2379 log: 3 logfile: /var/log/ansible-service-broker/asb.log stdout: true level: debug color: true openshift: 4 host: "" ca_file: "" bearer_token_file: "" image_pull_policy: IfNotPresent sandbox_role: "edit" keep_namespace: false keep_namespace_on_error: true broker: 5 bootstrap_on_startup: true dev_broker: true launch_apb_on_bind: false recovery: true output_request: true ssl_cert_key: /path/to/key ssl_cert: /path/to/cert refresh_interval: "600s" auth: - type: basic enabled: true secrets: 6 - title: Database credentials secret: db_creds apb_name: dh-rhscl-postgresql-apb
7.2. OpenShift Ansible Broker 設定の変更
OAB のデフォルト設定をデプロイした後に変更するには、以下を実行します。
OAB の namespace の broker-config ConfigMap オブジェクトを、cluster-admin 権限を持つユーザーとして編集します。
$ oc edit configmap broker-config -n openshift-ansible-service-broker
更新内容を保存した後、変更を有効にするために OAB のデプロイメント設定を再デプロイします。
$ oc rollout latest dc/asb -n openshift-ansible-service-broker
7.3. レジストリー設定
registry
セクションでは、ブローカーが APB 用に参照する必要があるレジストリーを定義できます。
フィールド | 説明 | 必須 |
---|---|---|
|
レジストリーの名前です。このレジストリーから APB を識別するためにブローカーによって使用されます。 |
Y |
|
レジストリーに対して認証するためのユーザー名です。 |
N |
|
レジストリーに対して認証するためのパスワードです。 |
N |
|
レジストリー認証情報が |
N |
|
読み取る必要があるレジストリー認証情報を格納しているシークレットまたはファイルの名前です。 |
N ( |
|
イメージが含まれている namespace または組織です。 |
N |
|
レジストリーのタイプです。使用可能なアダプターは |
Y |
|
|
N |
|
イメージ情報を取得するために使用される URL です。これは、RHCC の場合に広範囲に使用されます。 |
N |
|
このレジストリーが失敗した場合にブートストラップ要求を失敗させるかどうかを指定します。失敗させる場合、その他のレジストリーの読み込みの実行を停止します。 |
N |
|
許可されるイメージ名を定義するための正規表現の一覧です。カタログへの APB の追加を許可するホワイトリストを作成する必要があります。レジストリー内のすべての APB を取得する必要がある場合は、最も許容度の高い正規表現である |
N |
|
許可できないイメージ名を定義するために使用される正規表現の一覧です。詳細については、「APB のフィルタリング」を参照してください。 |
N |
|
OpenShift Container レジストリーで使用されるイメージの一覧です。 |
N |
7.3.1. 実稼働または開発
実稼働ブローカー設定は、Red Hat Container Catalog (RHCC) などの信頼できるコンテナーディストリビューションレジストリーを参照するように設計されています。
registry: - name: rhcc type: rhcc url: https://registry.access.redhat.com tag: v3.9 white_list: - ".*-apb$" - type: local_openshift name: localregistry namespaces: - openshift white_list: []
開発ブローカー設定は、主にブローカーの開発作業に取り組む開発者によって使用されます。開発者設定を有効にするには、レジストリー名を dev
に設定し、broker
セクションの dev_broker
フィールドを true
に設定します。
registry: name: dev
broker: dev_broker: true
7.3.2. レジストリー認証情報の保存
ブローカー設定は、ブローカーによるレジストリー認証情報の読み取り方法を決定します。レジストリー認証情報は、registry
セクションの user
値と pass
値から読み取ることができます。以下は例になります。
registry: - name: isv type: openshift url: https://registry.connect.redhat.com user: <user> pass: <password>
これらの認証情報にパブリックにアクセスできないようにするには、registry
セクションの auth_type
フィールドを secret
または file
タイプに設定します。secret
タイプは、ブローカーの namespace からシークレットを使用するようにレジストリーを設定します。一方、file
タイプは、ボリュームとしてマウントされているシークレットを使用するようにレジストリーを設定します。
secret
または file
タイプを使用するには、以下を実行します。
関連するシークレットには、
username
とpassword
の値が定義されている必要があります。シークレットを使用する場合は、openshift-ansible-service-broker
namespace が存在していることを確認する必要があります。シークレットはこの namespace から読み取られるためです。たとえば、reg-creds.yaml ファイルを作成します。
$ cat reg-creds.yaml --- username: <username> password: <password>
このファイルから
openshift-ansible-service-broker
namespace にシークレットを作成します。$ oc create secret generic \ registry-credentials-secret \ --from-file reg-creds.yaml \ -n openshift-ansible-service-broker
secret
またはfile
のどちらのタイプを使用するか選択します。secret
タイプを使用するには、以下を実行します。ブローカー設定で、
auth_type
をsecret
に、auth_name
をシークレットの名前に設定します。registry: - name: isv type: openshift url: https://registry.connect.redhat.com auth_type: secret auth_name: registry-credentials-secret
シークレットが置かれている namespace を設定します。
openshift: namespace: openshift-ansible-service-broker
file
タイプを使用するには、以下を実行します。asb
デプロイメント設定を編集し、ファイルを /tmp/registry-credentials/reg-creds.yaml にマウントします。$ oc edit dc/asb -n openshift-ansible-service-broker
containers.volumeMounts
セクションに、以下を追加します。volumeMounts: - mountPath: /tmp/registry-credentials name: reg-auth
volumes
セクションに、以下を追加します。volumes: - name: reg-auth secret: defaultMode: 420 secretName: registry-credentials-secret
ブローカー設定で、
auth_type
をfile
に、auth_type
をファイルの場所に設定します。registry: - name: isv type: openshift url: https://registry.connect.redhat.com auth_type: file auth_name: /tmp/registry-credentials/reg-creds.yaml
7.3.3. モックレジストリー
モックレジストリーは、ローカルの APB 仕様を読み取る場合に便利です。イメージ仕様を検索するために外部のレジストリーにアクセスする代わりに、ローカル仕様の一覧を使用します。 モックレジストリーを使用するには、レジストリーの名前を mock
に設定します。
registry: - name: mock type: mock
7.3.4. Dockerhub レジストリー
dockerhub
タイプを使用すると、DockerHub の特定の組織から APB を読み込むことができます (例: ansibleplaybookbundle)。
registry: - name: dockerhub type: dockerhub org: ansibleplaybookbundle user: <user> pass: <password> white_list: - ".*-apb$"
7.3.5. APB のフィルタリング
APB は、ブローカー設定内のレジストリーベースに設定された white_list
または black_list
パラメーターの組み合わせを使用して、イメージ名でフィルタリングできます。
これらはどちらもオプションの正規表現の一覧であり、特定のレジストリーで一致するものを判別できるように検出されたすべての APB に対して実行されます。
存在するパラメーター | 許可 | ブロック |
---|---|---|
ホワイトリストのみ |
一覧の正規表現に一致。 |
一致しないすべての APB。 |
ブラックリストのみ |
一致しないすべての APB。 |
一覧の正規表現に一致する APB。 |
両方とも存在する |
ホワイトリストの正規表現に一致し、ブラックリストの正規表現に一致しない。 |
ブラックリストの正規表現に一致する APB。 |
なし |
レジストリーのどの APB も許可されない。 |
レジストリーのすべての APB。 |
例を以下に示します。
ホワイトリストのみ
white_list: - "foo.*-apb$" - "^my-apb$"
この場合は、foo.*-apb$
と my-apb
に一致する APB が許可されます。それ以外の APB はすべて拒否されます。
ブラックリストのみ
black_list: - "bar.*-apb$" - "^foobar-apb$"
この場合は、bar.*-apb$
と foobar-apb
に一致する APB がブロックされます。それ以外の APB はすべて許可されます。
ホワイトリストとブラックリスト
white_list: - "foo.*-apb$" - "^my-apb$" black_list: - "^foo-rootkit-apb$"
ここでは、foo-rootkit-apb
はホワイトリストに一致するにもかかわらず、ブラックリストによって明確にブロックされます。これは、ホワイトリストの一致が上書きされるためです。
そうでない場合は、foo.*-apb$
と my-apb
に一致する APB のみが許可されます。
ブローカー設定の registry
セクションのサンプル:
registry: - type: dockerhub name: dockerhub url: https://registry.hub.docker.com user: <user> pass: <password> org: <org> white_list: - "foo.*-apb$" - "^my-apb$" black_list: - "bar.*-apb$" - "^foobar-apb$"
7.3.6. ローカルの OpenShift Container レジストリー
local_openshift
タイプを使用すると、OpenShift Container Platform クラスター内の OpenShift Container レジストリーから APB を読み込むことができます。公開された APB を検索する namespace を設定できます。
registry: - type: local_openshift name: lo namespaces: - openshift white_list: - ".*-apb$"
7.3.7. Red Hat Container Catalog レジストリー
rhcc
タイプを使用すると、Red Hat Container Catalog (RHCC) レジストリーに公開された APB を読み込むことができます。
registry: - name: rhcc type: rhcc url: https://registry.access.redhat.com white_list: - ".*-apb$"
7.3.8. ISV レジストリー
openshift
タイプを使用すると、 registry.connect.redhat.com にある ISV コンテナーレジストリーに公開された APB を読み込むことができます。
registry: - name: isv type: openshift user: <user> 1 pass: <password> url: https://registry.connect.redhat.com images: 2 - <image_1> - <image_2> white_list: - ".*-apb$"
- 1
- その他の認証オプションについては、「レジストリー認証情報の保存」を参照してください。
- 2
- 現時点で
openshift
タイプは設定済みのレジストリーを検索できないため、ブローカーのブートストラップ時にソースとして使用するイメージの一覧でブローカーを設定する必要があります。イメージ名は、レジストリー URL のない完全修飾名でなければなりません。
7.3.9. 複数のレジストリー
複数のレジストリーを使用して APB を論理的な組織に分割し、それらを同じブローカーから管理できます。レジスターには一意の空でない名前が必要です。一意の名前がない場合、サービスブローカーは起動に失敗し、問題について警告するエラーメッセージを表示します。
registry: - name: dockerhub type: dockerhub org: ansibleplaybookbundle user: <user> pass: <password> white_list: - ".*-apb$" - name: rhcc type: rhcc url: <rhcc_url> white_list: - ".*-apb$"
7.4. DAO 設定
フィールド | 説明 | 必須 |
---|---|---|
|
etcd ホストの URL です。 |
Y |
|
|
Y |
7.5. ログ設定
フィールド | 説明 | 必須 |
---|---|---|
|
ブローカーのログを書き込む場所です。 |
Y |
|
ログを標準出力に書き込みます。 |
Y |
|
ログ出力のレベルです。 |
Y |
|
ログに色付けします。 |
Y |
7.6. OpenShift 設定
フィールド | 説明 | 必須 |
---|---|---|
|
OpenShift Container Platform ホストです。 |
N |
|
認証局ファイルの場所です。 |
N |
|
使用するベアラートークンの場所です。 |
N |
|
イメージをプルするタイミングです。 |
Y |
|
ブローカーがデプロイされている namespace です。シークレットを介して渡されるパラメーター値などに重要です。 |
Y |
|
APB サンドボックス環境に対して指定するロールです。 |
Y |
|
APB の実行後に namespace を常に保持します。 |
N |
|
APB の実行でエラーが発生した後に namespace を保持します。 |
N |
7.7. ブローカー設定
broker
セクションでは、有効/無効にする機能をブローカーに指示します。また、完全な機能を有効にするファイルがディスク上のどこにあるかをブローカーに指示します。
フィールド | 説明 | デフォルト値 | 必須 |
---|---|---|---|
|
開発ルートにアクセスできるようにします。 |
|
N |
|
バインドが no-op (無処理) になることを許可します。 |
|
N |
|
ブローカーが起動時に自らをブートストラップできるようにします。APB を設定済みのレジストリーから取得します。 |
|
N |
|
etcd にある保留中のジョブを処理することによって、ブローカーが自らをリカバリーできるようにします。 |
|
N |
|
デバッグを容易に行えるように、ブローカーが要求の受信時にそれをログファイルに出力できるようにします。 |
|
N |
|
TLS キーファイルがどこにあるかをブローカーに指示します。これが設定されない場合、API サーバーはキーファイルの作成を試みます。 |
|
N |
|
TLS .crt ファイルがどこにあるかをブローカーに指示します。これが設定されない場合、API サーバーはファイルの作成を試みます。 |
|
N |
|
レジストリーで新規イメージ仕様をクエリーする間隔です。 |
|
N |
|
ブローカーが APB の実行中にユーザーのパーミッションをエスカレーションできるようにします。 |
|
N |
|
ブローカーが予期する URL のプレフィックスを設定します。 |
|
N |
非同期のバインドまたはバインド解除は実験的な機能であり、サポートされていないか、デフォルトでは有効になっていません。非同期バインドがない場合に launch_apb_on_bind
を true
に設定すると、バインドアクションがタイムアウトになり、再試行が実行されます。これはパラメーターの異なる同じバインド要求であるため、ブローカーは「409 Conflicts」で処理します。
7.8. シークレット設定
secrets
セクションでは、ブローカーの namespace のシークレットとブローカーが実行する APB 間の関連付けを作成します。ブローカーは、これらのルールに従って実行中の APB にシークレットをマウントします。これにより、ユーザーはシークレットを使用して、パラメーターをカタログやユーザーに公開せずに渡すことができます。
このセクションは一覧の形式であり、各エントリーは以下の構造を持ちます。
フィールド | 説明 | 必須 |
---|---|---|
|
ルールのタイトルです。表示と出力の目的でのみ使用されます。 |
Y |
|
指定されたシークレットに関連付けられる APB の名前です。これは完全修飾名 ( |
Y |
|
パラメーターをプルするシークレットの名前です。 |
Y |
create_broker_secret.py ファイルをダウンロードし、これを使用して、この設定セクションの作成とフォーマットを行うことができます。
secrets: - title: Database credentials secret: db_creds apb_name: dh-rhscl-postgresql-apb
7.9. プロキシー環境での実行
プロキシー化された OpenShift Container Platform クラスター内で OAB を実行する場合は、その中心的な概念を理解し、外部ネットワークアクセスに使用するプロキシーのコンテキストで検討することが重要です。
概要としては、ブローカー自体はクラスター内で Pod として実行され、そのレジスターの設定方法に応じて外部ネットワークにアクセスする必要があります。
7.9.1. レジストリーアダプターのホワイトリスト
ブローカーの設定済みレジストリーアダプターは、正常にブートストラップしてリモートの APB マニフェストを読み込むために、外部レジスターと通信できなければなりません。これらの要求はプロキシー経由で実行できますが、プロキシーでは必要なリモートホストにアクセスできるようにする必要があります。
必要なホワイトリスト化されたホストの例:
レジストリーアダプターのタイプ | ホワイトリスト化されたホスト |
---|---|
|
|
|
|
7.9.2. Ansible を使用したプロキシー環境でのブローカーの設定
初期インストール時に OpenShift Container Platform クラスターがプロキシーの環境下で実行されるように設定した場合 (「グローバルプロキシーオプションの設定」を参照)、OAB はデプロイ時に以下を実行します。
- クラスター全体のプロキシー設定を自動的に継承する
-
cidr
フィールドおよびserviceNetworkCIDR
を含む必要なNO_PROXY
一覧を生成する
それ以外の設定は必要ありません。
7.9.3. プロキシー環境でのブローカーの手動設定
クラスターのグローバルプロキシーオプションが初期インストール時またはブローカーのデプロイ前に設定されていない場合や、グローバルプロキシー設定を変更した場合、ブローカーの外部アクセスについてプロキシー経由で手動で設定する必要があります。
OAB をプロキシー環境で実行する前に「HTTP プロキシーの使用」を確認し、クラスターがプロキシー環境で実行されるように適切に設定されていることを確認してください。
とくに、クラスターは内部クラスター要求をプロキシー処理しないように設定されている必要があります。通常、これは以下の
NO_PROXY
設定を使用して設定されます。.cluster.local,.svc,<serviceNetworkCIDR_value>,<master_IP>,<master_domain>,.default
その他の必要な
NO_PROXY
設定も追加する必要があります。詳細については、「NO_PROXY の設定」を参照してください。注記バージョンなしまたは v1 の APB をデプロイするブローカーは、
172.30.0.1
もNO_PROXY
の一覧に追加する必要があります。v2 より前の APB は、シークレットの交換ではなく、exec
HTTP 要求を使用して実行中の APB Pod から認証情報を抽出しました。実験的なプロキシーサポートがあるブローカーを OpenShift Container Platform 3.9 より前のクラスターで実行していない限り、この点を心配する必要はおそらくありません。ブローカーの
DeploymentConfig
を cluster-admin 権限を持つユーザーとして編集します。$ oc edit dc/asb -n openshift-ansible-service-broker
以下の環境変数を設定します。
-
HTTP_PROXY
-
HTTPS_PROXY
-
NO_PROXY
注記詳細については、「Pod でのプロキシー環境変数の設定」を参照してください。
-
更新内容を保存した後、変更を有効にするために OAB のデプロイメント設定を再デプロイします。
$ oc rollout latest dc/asb -n openshift-ansible-service-broker
7.9.4. Pod でのプロキシー環境変数の設定
一般に、APB Pod 自体もプロキシー経由の外部アクセスを必要とします。ブローカーは、自らにプロキシー設定があることを認識すると、生成する APB Pod にこれらの環境変数を透過的に適用します。APB 内で使用されるモジュールが環境変数経由でプロキシー設定に従う限り、APB もこれらの設定に基づいて動作します。
最後に、APB によって生成されたサービスもプロキシー経由の外部ネットワークアクセスを必要とする場合があります。APB は、それ自体の実行環境でこのようなサービスを検出した場合にこれらの環境変数を明示的に設定するように作成されている必要があります。そうでない場合には、クラスターオペレーターが必要なサービスを変更してそれらを環境に組み込む必要があります。