OpenShift-安全与配额

概述:

容器是在linux命名空间和CGroup的基础上,通过SELinux限制容器进程对资源的读取访问或限制容器的容量。容器的安全隔离已经达到了生产可用级别。

容器安全涉及到多个层面:1、容器自身安全;2、容器镜像安全;3、宿主机安全

用户认证:

openshift通过OAuth进行用户认证,OAuth是一个开源的认证和授权框架,OAuth通过用户登录认证以后,返回一个token,用户可以在有效的时间内对系统进行访问。

  • 获取token:oc whoami -t

  • 获取tokenAPI:/oauth/token/request

身份验证 identity provider

openshift提供不同的适配器链接不同的用户信息管理系统:LDAP、Active
Directory、HTPasswd。

openshift默认采用HTPasswd的文件存储用户信息。该文件存储位置在:/etc/origin/master/htpasswd

使用htpasswd命令可以对用户数据库进行增删改查

用户组

  • 查看provider来源:oc get identity

  • 认证系统:authentication

  • 授权系统:authorization

  • 角色访问控制系统:RBAC (role based access control)

权限cluster local

  1. role:角色,一组权限的集合,RBAC系统中,权限–>role–>用户或者组

  2. rule:规则,rule三要素:角色role、资源resource、动作verb。

  3. policy:策略,若干role组成的集合

  4. role binding ,角色与用户或者组的绑定关系

  5. policy binding,若干role组成的集合与用户或者组的绑定关系。

权限操作

  1. 授予用户查看当前项目权限:

oc policy add-role-to-user view user2

  1. 编辑权限:

oc policy add-role-to-user edit user2

删除:oc policy remove-role-from-user edit user2

  1. 查看角色绑定关系:

oc get rolebinding

  1. 查看role的详细信息

oc describe clusterrole admin

  1. 创建组:

oc adm groups new newgroups

  1. 增加用户到组

oc adm groups add-users newgroups user2

  1. 绑定cluster-admin role到新建组

oc adm policy add-cluster-role-to-group cluster-admin newgroups

cluster-admin是系统管理员角色,这个角色可以在系统中对任意对象执行任意操作。

Service Account

  • builder对象:用于S2I

  • default对象:用于运行容器

  • depolyer对象:用于部署容器

每个service account包含secret 和token
./media/image1.png

安全上下文SCC

privileged权限最大,restricted权限最小,普通用户及其创建的项目,都属于restricted组。这个组不允许容器以root用户运行,如该要容器以root权限运行,可以把项目默认的default
service account加入到高权限的组中,

比如加入到anyuid组中,因为anyuid组中的RUNASUSER属性值为:RUNASANY,命令如下:

oc adm policy add-scc-to-user anyuid -z default -n projectname

查看当前用户的scc(Security content constraint)
./media/image2.png

Quota额度配置

额度的控制通过资源额度对象resource quota管理(集群用clusterresourcequota),

resource
quota是基于项目的,以项目为单位对资源进行额度管理,资源的额度对象分为两种:

- 计算资源:compute resource

  1. 计算资源:对CPU、内存资源的额度管理

CPU:

limits.cpu: “40” #limits :容器所能使用的cpu上限值。 limits.memory: 40Gi requests.cpu: “4” #requests:容器运行所需的cpu下限值。 requests.memory: 4Gi

CPU资源的度量最小单位是Millicore,一个计算节点上CPU核数乘以1000,即为该节点CPU资源总量。

例如:4Core=4000m

注意:设置计算资源以后,用户部署容器的时候,必须显示的为每一个容器指定CPU和内存的requests及limits的值,否则容器无法部署。

  1. 对象数量额度:pod、rc、rq、svc、cm、pvc、is、secrets
openshift.io/imagestreams: “400” persistentvolumeclaims: “400” pods: “40” replicationcontrollers: “40” resourcequotas: “40” secrets: “100” services: “100”
  1. cluster resource quota

ClusterResourceQuota允许限制多个project,多个project可以通过annotation 或者
label
进行选择,比如某个用户下的所有project就可以通过:annotations:openshift.io/requester=
进行限制。项目管理员不能创建和修改ClusterResourceQuota,但是可以查看集群限额在当前项目的应用情况,通过以下命令查看:

oc describe AppliedClusterResourceQuota

Limit Range 资源限制

资源限制是更具体的控制每个容器具体使用多少CPU和内存资源。

可以通过两个层面进行定义:

  • 项目级别统一定义每个容器资源是用总量

  • 容器级别单独定义某个容器资源是用总量