云原生钻石课程 | 第7课:Kubernetes 网络架构原理深度剖析(下)

本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第7课,由华为云容器基础设施团队主任工程师Jimmy主讲,深入讲解Ingress和容器网络CNI在Kubernetes实现方法。

01

Ingress Controller机制剖析

Ingress API接口模型与演进

为K8S集群内服务提供聚合统一的访问入口。除了提供丰富的七层(HTTP)路由功能外,Ingress实现中也提供了丰富服务治理能力,但不同实现(IngressClass)在部署方式和功能特性上存在差异,造成了一些接口上的混乱。

目前,Ingress API的接口模型正在进行一些演进,接口的通用性、表达能力和更清晰的角色划分,驱动Ingress API向Gateway API演进。

Ingress Controller 架构剖析

但对于Ingress Controller整个实现架构与处理流程而言,并没有特别大的变化,这就是采用接口机制和底层实现解耦的好处,如下图所示:

左图为社区开源的Ingress-nginx Controller方案,在业内被广泛使用。其好处是不依赖商用的组件,可以在客户自建或托管的K8s集群中引入Ingress-nginx Controller插件,来实现Ingress的功能。

右图为各大公有云服务商提供的基于自己七层负载均衡Ingress方案,其实现原理与nginx类似,不过其转发代理采用了云服务商提供的标准的七层代理服务,通常称为应用负载均衡的能力。在K8s集群中部署的Ingress Controller一般也是多实例、高可用部署,也存在选组的过程。成为主的控制器,operator会watch API-Server相应配置资源的变化,调用ALB API接口来配置ALB负载均衡和路由匹配规则,转发到相应的service后端,从原理而言与开源社区的方案是一致的。

02

CNI接口机制与插件实现原理

CNI接口与插件能力模型

上节课提到的K8s网络模型方案,这些网络模型是如何与K8s调度编排Master协同工作起来的,实际是通过CNI插件,CNI插件实际是一个接口的标准。

下图为CNI基本实现的模型:

CNI实际是依赖容器运行时调用CNI接口,CNI接口通过容器运行时传给它的参数,这些参数是以.JSON格式生成的,通过标准输入向插件的二进制进程传入配置,配置既可以是保存在磁盘也可以由运行时生成。

CNI 配置样例:

CNI在K8S中是如何工作的?

CNI在K8S中的工作流程如下图所示:

CNI调用过程:

  • CNI支持的接口命令: ADD, DEL, CHECK and VERSION
  • 插件名即是可执行文件名
  • 运行时根据网络操作发起相应的插件进程命令
  • 通过标准输入传入JSON格式的配置
  • 指定容器的特殊配置也从标准输入stdin传入
  • 插件的返回结果从标准输出传回stdout
  • 多种插件或能力链式调用,失败即终止,成功则继续 ,由将最终插件结果返回给运行时

CNI高级特性举例

对于某些特定业务,需要复杂的CNI创建过程,普通的微服务基本创建一个网口就可以达到目标,但一些特殊的场景如通讯、运营商行业的场景需要将流量通过入口传入,通过另外一个网口传出做防火墙控制或流量清洗,则需要多网口方案。

K8s社区也有相应的CNI组件帮助不同的业务来实现这些能力,比较代表性的是multus和Genie。

CNI支持多网口、多网络平面方案:

https://github.com/k8snetworkplumbingwg/multus-cni

https://github.com/cni-genie/CNI-Genie

典型案例如下图:

03

云原生网络最佳实践与典型问题案例

云原生网络最佳实践1-IDC与CCE集群共享DNS方案

某企业APP微服务:

  • 管理后台部署在华为云CCE集群
  • 内容审核服务部署在企业原有的IDC
  • 使用华为云图像识别服务

CCE所在的VPC和原有的IDC之间通过专线进行连接。

云原生网络最佳实践2-微服务容器实例访问云数据库等中间件的网络隔离方案

CCE Turbo容器安全组:

  • 按访问控制要求为访问端和被访问端创建相应的安全组及关联规则
  • 将相应的安全组关联到被访问服务的实例网口,如: SG-RDS
  • 创建安全组CRD对象,通过选择POD标签,将安全组ID关联到特定的微服务工作负载的POD网口

K8s容器网络典型问题定位1-源地址保持的“锅”?

容器服务通过ELB访问同集群内的其他服务出现时延陡增异常

K8s容器网络典型问题定位2-时延去哪儿了?

某客户从虚机迁移到CCE容器集群:

  • 业务容器化部署,通过LoadBalance服务由ELB对外暴露
  • 压测工具测试结果显示,同等压力下平均响应23ms,比原虚机部署性能下降5ms,与ELB的监控数据一致
  • 业务监控普罗显示,业务的平均响应时延15ms,怀疑8ms由于网络转发时延造成

感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!