在OpenShift中运行容器

简介: 本文讲的是在OpenShift中运行容器【编者的话】本文不是一篇关于如何在OpenShift中使用和部署容器的指导性文章,也没有具体介绍OpenShift的原理组成,关于如何使用OpenShift可以参考另一篇《OpenShift V3 应用发布部署的简单场景演示》。
本文讲的是在OpenShift中运行容器【编者的话】本文不是一篇关于如何在OpenShift中使用和部署容器的指导性文章,也没有具体介绍OpenShift的原理组成,关于如何使用OpenShift可以参考另一篇《 OpenShift V3 应用发布部署的简单场景演示 》。

【深入浅出学习 etcd】etcd为分布式系统提供可靠、高效的配置管理服务,在Docker、Kubernetes、Mesos等平台中扮演了越来越重要的角色。作为2013年开始的项目,它还很年轻,官方文档中缺乏实现上全面、系统的介绍,本课程深入浅出地介绍了etcd的实现,并为运维和二次开发提供了系统的指导和建议。

本文的关注点在于OpenShift中的容器安全性问题,相信很多用过容器的读者都会遇到在容器里以root用户启动应用的情况,这篇文章着重介绍了OpenShift中我们如何处理这种情况,以及这样处理带来的副作用和其中的原因。
openshift.png

OpenShift  是Red Hat公司推出的一个基于Kubernetes的容器应用平台。并且很简捷,没错,它就是一个PaaS。新的V3版本的OpenShift做了一次 重大的改变 ,所有的组件用go语言重新编写,并且和现在的Kubernetes有了很好的结合。当你使用OpenShift的时候,你其实得到了一个Red Hat推出的基于Kubernetes的分布式系统,OpenShift的功能是围绕着代码部署,自动化构建等等,是一个典型的PaaS平台。

Openshift的优点是什么呢?Red Hat经常引以为豪的就是它的 安全性

我不是一个安全领域的专家,但是当你考虑使用Kubernetes并且如果你不想围绕secrets争论的时候,你会发现,Kubernetes有很多关于安全性的功能。 RBAC 就是一个当你用 kubeadm 去部署一个集群环境时默认的设置。可以通过强制的 网络规则 进行网络隔离,pod也可以用 安全策略 控制非常严格。加上身份验证机制,为所有组建间的通信提供TSL加密,权限控制,至少对我来说,这是一个非常强大和安全系统。

但是对早期的使用者来说这些安全设置是有代价的。在OpenShift中,使用Kubernetes默认的Pod安全策略,他们被 SCC(Security Context Constraints) 调用。默认使用SCC最明显的地方是在OpenShift的容器中,进程不能用 ROOT 用户运行。(译者注:表现为权限不够)

所以如果你在 minishift 里,没有指定一个非 ROOT 用户去运行一个Docker镜像,这肯定会失败。这意味着,非常遗憾,我们的 Bitnami 镜像现在还不能运行在OpenShift上。我们正在修复解决这个问题,也就是说在 Dockerfile 中用一个非特权用户,我将向您展示如何暂时规避这个问题。

开始使用OpenShift

使用OpenShift可以从 minishift 开始,他是一个定制的 minikube ,也就是说,它可以运行在你桌面系统的虚拟机里(就像k8s)。客户端 oc (译者注:oc是OpenShift的主要命令)可以被非常容易的配置,因为他实际上是在 kubectl 外面包装了一层。

当你下载后,使用它感觉就像在使用 minikube 一样:(除了它默认的驱动是xhyve,当然如果你用的是Virtual Box......):
minishift start — vm-driver virtualbox

oc 添加到你的PATH中:
$ minishift oc-env
export
PATH=”/Users/sebgoa/.minishift/cache/oc/v1.5.0:$PATH”

Run this command to configure your shell:

eval $(minishift oc-env)

$ eval $(minishift oc-env) 

修改SCC

为了修改SCC,你需要用admin用户登录到OpenShift中:
oc login -u sysadmin:admin

这时修改 scc
oc edit scc anyuid

