容器私有云和持续发布都要解决哪些基础问题 第二集

郑昀编著 创建于2015/10/30 最后更新于2015/11/20

关键词:Docker,容器,持续集成,持续发布,私有云,Jenkins,Mesos,Marathon


本文档适用人员:广义上的技术人员

提纲:

  1. 集装箱还是卷挂载?
  2. Host Networking 还是 Bridge Networking?
  3. 容器要固定IP吗?
  4. 容器内部如何获取宿主机的IP?
  5. 容器日志如何收集?
  6. Apache Mesos 还是 Google K8s?
  7. 如何保证 Registry 镜像Pull/Push安全?
  8. 如何保证 Marathon API 和 Docker API 调用安全?

  在构建基于容器的私有云以及相应的持续发布时,还需要解决这些基础问题。延续上一篇

0x04 容器日志如何收集?

仍采用我们惯常的 ELK 方案。即,

  1. 与开发者约定好日志文件的路径规范,日志就落在容器所在 Mesos Slave 宿主机的本地磁盘上,
    • 日志位置的统一:/data/application/logs
    • 日志文件名称的统一:日志类型-工程名-环境-容器Tag-主机名,这样 Logstash 就能把重要信息从文件名里抽离出来了:
      • 应用日志位置:/data/application/logs/日志类型_${APPNAME}_${APPENV}_${APPIMGTAG}_${HOSTNAME}_%d{yyyyMMdd}.log, 比如 aether 的日志位置为:/data/appliaction/logs/weberror_aether_nor_8_778283_20150819.log
      • trace(鹰眼)日志位置:/data/application/logs/tracing/tracing_${APPNAME}_${APPENV}_${APPIMGTAG}_${HOSTNAME}_%d{yyyyMMddhh}.log,比如 aether 的 trace 日志位置为:/data/appliaction/logs/tracing/tracing_aether_nor_8_778283_2015081912.log
      • 针对于 ENV 采用简写的形式,取每个环境的前3个字符来指代该环境:
        • 开发联调(dev)
        • 常规(nor)
        • 紧急(eme)
        • 特殊(spe)
        • 镜像(mir)
        • 生产(pro)
  2. 启动 Logstash Agent 去收集日志,上传给 Logstash,
  3. 我们基于 Kibana 查询和分析日志,尤其是我们的异常日志分析与汇总。

0x05 Apache Mesos还是Google K8s?

 VS 

K8s 就是 Kubernetes 的缩写。

在2014年11月~2015年1月,K8s 还需要一些未开源的部件来完成网络配置,所以我们选择了当时更成熟易用的 Mesos+Marathon。由于 K8s 作为容器编排工具可以架设在 Mesos 之上,K8s 也越来越成熟,所以后续不排除选型 Mesos+K8s。

接下来说一下调用安全。

0x06 如何保证Registry镜像Pull/Push安全?

Docker 镜像的存储和管理,对应于 Docker-Registry,它是用 Python 语言开发的。它由三个组件构成:

  1. Docker Index
    • Web UI
    • Meta-data 元数据存储(附注、星级、公共库清单)
    • 访问认证
    • token 管理
  2. Docker Registry
    • 存储镜像、以及镜像层的家族谱系
    • 没有用户账户数据
    • 不知道用户的账户和安全性
    • 把安全和认证委托给 docker-hub 来做,用 token 来保证传递安全
    • 不需要重新发明轮子,支持多种存储后端
    • 没有本地数据库
  3. 后端存储
    • 因为镜像最终是以 tar.gz 的方式静态存储在服务端
    • 适用于对象存储而不是块存储
    • registry 存储驱动
    • 官方支持的驱动有文件、亚马逊AWS S3、ceph-s3、Google gcs、OpenStack swift,glance

可以看到,Docker-Registry 缺省没有安全权限的设置,任何人都可以 pull 和 push,所以安全和认证由 Docker Index(即 Docker-Hub)处理。

但目前我们没有引入 Docker Index 角色,只是在 Docker Registry 前面架设了一层 Nginx 负责 Basic-Auth 身份认证和 SSL 加密传输,之所以如此是因为2014年10月发布的 Docker 1.3 开始强制 Basic Authentication 而且必须使用 HTTPS 访问 Registry,如下图所示:

