提纲:
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 调用安全?
延续上一篇。
仍采用我们惯常的 ELK 方案。即,
K8s 就是 Kubernetes 的缩写。
在2014年11月时,K8s 还需要一些未开源的部件来完成网络配置,所以我们选择了当时更成熟易用的 Mesos+Marathon。由于 K8s 作为容器编排工具可以架设在 Mesos 之上,K8s 也越来越成熟,所以后续不排除选型 Mesos+K8s。
接下来说一下调用安全。
Docker 镜像的存储和管理,对应于 Docker-Registry。
可以看到,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。
我们的持续集成管理平台(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 ... .html ;
5,2014,搭建docker-registry时使用自签名ssl证书认证问题, https://www.webmaster.me/serve ... .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/m ... .html ;
9,2014,Docker入门教程之Docker Remote API;
10,2015,郑昀,容器私有云和持续发布都要解决哪些基础问题 第一集;
-EOF-
- 欢迎订阅我的微信订阅号『老兵笔记』,请扫描二维码关注: