李诚云原生技术分享

------------恢复内容开始------------

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

我们来看下

------------恢复内容结束------------

原文地址:https://www.cnblogs.com/kebibuluan/p/15158629.html