也就是说,Jenkins 需要持有用于 Basic Auth 的用户名密码以及 SSL 证书。下面引用 larrycaiyu 的制图来说明 Nginx+Registry 的服务是如何组成的:

关于 SSL 自签名证书(Serf-signed certification),可以参考这两篇文章 搭建docker-registry时使用自签名ssl证书认证问题 和 Building private Docker registry with basic authentication

0x07 如何保证Marathon API和Docker API调用安全?

我们的持续集成管理平台(Codename:Touchstone)会调用 Marathon REST API 进行容器部署工作,如下图所示。

其中,Marathon REST API 支持 Basic Auth 和 SSL,如官方文档 SSL and Basic Access Authentication 所示,所以 Touchstone 需要持有用于 Basic Auth 的用户名密码。

2014年4月,Docker 0.10 引入了 TLS auth,内置了 TLS/SSL 证书安全,这样 Docker Remote API 才不再裸奔。目前,我们在 Mesos Slave 宿主机的 Docker Daemon 配置文件 /etc/sysconfig/docker 里启用了 --tlsverify:

OPTIONS=‘--tlsverify

--tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem …………

于是乎,Java 开发的 Touchstone 通过界面配置并将如下信息存储到它的数据库里:

  • 访问远端 Marathon REST API 所需的用户名密码和 SSL 证书;
  • 访问远端 Docker Remote API 所需的 SSL 证书。

——未完待续——

欢迎订阅我的微信订阅号『老兵笔记』,请扫描二维码关注:

转载时请注明“转载自旁观者-博客园”或者给出本文的原始链接。

附录A:参考资源

1,2015,闲谈Kubernetes 的主要特性和经验分享,http://www.dockone.io/article/578

2,2015,Swarm、Fleet、Kubernetes、Mesos - 编排工具的对比分析,http://dockone.io/article/823

3,2015,Docker Registry的定制和性能分析,http://dockone.io/article/375

4,2014,用Nginx来做私有docker registry的安全控制,http://www.larrycaiyu.com/2014/12/01/private-docker-registry-with-nginx.html

5,2014,搭建docker-registry时使用自签名ssl证书认证问题,https://www.webmaster.me/server/docker-registry-with-self-signed-ssl-certificate.html

6,2015,从Docker Hub和docker-registry看优秀的后端服务设计实现,http://dockone.io/article/142

7,马全一,https://github.com/containerops/wharf

8,Marathon API doc,https://mesosphere.github.io/marathon/docs/ssl-basic-access-authentication.html

9,2014,Docker入门教程之Docker Remote API

10,2015,郑昀,容器私有云和持续发布都要解决哪些基础问题 第一集

-EOF-

时间: 2024-10-13 21:25:37

容器私有云和持续发布都要解决哪些基础问题 第二集的相关文章

基于Docker的持续发布都要解决哪些问题 第一集

郑昀编著,文字资料来自于张帆.白俊华.刘飞宇以及网络资料 创建于2015/10/21 最后更新于2015/10/29 关键词:Docker,容器,持续集成,持续发布,CI,私有云 本文档适用人员:广义上的技术人员 提纲: 集装箱还是卷挂载? Host Networking 还是 Bridge Networking? 容器要固定IP吗? 容器内部如何获取宿主机的IP? 待续   首先,你要明白容器并不是虚拟机,虽然它可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题

华为云全球首发容器多云和混合云解决方案,实现容器应用轻松跨云

3月22日,在华为中国生态伙伴大会上,华为云全球首发商用级容器多云和混合云解决方案,为用户提供容器集群及云原生应用的跨云管理能力,解决云服务平台供应商锁定和单云场景的低可靠风险,让用户的选择更加灵活,云原生业务更加稳定可靠. 华为云BU PaaS产品部总经理廖振钦现场发布MCP 现场通过模拟网上购物过程中,某云上集群宕机的场景,完整的演示了从用户体验到服务异常检测.后台应用服务自动迁移的完整过程,让用户直观感受到,基于华为多云管理平台(MCP)即可快速实现业务的跨云容灾.现场听众纷纷表示这是在跨

