×

在 AWS 上的 Red Hat OpenShift 服务中,项目用于对相关的对象进行分组和隔离。当使用 Web 控制台或oc new-project命令请求创建新项目时,AWS 上的 Red Hat OpenShift 服务中的一个端点将根据可自定义的模板来配置项目。

作为集群管理员,您可以允许和配置开发人员和服务帐户如何创建或自助配置他们自己的项目。

关于项目创建

AWS 上的 Red Hat OpenShift 服务 API 服务器会根据集群项目配置资源中由projectRequestTemplate参数标识的项目模板自动配置新项目。如果未定义该参数,则 API 服务器将创建一个默认模板,该模板将创建一个具有请求名称的项目,并将请求用户分配到该项目的admin角色。

提交项目请求时,API 会将以下参数替换到模板中

表 1. 默认项目模板参数
参数 描述

PROJECT_NAME

项目的名称。必填。

PROJECT_DISPLAYNAME

项目的显示名称。可以为空。

PROJECT_DESCRIPTION

项目的描述。可以为空。

PROJECT_ADMIN_USER

管理员用户的用户名。

PROJECT_REQUESTING_USER

请求用户的用户名。

具有self-provisioner角色和self-provisioners集群角色绑定的开发人员可以访问 API。默认情况下,所有已认证的开发人员都可以使用此角色。

修改新项目的模板

作为集群管理员,您可以修改默认项目模板,以便使用您的自定义要求创建新项目。

要创建您自己的自定义项目模板

先决条件
  • 您可以使用具有dedicated-admin权限的帐户访问 AWS 上的 Red Hat OpenShift 服务集群。

步骤
  1. 以具有cluster-admin权限的用户身份登录。

  2. 生成默认项目模板

    $ oc adm create-bootstrap-project-template -o yaml > template.yaml
  3. 使用文本编辑器修改生成的template.yaml文件,方法是添加对象或修改现有对象。

  4. 必须在openshift-config命名空间中创建项目模板。加载修改后的模板

    $ oc create -f template.yaml -n openshift-config
  5. 使用 Web 控制台或 CLI 编辑项目配置资源。

    • 使用 Web 控制台

      1. 导航到管理集群设置页面。

      2. 单击配置以查看所有配置资源。

      3. 找到项目的条目,然后单击编辑 YAML

    • 使用 CLI

      1. 编辑project.config.openshift.io/cluster资源

        $ oc edit project.config.openshift.io/cluster
  6. 更新spec部分以包含projectRequestTemplatename参数,并设置已上传项目模板的名称。默认名称为project-request

    包含自定义项目模板的项目配置资源
    apiVersion: config.openshift.io/v1
    kind: Project
    metadata:
    # ...
    spec:
      projectRequestTemplate:
        name: <template_name>
    # ...
  7. 保存更改后,创建一个新项目以验证更改是否已成功应用。

禁用项目自助配置

您可以阻止已认证的用户组自助配置新项目。

步骤
  1. 以具有cluster-admin权限的用户身份登录。

  2. 通过运行以下命令查看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部分中的主题。

  3. 从组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
  4. 编辑self-provisioners集群角色绑定以防止角色自动更新。自动更新会将集群角色重置为默认状态。

    • 要使用 CLI 更新角色绑定

      1. 运行以下命令

        $ oc edit clusterrolebinding.rbac self-provisioners
      2. 在显示的角色绑定中,将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" } } }'
  5. 以已认证的用户身份登录,并验证它是否不再能够自助配置项目。

    $ oc new-project test
    示例输出
    Error from server (Forbidden): You may not request a new project via this API.

    考虑自定义此项目请求消息,以提供更具体的、针对您组织的有用说明。

自定义项目请求消息

当无法自助配置项目的开发人员或服务帐户使用 Web 控制台或 CLI 发出项目创建请求时,默认情况下会返回以下错误消息

You may not request a new project via this API.

集群管理员可以自定义此消息。考虑对其进行更新,以提供有关如何根据您的组织请求新项目的更多说明。例如

  • 要请求项目,请联系您的系统管理员[email protected]

  • 要请求新项目,请填写位于https://internal.example.com/openshift-project-request的项目请求表单。

要自定义项目请求消息

步骤
  1. 使用 Web 控制台或 CLI 编辑项目配置资源。

    • 使用 Web 控制台

      1. 导航到管理集群设置页面。

      2. 单击配置以查看所有配置资源。

      3. 找到项目的条目,然后单击编辑 YAML

    • 使用 CLI

      1. 以具有cluster-admin权限的用户身份登录。

      2. 编辑project.config.openshift.io/cluster资源

        $ oc edit project.config.openshift.io/cluster
  2. 更新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 [email protected].
    # ...
  3. 保存更改后,尝试以无法自助配置项目的开发人员或服务帐户的身份创建新项目,以验证更改是否已成功应用。