前言一、Ingress Controller机制剖析
1.Ingress API接口模型与演进2.Ingress Controller架构剖析 二、CNI接口机制与插件实现原理
1.CNI接口与插件能力模型2.CNI在K8S中是如何工作的3.CNI高级特性举例 三、云原生网络最佳实践
1.IDC与CEE集群共享DNS方案2.微服务容器实例访问云数据库等中间件的网络隔离方案 四、云原生网络典型问题案例
1.源地址保持的"锅"?2.时延去哪儿了? 总结
1.ingress的理解2.CNI的理解3.结尾
前言
上一篇文章大家了解了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"}}
相关网址:
SPEC:https://github.com/containernetworking/cniPluains: https://github.com/containernetworking/plugins 2.CNI在K8S中是如何工作的
CNI调用过程:
1.CNI支持的接口命令:
ADD,DEL,CHECK and VERSION
2.插件名即是可执行文件名
3.运行时根据网络操作发起相应的插件进程命令
4.通过标准输入传入JSON格式的配置
5.指定容器的特殊配置也从标准输入stdin传入
6.插件的返回结果从标准输出传回stdout
7.多种插件或能力链式调用,失败即终止,成功则继续,由将最终插件结果返回给运行时
CNI支持多网口、多网络平面方案:
https://github.com/k8snetworkplumbingwg/multus-cnihttps://github.com/cni-genie/CNl-Genie 三、云原生网络最佳实践 1.IDC与CEE集群共享DNS方案
某企业APP微服务:
管理后台部署在华为云CCE集群内容审核服务部署在企业原有的IDC使用华为云图像识别服务
CCE所在的VPC和原有的IDC之间通过专线进行连接的图示如下:
CCETurbo容器安全组:
按访问控制要求为访问端和被访 问端创建相应的安全组及关联规 则将相应的安全组关联到被访问服 务的实例网口,如:SG-RDS创建安全组CRD对象,通过选择 POD标签,将安全组ID关联到特 定的微服务工作负载的POD网口 四、云原生网络典型问题案例 1.源地址保持的"锅"?
容器服务通过ELB访问集群内的其他服务出现时延陡增异常
某客户从虚机迁移到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对象了,这部分则是面向开发人员。
Kubernetes给出的方案就是Ingress,Ingress包含了两大主件Ingress Controller和Ingress。
Ingress解决的是新的服务加入后,域名和服务的对应问题,基本上是一个ingress的对象,通过yaml进行创建和更新进行加载。Ingress Controller是将Ingress这种变化生成一段Nginx的配置,然后将这个配置通过Kubernetes API写到Nginx的Pod中,然后reload.(注意:写入 nginx.conf 的不是service的地址,而是service backend 的 pod 的地址,避免在 service 在增加一层负载均衡转发) 2.CNI的理解
CNI的全称是Container Network Interface,Google和CoreOS联合定制的网络标准,这个标准基于rkt实现多容器通信的网络模型。
生产中的网络环境可能是多种多样的,有可能是二层连通的,也可能用的公有云的环境,所以各个厂商的网络解决方案百花争鸣,这些解决方案也不能全都集成在kubelet的代码中,所以CNI就是能让各个网络厂商对接进来的接口。
3.结尾本文介绍的内容主要有:Ingress Controller机制剖析、CNI接口机制与插件实现原理、云原生网络最佳实践、云原生网络典型问题案例。通过以上讲解相信大家对Kubernetes网络架构理解更深了,Kubernetes网络架构原理深度剖析内容就到此完结,谢谢光看。
华为云官网链接:
https://support.huaweicloud.com/usermanual-cce/cce_01_0249.htmlhttps://support.huaweicloud.com/usermanual-cce/cce_01_0094.html
Kubernetes官方文档:
、Ingress: https://kubernetes.io/docs/concepts/services-networking/ingress/
本文整理自华为云社区【内容共创】活动第13期。
查看活动详情:https://bbs.huaweicloud.com/blogs/330939
相关任务详情:任务24.华为云云原生钻石课程07:Kubernetes网络架构原理深度剖析(下)