云原生生态周报 Vol. 3 | Java 8 ❤️ Docker

简介: Docker Hub遭入侵,19万账号被泄露;Java 8 终于开始提供良好的容器支持;Snyk 年度安全报告出炉,容器安全问题形势空前严峻。

vol3.jpg

业界要闻

  1. Docker Hub遭入侵,19万账号被泄露 : 4月25日Docker官方邮件曝露,因为Hub的一个数据库收到非授权访问,影响了约19万用户的用户名和哈希后的密码,以及用户自动构建的Github和Bitbucket Token。Docker公司建议用户修改其登录密码。如果您在公有云上的应用依赖于来自 Docker Hub的镜像,我们强烈建议您登录容器服务控制台更新相应的docker login信息或kubernetes secret。此外,阿里云容器镜像服务企业版提供网络访问控制、独享OSS Bucket加密存储等安全加固功能,最大程度保障您的镜像仓库的安全。
  2. Java 8 终于开始提供良好的容器支持长久以来,容器 和 Java 就像一对“欢喜冤家”。一方面,容器技术的“不可变基础设施”特性为开发者带来了无比宝贵的依赖与环境一致性保证;但另一方面, Linux 容器通过 Cgroups 对应用进行资源限制的方式跟所有依赖于 JVM 进行资源分配的编程语言都产生了本质的冲突。而就在上周,最近发布的OpenJDK 镜像 openjdk:8u212-jdk 终于能够让 Java 8 运行时在容器里面为应用分配出合理的 CPU 数目和堆栈大小了。自此,发布 Java 容器应用的痛苦经历,可能要一去不复返了。
  3. Snyk 年度安全报告出炉,容器安全问题形势空前严峻知名开源安全厂商 Snyk 在年初发布了 2019 年度安全报告。报告中指出:“随着容器技术在2019年继续在IT环境中爆发式增长,针对容器安全的威胁正在迅猛增加,任何一家企业现在都必须比以往更加重视容器镜像安全,并将此作为企业的首要任务”。报告详情,请点击此处查看全文

上游重要进展

Kubernetes 项目

  1. Kubernetes 集群联邦 v1(Federation v1) 正式宣布废弃K8s 社区近日宣布将 Federation v1 代码库正式废弃。Federation v1 即 Kubernetes 项目原“集群联邦”特性,旨在通过一个统一的入口管理多个 Kubernetes 集群。但是,这个特性逐步被设计成了在多个 Kubernetes 集群之上构建一个 “Federation 层”的方式来实现,从而背离了 Kubernetes 项目的设计初衷。最终,在 RedHat、CoreOS、Google 等多位社区成员的推动下,社区开始全面拥抱 Federation v2一个完全旁路控制、以 K8s API 为核心的多集群管理方案。
  2. Kubernetes 1.15 进入发布节奏 K8s 1.15 发布进入日程,5 月30 日即将 Code Freeze(即:不接受任何功能性 PR)。
  3. [KEP] Ephemeral Containers KEP 合并,进入编码阶段
    Ephemeral container 旨在通过在 Pod 里启动一个临时容器的方式,来为用户提供对Pod和容器应用进行debug和trouble shooting的能力。这种通过“容器设计模式”而非 SSH 等传统手段解决运维难题的思路,对于“不可变基础设施”的重要性不言而喻,阿里巴巴在“全站云化”过程中也采用了同样的设计来解决类似问题。在上游完成该功能的编码实现后,会通过 kubectl debug 命令方便用户直接使用。

Knative 项目

  1. Knative 逐步弃用原 Build 项目。按照计划,Tektoncd/Pipeline 子项目已经在 v0.2.0 时移除了对 Build 的依赖。最近,Knative Serving v1beta1 也移除了对 Build 的依赖,目前,社区已经开始制定弃用 Build 的确切方式并通知到 knative 开发者社区。
  2. knative 正在考虑为事件触发(Trigger)引入更高级的规则和策略。 社区正在就 Advanced Filtering 设计一个 提案。该提案提议基于 CEL (Google 维护的一种表达式语言)来进行事件的过滤。具体来说,Trigger 的 filter 字段会增加一个 Spec 字段,然后在 Spec 字段下使用 CEL 语法完成对事件的过滤规则定义。

