美文网首页Openshift:可靠的Kubernetes发行版
Openshift管理project【译自官方文档】

Openshift管理project【译自官方文档】

作者: 潘晓华Michael | 来源:发表于2019-01-15 23:02 被阅读38次
    一个关于K8S的故事

    概述

    在OpenShift容器平台中,项目用于对相关对象进行分组和隔离。作为管理员,您可以授予开发人员对某些项目的访问权限,允许他们创建自己的项目,并授予他们在各个项目中的管理权限。

    创建一个新的Project

    可以允许开发人员创建自己的项目。开发人员可以通过web控制台或者oc new-project命令来创建新的project。

    $ oc new-project test-project
    

    预定义project

    API服务器根据master-config.yaml文件的projectRequestTemplate参数标识的模板自动配置新的项目。如果未定义该参数,API服务器将创建一个默认模板,该模板使用请求的名称创建一个项目,并赋予创建该项目的用户该项目的“admin”角色。

    如何创建自定义的project模板呢?
    1. 导出当前默认的模板
    $ oc adm create-bootstrap-project-template -o yaml > template.yaml
    
    1. 使用文本编辑工具编辑template.yaml文件,对默认的配置进行更新
    2. 导入更改后的模板
    $ oc create -f template.yaml -n default
    
    1. 修改master-config.yaml文件的projectRequestTemplate参数,指向新建的模板
    ...
    projectConfig:
      projectRequestTemplate: "default/project-request"
      ...
    

    在更改模板文件时,可以使用如下变量

    参数 说明
    PROJECT_NAME project名字,必填
    PROJECT_DISPLAYNAME project显示的名字,可以为空
    PROJECT_DESCRIPTION project说明, 可以为空
    PROJECT_ADMIN_USER 管理用户的用户名
    PROJECT_REQUESTING_USER 请求的用户的用户名

    说明:要想调用创建新项目的api,请求的用户必须具有 self-provisioners 权限,默认情况下,所有通过认证的用户都具有该权限。

    如何禁用自定义模板?

    通过设置,也可以阻止通过认证的用户组使用自定义模板创建新项目。

    1. 用具有"cluster-admin"权限的用户登录
    2. 查看self-provisioners权限的clusterrolebinding使用情况
    $ 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
    
    1. 从system:authenticated:oauth组中删除self-provisioner权限
      • 如果self-provisioners权限只绑定到了system:authenticated:oauth用户组,则运行下面的命令
        $ oc patch clusterrolebinding.rbac self-provisioners -p '{"subjects": null}'
        
      • 如果self-provisioners权限不仅绑定到了system:authenticated:oauth用户组,还绑定到了users,groups或者serviceaccounts ,则运行下面的命令
        $ oc adm policy remove-cluster-role-from-group self-provisioner system:authenticated:oauth
        
    2. 在master-config.yaml文件中配置projectRequestMessage参数,当开发人员创建新的项目时,将会用设置的Message提示他该如何去创建项目
    ...
    projectConfig:
      ProjectRequestMessage: "To request a project, contact your system administrator at projectname@example.com."
      ...
    
    1. 更新self-provisioners cluster role binding以阻止自动更新角色,以下两种方式都能实现
      • 使用一个命令行
      $ oc patch clusterrolebinding.rbac self-provisioners -p '{ "metadata": { "annotations": { "rbac.authorization.kubernetes.io/autoupdate": "false" } } }'
      
      • 使用命令行进行编辑
        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"
        ...
        

    对project设置nodeselector

    NodeSelector与Node的Label配合使用,可以用来控制pod的调度。

    设置集群级别的默认节点选择器

    修改master-config.yaml文件中的defaultNodeSelector参数,这个配置将会影响所有没有设置nodeSelector标记的pod

    ...
    projectConfig:
      defaultNodeSelector: "type=user-node,region=east"
    ...
    

    重启master服务,让配置生效

    # master-restart api
    # master-restart controllers
    
    设置项目级别的默认节点选择器

    在创建项目时可以指定 --node-selector来设置项目级别的节点选择器。例如,如果您有一个包含多个区域的OpenShift容器平台,您可以使用--node-selector来限制项目,使其只在特定区域的节点上部署pod。

    $ oc adm new-project myproject --node-selector='type=user-node,region=east'
    

    一旦执行了以上命令,所有myproject项目的创建的pod都会带上'type=user-node,region=east'的nodeSelector
    说明:oc与oc adm两个命令都有 new-project子命令,但是--node-selector设置只有在cluster-admin用户下执行oc adm new-project时才有效
    使用oc adm new-project创建的新的project将会添加一个annotation,也可以编辑project,修改该annotation

    ...
    metadata:
      annotations:
        openshift.io/node-selector: type=user-node,region=east
    ...
    

    也可以通过命令行来对annotation进行更新

    # oc patch namespace myproject -p '{"metadata":{"annotations":{"openshift.io/node-selector":"node-role.kubernetes.io/infra=true"}}}'
    
    • 如果openshift/node-selector设置为"",那么这个项目下的pod并不会设置nodeSelctor
    • 如果开发人员在创建deployment时额外设置了另外的nodeSelector,那么pod在调度的时候会需要同时满足project设置的nodeSelector及deployment的nodeSelector

    限制用户创建的project数

    • 通过设置master-config.yaml文件中的ProjectRequestLimit 可以限制用户的project数量。该配置将根据user用户的label进行设置project的最大数量
    • 当前用户的将按照ProjectRequestLimit的设置的selector进行匹配,以第一个匹配为准设置maxProjects
    • 如果ProjectRequestLimit没有设置selector,那么该maxProjects对所有用户生效
    • 如果没有设置maxProjects,那么对于用户不限制project数

    例子:以下配置为每个用户设置了2个项目的全局限制,同时为标签为level=advanced的用户允许10个项目,为标签为level=admin的用户允许无限制的项目。

    admissionConfig:
      pluginConfig:
        ProjectRequestLimit:
          configuration:
            apiVersion: v1
            kind: ProjectRequestLimitConfig
            limits:
            - selector:
                level: admin 
            - selector:
                level: advanced 
              maxProjects: 10
            - maxProjects: 2 
    

    重启master服务,让配置生效

    # master-restart api
    # master-restart controllers
    

    参考文章

    openshift官方文档:Managing Project

    相关文章

      网友评论

        本文标题:Openshift管理project【译自官方文档】

        本文链接:https://www.haomeiwen.com/subject/mjulkqtx.html