【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(下)

举报
愚公搬代码 发表于 2022/02/21 15:30:47 2022/02/21
【摘要】 本文介绍的内容主要有:Ingress Controller机制剖析、CNI接口机制与插件实现原理、云原生网络最佳实践、云原生网络典型问题案例

前言

上一篇文章大家了解了kubernetes容器网络和Service的基本模型

  • Kubernetes基本网络模型剖析
  • Service基本网络模型剖析
  • 华为云CCE Yantse网络方案和架构剖析

本文主要介绍

  • Ingress Controller机制剖析
  • CNI接口机制与插件实现原理
  • 云原生网络最佳实践与典型问题案例

一、Ingress Controller机制剖析

1.Ingress API接口模型与演进

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

  • SSL
  • 认证鉴权
  • IP白名单
  • 限流
  • 日志与监控
  • 响应缓存
  • Web应用防火墙
  • GZIP压缩
  • 静态内容服务

在这里插入图片描述

2.Ingress Controller架构剖析

在这里插入图片描述

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

1.CNI接口与插件能力模型

1.JSON-based配置
2.支持内置标准配置关键字和插件扩展关键字
3.通过标准输入stdin向插件二进制传入配置
4.配置可以保存在磁盘也可以由运行时生成
在这里插入图片描述
CNI配置样例:

{
	"name":
	"mynet""type":"bridge"
	"bridge":"mynete""isDefaultGateway":true"forceAddress":false"ipMasq":true"hairpinMode":true"ipam":{
		"type":"host-local""subnet":"10.10.0.0/16"
	}
}

相关网址:

2.CNI在K8S中是如何工作的

CNI调用过程:

1.CNI支持的接口命令有:

  • ADD,DEL,CHECK and VERSION

2.插件名即是可执行文件名
3.运行时根据网络操作发起相应的插件进程命令
4.通过标准输入传入JSON格式的配置
5.指定容器的特殊配置也从标准输入stdin传入
6.插件的返回结果从标准输出传回stdout
7.多种插件和能力的链式调用,失败即终止,成功则继续,最终由插件结果返回给运行时

在这里插入图片描述

3.CNI高级特性举例

在这里插入图片描述
CNI支持多网口、多网络平面方案:

三、云原生网络最佳实践

1.IDC与CEE集群共享DNS方案

某企业APP微服务:

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

CCE所在的VPC和原有的IDC之间通过专线进行连接的图示如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.微服务容器实例访问云数据库等中间件的网络隔离方案

CCETurbo容器安全组:

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

在这里插入图片描述

四、云原生网络典型问题案例

1.源地址保持的"锅"?

容器服务通过ELB访问集群内的其他服务时,出现时延陡增异常
在这里插入图片描述

2.时延去哪儿了?

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

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

在这里插入图片描述

总结

1.ingress的理解

ingress相当于一个7层的负载均衡器,是k8s对反向代理的一个抽象。可以理解成在Ingress里建立一个个映射规则,ingress Controller通过监听Ingress这个api对象里的配置规则并转化成Nginx的配置(kubernetes声明式API和控制循环),然后对外部提供服务。ingress包括:ingress controller和ingress resources

  • ingress controller:核心是一个deployment,实现方式有很多,比如nginx,Contour,Haproxy,trafik,Istio,需要编写的yaml有:Deployment,Service,ConfigMap,ServiceAccount(Auth),其中service的类型可以是NodePort或者LoadBalancer。
  • ingress resources:这个就是一个类型为Ingress的k8s api对象,这部分是面向开发人员。

在这里插入图片描述

2.CNI的理解

CNI的全称是Container Network Interface,Google和CoreOS联合定制的网络标准,这个标准基于rkt实现多容器通信的网络模型。

生产中的网络环境可能是多种多样的,有可能是二层连通的,也可能是用公有云的环境,所以各个厂商的网络解决方案百花争鸣,这些解决方案也不能全都集成在kubelet的代码中,所以CNI就是能让各个网络厂商对接进来的接口。

3.结尾

本文介绍的内容主要有:Ingress Controller机制剖析、CNI接口机制与插件实现原理、云原生网络最佳实践、云原生网络典型问题案例。通过以上讲解相信大家对Kubernetes网络架构理解更深了,Kubernetes网络架构原理深度剖析内容就到此完结,谢谢光看。

华为云官网链接:

Kubernetes官方文档:


本文整理自华为云社区【内容共创】活动第13期。

查看活动详情:https://bbs.huaweicloud.com/blogs/330939

相关任务详情:任务24.华为云云原生钻石课程07:Kubernetes网络架构原理深度剖析(下)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。