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
命名空间中。加载修改后的模板:$ 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
部分中的主题。从
system:authenticated:oauth
组中移除self-provisioner
集群角色。如果
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.
集群管理员可以自定义此消息。您可以对这个消息进行自定义,以提供特定于您的组织的关于如何请求新项目的信息。例如:
-
To request a project, contact your system administrator at
projectname@example.com
. -
To request a new project, fill out the project request form located at
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. # ...
- 保存更改后,请尝试用无法自助置备项目的开发人员或服务帐户创建一个新项目,以验证是否成功应用了您的更改。