公有云、私有云和混合云,企业用户将如何选择?

所谓云计算的服务类型,就是指为用户提供什么样的服务:通过这样的服务,用户可以获得什么样的资源,以及用户该如何去使用这样的服务.目前业界普遍认为,云计算可以按照服务类型分为以下三类: 云计算提供者与使用者的所属关系为划分标准,将云计算分为三类,即公有云.私有云和混合云. 公有云(Public Cloud)公有云是由若干企业和用户共同使用的云环境,IT业务和功能以服务的方式,通过互联网来为广泛的外部用户提供:用户无须具备针对该服务在技术层面的知识,无须雇佣相关的技术专家,无须拥有或管理所需的IT基础

云计算实战课程:教你分清公有云、私有云和混合云

云计算现在是越来越火了,公有云.私有云.混合云--各种云,刚刚接触云计算的各位想必多少会有些头疼,不过现在不怕啦,来×××教育,你就会发现,弄清楚这些概念简直太简单了. 私有云可以理解成是单纯为某一个特定用户或机构建立的,只能够实现小范围内的资源优化,因此私有云并不能够完全符合云计算的本质. 这也是为什么Openstack等开源软件带来的私有云繁荣可能只是暂时的,会有越来越多的客户发现廉价的硬件和免费的软件并不是打造私有云的充分条件,精细的管理. 托管型私有云在一定程度上实现了社会分工,但是仍无

第三章web安全基础—IIS网站发布问题、解决办法

问题一:虚拟机联网问题 ①桥接模式:与主机共用一个物理网卡,主机插着网线,手动配置IP,Netmask,网关,DNS,虚拟机也需要如此配置,还得跟主机同一个网段,但是不是一个网络号,还不能和这个网段其他主机冲突(这个模式可以和机房里其他主机通信) ②NAT模式:选择NAT模式,在虚拟机更改适配器设置里设置成自动获取,就可以上网了,有时候没分配好,就把本地连接禁用一下再开启一下(分配完的地址和主机网段没啥关系,原理同家里一个路由器可以让手机电脑都上网) PS:在计算器网络中,网络地址转换(Netw

在TFS持续集成(持续发布)中执行Telnet任务

Telnet是一种在因特网或局域网上使用虚拟终端连接,提供双向交互式文本通信设备的协议. 它是最早的互联网通讯协议之一.自1969年启用以来,已经经过了将近50年时间,在开放式的操作系统中拥有广泛的用户. 虽然由于其安全性的弊端,已经逐渐被淘汰,但是在许多AIX系统的服务器上,运维人员都习惯使用Telnet作为自己的主要工具,维护服务器系统.TFS系统作为应用软件生命周期管理(ALM)平台的产品,原生提供SSH工具连接Linux系统,可惜没有提供Telnet的工具,这里我介绍如何使用Ant中的T

是不是所有的问题都有解决办法!唯有……

      2009年刚上大学的我欣喜的买了个联想笔记本电脑SL400,当时这款电脑刚出不久5700元,09年的5700对于一个农村的孩子来说真的不少,不知道是出于高兴还是出于高兴!可是想不到电子产品淘汰的这么快,短短几年的时间,价值5700的电脑二手只值400左!       说实话真的舍不得卖,可是留着又没用,更加贬值,思来想去,在同城二手市场发布打算卖出去,结果400竟然还有人跟我还价!可见当今社会二手货真的不值钱,一生气也没卖,由于做编程的,这个配置的电脑连eclipse起来都费劲,作为

Docker的ubuntu镜像安装的容器无ifconfig和ping命令的解决

Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令 解决: apt-get update apt install net-tools       # ifconfig apt install iputils-ping     # ping

【云快讯】之三十八《IBM 利用 Openstack 打通私有云和 Softlayer 部署》

2015-05-20 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 [背景] Softlayer 是几年前 IBM 花20亿美金购买的,最初 Softlayer 的云管理平台是基于 CloudStack,但是这几年随着 Openstack 的日益流行和影响力巨大,IBM 也不得不做出改变,在 Softlayer 中支持 Openstack. [新闻原文] IBM 在 Softlayer 中提供了 Openstack相关服务,让企业用户可以很方便的把内部工作负