Istio/Envoy 项目

  1. Istio 1.1.4本周正式发布,其中一个重要的功能是更改了Pilot的默认行为,对出口流量的控制变化。除了之前通过Service Entry与配置特定范围IP段来支持访问外部服务,新版本中通过设置环境变量PILOT_ENABLE_FALLTHROUGH_ROUTE允许Envoy代理将请求传递给未在网格内部配置的服务。更多可以参考Istio流量管理实践系列文章。
  2. Envoy正通过ORCA改善负载均衡的精准度
    目前Envoy可以用于进行负载均衡决策的信息主要是权重和连接数等信息,为了能让Envoy的负载均衡更加精准需要为Envoy提供更多的决策因素。比如本地和远程机器的负载情况、CPU、内存等信息,更复杂的还可以利用应用程序特定的指标信息来进行决策,比如队列长度。而ORCA的目的是定义Envoy和上游代理之间传递这些信息的标准。该功能的提出者希望ORCA可以成为Universal Data Plane API (UDPA)。
  3. Envoy正引入RPC去代替共享内存机制以便提高统计模块的的扩展性
    Envoy当下通过共享内存的方式来保存stats数据的这种方式存在很多局限性,比如需要限制stats使用固定的内存大小,当有大量集群的时候没办法扩展。这给他升级stats子系统的架构带来了不少的阻碍。因此他希望可以通过将stats数据以堆内存的方式来保存,然后通过RPC在新老进程中传递。
  4. Envoy正在xDS协议中增加VHDS协议减小动态路由信息的更新粒度
    现状是,Envoy中的路由配置是通过RDS来动态更新的,但是RDS的粒度太粗了,包含了一个Listener下所有的路由配置信息。由于一个Listener下面可能会有多个服务,每一个服务对应一个Virtual Host,因此在更新路由的时候,如果只是其中一个Virtual Host更新了,那么会导致所有的路由配置都重新下发而导致通讯负荷偏重。引入VHDS就是为了只下发变化的路由信息,从而将更新的路由配置信息量缩小。

Containerd 项目

  1. Non-root用户运行 containerd 近日,社区正在尝试实现无需root权限就可以运行containerd的能力。在这种场景下,用户可以提前准备好容器所需要的 rootfs ,但是 containerd 服务端在清理容器时依然会尝试去 unmount rootfs,对于没有 root 权限的 containerd 进程而言,该步骤必定会失败(mount 操作必须要有 root 权限)。目前 Pivotal 的工程师正在解决这个问题,这种 non-root 模式可以为解决云上安全问题提供新的思路,

开源项目推荐

  1. 本周,我们向您推荐 kubeCDN 项目
    kubeCDN 项目是一个基于Kubernetes 实现的自托管 CDN 方案,只要将它部署在分布在不同地域(Region) 的 Kubernetes 集群上,你就拥有了一个跨地域进行内容分发的 CDN 网络。而更重要的是,通过 kubeCDN,用户不再需要第三方的内容分发网络,从而重新控制了原本就属于自己的从服务器到用户设备的数据流。kubeCDN 目前只是一个个人项目,但是这里体现出来的思想确实至关重要的:在不久的未来,每一朵云、每一个数据中心里都会布满 Kubernetes 项目,这将会成为未来云时代基础设施的“第一假设”。 推荐你阅读 InfoQ 的解读文章来进一步了解 kubeCND。

本周阅读推荐

  • 《Knative 入门——构建基于Kubernetes的现代化Serviceless应用》中文版,这是一本O’Reilly 出品的免费电子书,已经由 servicemesher 社区组织完成翻译。提供 在线阅读PDF下载
  • 信通院发起的云原生产业联盟出具《云原生技术实践白皮书》,白皮书系统性地梳理了云原生概念、关键技术、应用场景、发展趋势及实践案例。PDF链接
  • 阿里云 PB 级 Kubernetes 日志平台建设实践》Kubernetes 近两年来发展十分迅速,已经成为容器编排领域的事实标准,但是 Kubernetes 中日志采集相对困难。本文来自InfoQ记者的采访,文中谈及了如何让使用者专注在“分析”上,远离琐碎的工作。
  • Istio Observability with Go, gRPC, and Protocol Buffers-based Microservices》,这是一篇很长的博文,介绍可以与Istio相适配的观测性组件,用实际的例子演示了如何对以Go语言、Protobuf和gRPC为基础的微服务框架进行全面的观测。如果你还对Prometheus、Grafana、Jaeger和Kiali这几个组件感到既熟悉又陌生,并且好奇如何把它们组合在一起使用来提升微服务的可观测性,这个博客的内容应该会对你很有帮助。
  • 云原生的新思考:为什么说容器已经无处不在了?》这篇文章在对云原生技术总结的同时,对未来应用趋势走向进行了展望。“云原生不但可以很好的支持互联网应用,也在深刻影响着新的计算架构、新的智能数据应用。以容器、服务网格、微服务、Serverless 为代表的云原生技术,带来一种全新的方式来构建应用。”

名词解释:KEP - Kubernetes Enhancement Proposal, 即 Kubernetes 上游设计文档


本周报由阿里巴巴容器平台联合蚂蚁金服共同发布

本周作者:张磊,临石,浔鸣,天千,至简,傅伟,汤志敏, 王夕宁
责任编辑:木环


前期周报回顾

云原生生态周报 Vol. 2 | Istio中Envoy 代理漏洞已修复
云原生生态周报 Vol. 1 | 谷歌云发布Cloud Run

