前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云原生钻石课程 | 第7课:Kubernetes 网络架构原理深度剖析(下)

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

作者头像
xcbeyond
发布2022-12-18 09:33:32
5870
发布2022-12-18 09:33:32
举报
文章被收录于专栏:技术那些事技术那些事

本篇文章来自《华为云云原生王者之路训练营》钻石系列课程第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由于网络转发时延造成

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿技术大咖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档