2.3. プロジェクト作成の設定
OpenShift Container Platform では、プロジェクト は関連するオブジェクトをグループ分けし、分離するために使用されます。Web コンソールまたは oc new-project
コマンドを使用して新規プロジェクトの作成要求が実行されると、OpenShift Container Platform のエンドポイントは、カスタマイズ可能なテンプレートに応じてプロジェクトをプロビジョニングするために使用されます。
クラスター管理者は、開発者やサービスアカウントが独自のプロジェクトを作成し、プロジェクトの セルフプロビジョニング を実行することを許可し、その方法を設定できます。
2.3.1. プロジェクト作成について
OpenShift Container Platform API サーバーは、クラスターのプロジェクト設定リソースの projectRequestTemplate
パラメーターで識別されるプロジェクトテンプレートに基づいて新規プロジェクトを自動的にプロビジョニングします。パラメーターが定義されない場合、API サーバーは要求される名前でプロジェクトを作成するデフォルトテンプレートを作成し、要求するユーザーをプロジェクトの admin
(管理者) ロールに割り当てます。
プロジェクト要求が送信されると、API はテンプレートで以下のパラメーターを置き換えます。
パラメーター | 説明 |
---|---|
| プロジェクトの名前。必須。 |
| プロジェクトの表示名。空にできます。 |
| プロジェクトの説明。空にできます。 |
| 管理ユーザーのユーザー名。 |
| 要求するユーザーのユーザー名。 |
API へのアクセスは、self-provisioner
ロールと self-provisioners
のクラスターロールバインディングで開発者に付与されます。デフォルトで、このロールはすべての認証された開発者が利用できます。
2.3.2. 新規プロジェクトのテンプレートの変更
クラスター管理者は、デフォルトのプロジェクトテンプレートを変更し、新規プロジェクトをカスタム要件に基づいて作成することができます。
独自のカスタムプロジェクトテンプレートを作成するには、以下を実行します。
手順
-
cluster-admin
権限を持つユーザーとしてログインしている。 デフォルトのプロジェクトテンプレートを生成します。
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
-
オブジェクトを追加するか、既存オブジェクトを変更することにより、テキストエディターで生成される
template.yaml
ファイルを変更します。 プロジェクトテンプレートは、
openshift-config
namespace に作成される必要があります。変更したテンプレートを読み込みます。$ oc create -f template.yaml -n openshift-config
Web コンソールまたは CLI を使用し、プロジェクト設定リソースを編集します。
Web コンソールの使用
-
Administration
Cluster Settings ページに移動します。 - Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
-
Administration
CLI の使用
project.config.openshift.io/cluster
リソースを編集します。$ oc edit project.config.openshift.io/cluster
spec
セクションを、projectRequestTemplate
およびname
パラメーターを組み込むように更新し、アップロードされたプロジェクトテンプレートの名前を設定します。デフォルト名はproject-request
です。カスタムプロジェクトテンプレートを含むプロジェクト設定リソース
apiVersion: config.openshift.io/v1 kind: Project metadata: ... spec: projectRequestTemplate: name: <template_name>
- 変更を保存した後、変更が正常に適用されたことを確認するために、新しいプロジェクトを作成します。
2.3.3. プロジェクトのセルフプロビジョニングの無効化
認証されたユーザーグループによる新規プロジェクトのセルフプロビジョニングを禁止することができます。
手順
-
cluster-admin
権限を持つユーザーとしてログインしている。 以下のコマンドを実行して、
self-provisioners
クラスターロールバインディングの使用を確認します。$ oc describe clusterrolebinding.rbac self-provisioners
出力例
Name: self-provisioners Labels: <none> Annotations: rbac.authorization.kubernetes.io/autoupdate=true Role: Kind: ClusterRole Name: self-provisioner Subjects: Kind Name Namespace ---- ---- --------- Group system:authenticated:oauth
self-provisioners
セクションのサブジェクトを確認します。self-provisioner
クラスターロールをグループsystem:authenticated:oauth
から削除します。self-provisioners
クラスターロールバインディングがself-provisioner
ロールのみをsystem:authenticated:oauth
グループにバインドする場合、以下のコマンドを実行します。$ oc patch clusterrolebinding.rbac self-provisioners -p '{"subjects": null}'
self-provisioners
クラスターロールバインディングがself-provisioner
ロールをsystem:authenticated:oauth
グループ以外のユーザー、グループまたはサービスアカウントにバインドする場合、以下のコマンドを実行します。$ oc adm policy \ remove-cluster-role-from-group self-provisioner \ system:authenticated:oauth
ロールへの自動更新を防ぐには、
self-provisioners
クラスターロールバインディングを編集します。自動更新により、クラスターロールがデフォルトの状態にリセットされます。CLI を使用してロールバインディングを更新するには、以下を実行します。
以下のコマンドを実行します。
$ oc edit clusterrolebinding.rbac self-provisioners
表示されるロールバインディングで、以下の例のように
rbac.authorization.kubernetes.io/autoupdate
パラメーター値をfalse
に設定します。apiVersion: authorization.openshift.io/v1 kind: ClusterRoleBinding metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "false" ...
単一コマンドを使用してロールバインディングを更新するには、以下を実行します。
$ oc patch clusterrolebinding.rbac self-provisioners -p '{ "metadata": { "annotations": { "rbac.authorization.kubernetes.io/autoupdate": "false" } } }'
認証されたユーザーとしてログインし、プロジェクトのセルフプロビジョニングを実行できないことを確認します。
$ oc new-project test
出力例
Error from server (Forbidden): You may not request a new project via this API.
組織に固有のより有用な説明を提供できるようこのプロジェクト要求メッセージをカスタマイズすることを検討します。
2.3.4. プロジェクト要求メッセージのカスタマイズ
プロジェクトのセルフプロビジョニングを実行できない開発者またはサービスアカウントが Web コンソールまたは CLI を使用してプロジェクト作成要求を行う場合、以下のエラーメッセージがデフォルトで返されます。
You may not request a new project via this API.
クラスター管理者はこのメッセージをカスタマイズできます。これを、組織に固有の新規プロジェクトの要求方法の情報を含むように更新することを検討します。以下に例を示します。
-
プロジェクトを要求するには、システム管理者 (
projectname@example.com
) に問い合わせてください。 -
新規プロジェクトを要求するには、
https://internal.example.com/openshift-project-request
にあるプロジェクト要求フォームに記入します。
プロジェクト要求メッセージをカスタマイズするには、以下を実行します。
手順
Web コンソールまたは CLI を使用し、プロジェクト設定リソースを編集します。
Web コンソールの使用
-
Administration
Cluster Settings ページに移動します。 - Configuration をクリックし、すべての設定リソースを表示します。
- Project のエントリーを見つけ、Edit YAML をクリックします。
-
Administration
CLI の使用
-
cluster-admin
権限を持つユーザーとしてログインしている。 project.config.openshift.io/cluster
リソースを編集します。$ oc edit project.config.openshift.io/cluster
-
spec
セクションを、projectRequestMessage
パラメーターを含むように更新し、値をカスタムメッセージに設定します。カスタムプロジェクト要求メッセージを含むプロジェクト設定リソース
apiVersion: config.openshift.io/v1 kind: Project metadata: ... spec: projectRequestMessage: <message_string>
以下に例を示します。
apiVersion: config.openshift.io/v1 kind: Project metadata: ... spec: projectRequestMessage: To request a project, contact your system administrator at projectname@example.com.
- 変更を保存した後に、プロジェクトをセルフプロビジョニングできない開発者またはサービスアカウントとして新規プロジェクトの作成を試行し、変更が正常に適用されていることを確認します。