如果你不使用 admin 用户登录,那么RBAC不会让你修改安全约束(security constraints),这时增加 user 会像这样:
users:
- system:serviceaccount:default:ci
- system:serviceaccount:ci:default
- system:serviceaccount:myproject:default

基本上,你在你自己的项目里(myproject)可以用默认的服务帐号(service account)以任何 uid 包括 ROOT 用户去在运行一个容器。需要注意的是,你自己创建的项目(myproject)是一个可以用被你自己访问的名字空间。它是默认被minishift创建的,你可以用 oc config view 在k8s中找到它。

作为普通用户切换回minishift(  oc config  just like  kubectl config  ):
oc config use-context minishift

用容器创建一个应用程序,并以ROOT身份运行一个进程

你现在可以用容器去创建一个应用程序了,并且这个应用程序的进程是 ROOT 用户运行的。你解除了pod的安全规则。但是这部太符合最小权限运行原则。 oc new-app 看起来很像 kubectl run
oc new-app --name foobar \
--docker-image bitnami/mariadb \
--env MARIADB_ROOT_PASSWORD=root

现在你已经运行起来了bitnami mariadb在OpenShift里了,(  oc logs  like  kubectl logs  :
$ oc logs foobar-1-zft17
Welcome to the Bitnami mariadb container
Subscribe to project updates by watching
https://github.com/bitnami/bitnami-docker-mariadb
Submit issues and feature requests at
https://github.com/bitnami/bitnami-docker-mariadb/issues
Send us your feedback at containers@bitnami.com
nami INFO Initializing mariadb
mariadb INFO ==> Configuring permissions…
mariadb INFO ==> Validating inputs…
mariadb INFO ==> Initializing database…
...<snip> 

结论

虽然在OpenShift里可以绕过默认的安全约束策略(SCC)但其实这并不是一个理想状态。这就是为什么在Bitnami中,我们现在去修改我们的容器应用模板去harden它们并且让它讷讷个够和运行在OpenShift中。

原文连接:Running Containers in OpenShift(翻译:王晓轩)

原文发布时间为:2017-05-18

本文作者:王晓轩

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:在OpenShift中运行容器

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
Ubuntu PHP Docker
一个可以运行的Dockerfile_php ,用来创建php容器镜像
该简介描述了一个基于 Dragonwell 8 Ubuntu 的 Docker 镜像,用于构建包含 PHP 7.4 及常用扩展的运行环境。通过更换为阿里云源提升安装速度,配置了 PHP-FPM 并暴露 9000 端口,使用自定义 Dockerfile 构建镜像并成功运行容器。
|
11月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
660 266
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
10月前
|
人工智能 Prometheus 监控
容器化AI模型的监控与治理:确保模型持续稳定运行
在前几篇文章中,我们探讨了AI模型的容器化部署及构建容器化机器学习流水线。然而,将模型部署到生产环境只是第一步,更重要的是确保其持续稳定运行并保持性能。为此,必须关注容器化AI模型的监控与治理。 监控和治理至关重要,因为AI模型在生产环境中面临数据漂移、概念漂移、模型退化和安全风险等挑战。全面的监控涵盖模型性能、数据质量、解释性、安全性和版本管理等方面。使用Prometheus和Grafana可有效监控性能指标,而遵循模型治理最佳实践(如建立治理框架、定期评估、持续改进和加强安全)则能进一步提升模型的可信度和可靠性。总之,容器化AI模型的监控与治理是确保其长期稳定运行的关键。
|
9月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
285 0
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
|
10月前
|
PHP Docker 容器
如何在宿主主机运行容器中的php守护进程
在Docker容器中同时运行多个程序(如Nginx+PHP+Ftp)时,需用`docker exec`命令启动额外服务。首先通过`php -v`查看PHP版本,再用`which php-fpm7.4`确认PHP安装路径,通常返回`/usr/sbin/php-fpm7.4`。最后直接运行该路径启动PHP-FPM服务,确保其正常工作。
192 14
|
10月前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
215 1
|
11月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
489 5
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
300 4