李诚云原生技术分享
------------恢复内容开始------------
1、第一新一代的应用编排出来之后打镜像,对应的编排文件如下
整个文件的编排目录如下,我们在改目录下创建一个dockfile文件
Dockerfile文件的内容如下
1.基于行内的jdk镜像
把当前宿主机器中的demo文件夹拷贝到容器中,默认容器的workdir是当前的根目录
接下来进行镜像的编排操作
这里使用到了一个概念:https://www.cnblogs.com/sammyliu/p/10083659.html
在上面的docker镜像中指定当前镜像启动之后在ocp集群中镜像启动之后对应的pod要以root用户启动,默认情况仅仅只在dockfile中指定USER root是远远不够的
Openshift平台中,当在容器内需要用到root权限时,仅仅在dockerfile中指定user为root还是不够的, https://www.pianshen.com/article/85621206279/
具体参考博客:https://www.cnblogs.com/sammyliu/p/10083659.html
这里使用的到的是几个命令和概念
这里和控制器用户ServicAccount服务账户相关,用来指定pod到底是以啥具体用户执行、能够操作宿主机器上面的权限资源
Service account:服务账户。这是跟一个项目关联的特殊系统用户,每个用户被一个 ServiceAccount 对象表示,通常是指 pod 中运行主进程的用户
pod 中的用户(serviceaccount)访问pod内和宿主机上操作系统资源,由 scc(security context constraints)进行控制。
pod 中的应用除了有访问 OpenShift API 和内部镜像仓库之外,还有一些系统资源访问要求。比如:
- 要求以任意用户甚至是 root 来运行 pod 中的主进程
- 要求访问宿主机上的文件系统
- 要求访问宿主机上的网络
对于这些操作系统资源的访问权限,OpenShift 利用 scc 来进行控制。这就要求:
- 在 scc 中进行权限控制。这部分在后面介绍。
- 在 servie account 和 sa 之间建立联系。每个 scc 都有指定使用它的用户列表。所有通过身份认证了的用户都只在 restricted 这个 scc 的用户列表之中,包括 service account。因此,pod 默认使用的是 restricted scc。要使它使用其它的scc,就要将它的 service account user 加入到要使用的 scc 的用户列表之中。这在 scc 部分具体介绍。
前面说过,SCC 用于控制访问系统资源的权限,那说明只有 service account 才需要使用 scc。没在文档中看到自然人用户 user 使用 scc 的例子。
上面表示的几个点是最重要的,我们在dockfile中指定如果指定了任意用户的uid,这里我们只需要在openshift的编排文件中指定scc为anyuid就可以了,上面的编排文件中我在dockerfile中指定USER root指定用户为root,这里在openshift的编排文件中指定scc为anyuid就可以使用root的uid来启动容器了
OpenShift 默认创建了几个典型的 scc,pod 默认使用的是 restricted scc
我们来看下
------------恢复内容结束------------
posted on 2021-08-18 20:13 luzhouxiaoshuai 阅读(56) 评论(0) 编辑 收藏 举报