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

一个关于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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342