天天看点

微服务应用场景下落地 K8s 的困难分析

近些年企业应用开发架构发生了细微的变化,根据康威定律,由于企业组织架构的变化,导致微服务应用体系开始在企业应用开发过程中流行起来。微服务是最近几年企业数字化转型过程中,在技术团队技术选型中比较常见的架构升级方案之一。在这个背景下,DevOps 团队为了应对企业架构的变化,迫切需要使用一套统一的基础设施来维护微服务应用的整个生命周期,这就给我们带来了新的挑战——如何应对微服务应用场景,平稳快速的落地 Kubernetes 集群系统。

基于 Kubernetes 下的微服务注册中心的部署问题

经典的微服务体系都是以注册中心为核心,通过 CS 模式让客户端注册到注册中心服务端,其它微服务组件才能互相发现和调用。当我们引入 Kubernetes 之后,因为 Kubernetes 提供了基于 DNS 的名字服务发现,并且提供 Pod 级别的网格,直接打破了原有物理网络的单层结构,让传统的微服务应用和 Kubernetes 集群中的微服务应用无法直接互联互通。为了解决这个问题,很多技术团队会采用如下两种方式来打破解决这种困境。

创建大二层网络,让 Pod 和物理网络互联互通

这个思路主要的目的是不要改变现有网络结构,让 Kubernetes 的网络适应经典网络。每一个 Pod 分配一个可控的网络段 IP。常用的方法有 macvlan、Calico BGP、Contiv 等。这样的做法直接打破了 Kubernetes 的应用架构哲学,让 Kubernetes 成为了一个运行 Pod 的资源池,而上面的更多高级特性 Service,Ingress、DNS 都无法配合使用。随着 Kubernetes 版本迭代,这种阉割功能的 Kubernetes 架构就越来越食之无味弃之可惜了。

注册中心部署到 Kubernetes 集群中,外网服务直接