本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第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由于网络转发时延造成
感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!