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


    郑昀编著 创建于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?

      mesos VS k8s
      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->registry
     
      也就是说,Jenkins 需要持有用于 Basic Auth 的用户名密码以及 SSL 证书。下面引用 larrycaiyu 的制图来说明 Nginx+Registry 的服务是如何组成的:
    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 进行容器部署工作,如下图所示。
    touchstone->marathon
     
      其中,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
     
    -EOF-
  • 相关阅读:
    tensorboard页面显示No dashboards are active for current data set 问题win10系统
    tensorboard在cmd运行成功但在浏览器中不能正常显示的问题解决
    使用tensorflow设计的网络模型看不到数据流向怎么办
    pycharm中某些方法被标黄的原因及解决办法
    np.newaxis()用法
    决策树模型、本质、连续值完整篇
    决策树模型、本质、连续值
    vsftp 用无法登陆的用户名登陆(也叫虚拟用户)并进入到自己的文件夹test
    vsftp 使用匿名帐号登陆
    CentOS 5/6.X 使用 EPEL YUM源
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/dockernow2.html
Copyright © 2020-2023  润新知