目录
相关文章
|
22天前
|
运维 Cloud Native 云计算
云原生技术:构建灵活高效的应用生态
随着云计算技术的不断发展,云原生技术作为一种全新的应用开发和部署模式,正逐渐成为业界关注的焦点。本文将介绍云原生技术的基本概念、优势以及在构建灵活高效的应用生态方面的应用实践,以期为读者提供全面了解云原生技术的视角。
|
1月前
|
供应链 Cloud Native 安全
云原生时代下,操作系统生态的挑战与机遇
人工智能、大数据、云计算等新技术的发展也对操作系统的灵活度和智能化提出新的要求。
|
1月前
|
Java 网络安全 开发者
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
43 0
|
2月前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速迭代的软件开发周期中,确保应用的一致性、可移植性与易于管理成为了开发与运维团队面临的重大挑战。本文旨在介绍如何通过Docker容器技术,有效地解决这些问题,特别是针对Java应用。我们将从Docker的基本概念出发,逐步深入到实际操作,展示如何将传统的Java应用容器化,以及这一过程如何帮助简化部署流程、提高应用的可靠性和可伸缩性。不同于常规的技术文章,本文试图以一种更加易于理解和实践的方式,让读者能够快速掌握容器化技术,并将其应用于日常的开发与运维工作中。
90 0
|
2月前
|
运维 Java Linux
深入解析:使用Docker容器化技术提升Java应用的部署效率
在快速迭代的软件开发周期中,如何保证应用的快速、一致和可靠部署成为了开发团队需要面对的重大挑战。本文将探讨如何利用Docker容器化技术,结合Java应用,实现高效、一致的部署流程。我们将从Docker的基本概念出发,详细介绍将Java应用容器化的步骤,包括创建Dockerfile、构建镜像以及运行容器等关键环节,并通过示例代码加以说明。此外,本文还将讨论在使用Docker部署Java应用时可能遇到的常见问题及其解决策略,旨在为读者提供一种提升部署效率、优化开发流程的有效方法。
303 2
|
2月前
|
Java 持续交付 虚拟化
深入浅出:使用Docker容器化改善Java应用的开发与部署流程
在快速迭代与持续集成的软件开发周期中,确保应用在各种环境中一致运行是一个挑战。本文介绍了如何利用Docker容器技术,来容器化Java应用,以实现环境一致性、简化配置和加速部署过程。我们将从Docker的基础知识开始,探讨其与传统虚拟机的区别,进而深入到如何创建Dockerfile,构建镜像,以及运行和管理容器。此外,文章还将涵盖使用Docker Compose来管理多容器应用的策略,以及如何利用容器化改善CI/CD流程。通过本文,读者将获得关于如何高效地利用Docker改善Java应用开发与部署流程的实践指导。
159 1
|
2月前
|
运维 Java 云计算
深入浅出:使用Docker容器化改进Java应用部署
在当前快速演变的软件开发领域,Docker作为一种开源的容器化技术,已经成为优化应用部署、实现快速交付和高效率运维的关键工具。本文将探讨如何利用Docker容器化技术来改进Java应用的部署流程。我们不仅会介绍Docker的基础知识,还会通过一个实际的Java应用示例,详细展示从创建Dockerfile到构建镜像,再到运行容器的整个过程。此外,文章还将探讨容器化带来的好处,如环境一致性、便捷的版本控制和简化的部署流程等,力求为读者提供一个清晰、易懂的指南,帮助他们在自己的项目中实现Docker容器化,从而提升开发和部署效率。
170 1
|
2月前
|
运维 Java 持续交付
深入浅出:使用Docker容器化改善Java应用的部署与运维
在当今快速发展的软件开发领域,持续集成与持续部署(CI/CD)已成为提高开发效率和软件质量的关键。本文将探讨如何利用Docker容器技术,实现Java应用的高效部署与运维。我们将从Docker的基本概念入手,详细介绍如何将传统的Java应用容器化,并通过实际案例展示容器化带来的便利性和高效性。此外,文章还将探讨Docker容器与传统虚拟机部署方式的对比,以及如何在实际项目中选择最适合的部署策略。通过本文,读者将能够深入理解Docker容器化技术,并学会如何在自己的Java项目中实施和优化。
227 1
|
2月前
|
运维 Java 开发者
深入浅出:使用Docker容器化改善Java应用的部署与运维
在快速迭代与持续集成的开发周期中,如何确保Java应用的一致性、高效部署及易于管理成为了开发与运维团队面临的重大挑战。本文将探讨Docker容器技术如何为Java应用提供一种轻量级、可移植的解决方案,实现环境一致性、简化配置过程并提高开发到生产的流程效率。我们将从Docker的基本概念入手,通过实例详细说明如何将传统的Java应用容器化,以及如何利用Docker Compose来管理多容器应用,最后探讨在使用Docker部署Java应用时的最佳实践和常见问题解决策略。
254 1
|
2月前
|
存储 Java Docker
深入浅出:使用Docker容器化改进Java微服务架构
在快速演进的软件开发领域,微服务架构已成为构建可扩展、灵活且独立部署的应用程序的首选模式。然而,随着服务数量的增加,管理与部署这些服务的复杂性也随之上升。本文将探讨如何利用Docker容器技术,简化并优化Java微服务架构的开发、部署和运维流程。通过具体实例,我们将展示容器化如何为微服务架构带来的高效性、一致性和可伸缩性,从而使开发团队能够更加专注于业务逻辑的实现,而非环境的搭建与维护。
22 1