与容器服务 ACK 发行版的深度对话第二弹:如何借助 hybridnet 构建混合云统一网络平面

简介:本次采访我将继续为大家详细讲解我的好伙伴:阿里巴巴的开源 Kubernetes 容器网络解决方案 hybridnet,以及我是如何借助它来构建混合云统一网络平面。

作者:若禾、昱晟、瑜佳

记者:各位阿里巴巴云原生的读者朋友们大家好,欢迎再次来到探究身世之谜系列专访栏目,今天邀请来的还是大家的老朋友,『阿里云容器服务 ACK 发行版』,上次的访谈中它为我们介绍了阿里巴巴开源集群镜像技术 sealer,以及它们是如何相互配合来达成阿里云 ACK 服务的快速稳定交付。错过的读者不要忘记去回顾一下哦~那么这次做客,它又会为我们介绍哪位小伙伴呢?

阿里云容器服务 ACK 发行版(简称 ACK Distro):大家好,我们又见面了!相信经过上次的自我介绍,你们对我已经有了大概的了解,这次就不多赘述了。本次采访我将继续为大家详细讲解我的好伙伴:阿里巴巴的开源 Kubernetes 容器网络解决方案 hybridnet,以及我是如何借助它来构建混合云统一网络平面。

记者:好的,那您请先谈一下 hybridnet 是什么以及项目组成员是出于怎样的设计理念才诞生了 hybridnet。

hybridnet 的定义及其设计理念

ACK Distro:好的,首先 hybridnet 是阿里巴巴开源的一款面向混合云场景的 Kubernetes 容器网络解决方案。它可以帮助用户在物理机和虚拟机的异构环境之上,构建一层 underlay + overlay 的统一网络平面,并提供丰富的管控运维能力。同时为混合云场景下集群部署和应用交付过程中出现的容器网络部署及运维问题,提出了一种全新的解决思路。

它的基本设计准则是:

  1. 为了确定统一网络模型,降低认知与维护成本,并且保证稳定的长期演进
  2. 屏蔽底层异构基础设施,提升交付落地鲁棒性,降低生产交付、PoC 成本
  3. 在统一模型的约束下,既能提供 underlay 高性能直通网络方案,来满足网络打通和性能的双重需求,又能支持在某些性能不敏感的场景下提供 overlay 虚拟网络方案
  4. 尽量降低对于外部环境的依赖,保证数据面的简单
  5. 与 Kubernetes 深度集成,提供双栈、IP 保持、IP 固定等高阶 IPAM 能力,保证用户上云后使用习惯不变

不同于与单一 IaaS 厂商的公有云或专有云底座绑定输出的 terway、aws-cni 等容器网络方案,项目组成员希望 hybridnet 能够解决多云混合云场景下异构底座带来的一致性和适配性难题,在不同的基础网络环境上提供敏捷、通用和稳定的交付能力,并且通过统一视角的模型约束和运维管控,解决复杂场景下的网络规划、管理及运维等问题。

记者:那我是不是可以这么理解,hybridnet 力求做到“underlay/overlay 混合部署” 和“underlay/overlay 统一管理运维”。

ACK Distro:是的没错,hybridnet 也确实做到了。我可以再拓展描述下,在一个使用了 hybridnet 的 Kubernetes 集群中,同一个节点上可以同时有 underlay 和 overlay的 Pod,所有 Pod 之间的集群内部访问行为完全一致不需要任何额外感知。这样,用户可以在“纯 overlay 集群”、“纯 underlay 集群”、“underlay 混合集群” 之间进行自由选择和转化,同时享受 underlay 网络带来的高性能和网络直通能力,以及 overlay 网络的资源无限和高适配性。而且在统一模型的约束下,underlay 网络和 overlay 网络在管理、运维上也保持了概念一致。 

记者:除了它的设计理念,您可以用更直观的方法让读者明白 hybridnet 可以做什么吗?

ACK Distro:当然,我从介绍它的核心模型入手阐释其功能属性吧~为了使 hybridnet 的使用者可以通过初始化不同的核心模型来对基础网络环境进行灵活多样地描述,让容器网络以不同的形态运行,项目组成员通过对经典网络中的概念进行抽象,引入了下面三个核心 CRD 模型来对网络资源进行抽象和管理。

hybridnet 的核心模型

Network

在 hybridnet 中,每个 Network 表示一个“调度域“,一个调度域表示一组具有相同网络性质的节点,Network 是环境拓扑信息传入的主要入口。一个特定的 IP 可以在其所属调度域内的各个节点间自由迁移。

Network 通过 nodeSelector 与节点相关联,对于一些特殊的 Network,比如 overlay 的 Network,nodeSelector 可能为空,这种 Network 的调度域为集群内的所有节点。

Subnet

在 hybridnet 中,Subnet 表示一个调度域内可以分配的 IP 资源,Subnet 是环境网络 IP 资源规划信息传入的主要入口。每个 Subnet 必须属于一个 Network。Subnet 具有比较灵活的属性:

  • 支持 cidr 可分配地址范围的选择,通过 spec.range.start 和 spec.range.end 可以从一个 cidr 中再精确地划分出一个小的网段
  • 支持保留离散的 IP 地址不分配,当网段中已经有 IP 地址被使用了的时候,可以通过将已经被使用了的 IP 填写入 spec.range.excludeIPs 的数组字段,hybridnet 将不会再将这些 IP 分配给 Pod
  • 支持保留指定的 IP 不被使用,当网段中需要保留某些 Pod 的 IP,仅被特定的 Pod 指定使用时,可以通过将这些 IP 填写入 spec.range.reservedPs 的数组字段,hybridnet 将不会再把这些 IP 用于非指定 IP 的分配

IPInstance

IPInstance 目前只用作监控,每个 IPInstance 代表一个实际已经被分配出容器网络的 IP。能够通过 kubectl get IPInstance 看到其对应的 Pod、所属 Subnet、Pod 对应的节点等等信息。

记者:那么 hybridnet 的优势如何在您身上体现呢?换句话说,您怎样管理 hybridnet 以达到最佳实践呢?

如何在 ACK Distro 中管理 hybridnet

ACK Distro:我通过操作上述的 CRD 模型来为大家进行网络管理操作示例吧~
其中,hybridnet 会作为我唯一内置的网络插件部署。(当然啦,通过 sealer 的能力,自定义第三方的网络插件也是可行的,大家可以参考本系列第一篇文章。)

默认行为

作为我的固定行为,初始化一定会存在一个 overlay 的 Network,并且此时默认网络类型是 overlay,通过下面命令可以查看此时的 Network 和 Subnet 信息:

[root@iZf8zdygpbo4hx57g2wahaZ ~]# kubectl get network
NAME        NETID   SWITCHID
network-0   4       virtual-switch
[root@iZf8zdygpbo4hx57g2wahaZ ~]# kubectl get subnet
NAME                 VERSION   CIDR            START   END   GATEWAY      TOTAL   USED   AVAILABLE   NETID   NETWORK
subnet-0-network-0   4         100.64.0.0/16                 100.64.0.1   65533   2      65531               network-0

大家可以看到,用默认配置初始化的我会创建一个名叫 network-0 的 Network 和 subnet-0-network-0 的 Subnet,容器网段的 CIDR 为 100.64.0.0/16,此时新创建的 Pod 都会以 overlay 的方式拉起。

因为我的基础组件本身没有特别的网络诉求,这样最大的好处是,overlay 网络帮助我屏蔽了底层基础网络设施,换言之,我可以借助 hybridnet 以相同的配置在任何网络环境中一键拉起,同时并不影响后续网络扩展的可能性。

从混合云环境的交付经验来看,这种方式能将网络规划(主要是 underlay 网络)延后到“运维”的阶段,可以最小化“交付”阶段的落地成本,提升部署效率。

添加 underlay 网络

如果存在部分 underlay 网络诉求(比如出于“overlay 性能瓶颈” 或者 “Pod IP 对外直接透出能力”的考虑),underlay Pod 占比较少,特别是您不希望占用基础网络环境中的 IP 资源时,可以选择在默认行为创建的 overlay Network 之外,额外添加一个 underlay 的 Network 以及对应的 Subnet。(新旧 overlay/underlay Network 在模型上没有任何依赖顺序关系)

在这次示例的实验环境中,节点网段为 192.168.56.0/24(所有节点在一个经典二层网络中),因为节点 IP 只用了 192.168.56.1、192.168.56.2、192.168.56.3、192.168.56.4,我们考虑将未被使用的 192.168.56.100~192.168.56.150 地址范围留给容器使用,搭建一个最简单的 underlay 网络。这种情况我们只需要应用如下 yaml:

---
apiVersion: networking.alibaba.com/v1
kind: Network
metadata:name: underlay-network1
spec:netID: 0nodeSelector:network: network1type: Underlay---
apiVersion: networking.alibaba.com/v1
kind: Subnet
metadata:name: underlay-subnet1
spec:network: underlay-network1netID: 0range:version: "4"cidr: "192.168.56.0/24"gateway: "192.168.56.254"start: "192.168.56.100"end: "192.168.56.150"

因为 Network 通过 nodeSelector 关联 Node,我们需要给想要部署 underlay Pod 的节点打上对应 Network nodeSelector 的标签,这里我们只希望在节点   izf8zdygpbo4hx57g2wah8z 上有 underlay 类型的 Pod:

kubectl label node izf8zdygpbo4hx57g2wah8z network=network1

此时默认网络类型仍然是 overlay 网络,创建 underlay 的 Pod 只需要简单通过给 Pod 添加 networking.alibaba.com/network-type: Underlay 的 annotation 指定。效果如图:

[root@iZf8zdygpbo4hx57g2wahaZ ~]# kubectl get po -owide -n test
NAME                                 READY   STATUS    RESTARTS   AGE     IP               NODE                      NOMINATED NODE   READINESS GATES
curl-deployment-1-5cfb5dcb8c-65fr7   1/1     Running   0          11m     100.64.0.29      izf8zdygpbo4hx57g2wahbz   <none>           <none>
curl-deployment-1-5cfb5dcb8c-hp626   1/1     Running   0          11m     100.64.0.26      izf8zdygpbo4hx57g2wahbz   <none>           <none>
curl-deployment-1-5cfb5dcb8c-qbr6w   1/1     Running   0          11m     100.64.0.27      izf8zdygpbo4hx57g2wah7z   <none>           <none>
curl-deployment-1-5cfb5dcb8c-zclv2   1/1     Running   0          11m     100.64.0.31      izf8zdygpbo4hx57g2wahbz   <none>           <none>
curl-deployment-1-5cfb5dcb8c-zfqkp   1/1     Running   0          11m     100.64.0.28      izf8zdygpbo4hx57g2wah7z   <none>           <none>
curl-ss-0                            1/1     Running   0          6m24s   192.168.56.140   izf8zdygpbo4hx57g2wah8z   <none>           <none>
curl-ss-1                            1/1     Running   0          6m5s    192.168.56.141   izf8zdygpbo4hx57g2wah8z   <none>           <none>
curl-ss-2                            1/1     Running   0          6m1s    192.168.56.142   izf8zdygpbo4hx57g2wah8z   <none>           <none>

修改默认网络类型为 underlay

如果您 underlay 的网络诉求占绝大多数,希望默认创建出来的就是 overlay 的 Pod,也可以修改默认网络类型为 underlay,修改完之后,默认会以 underlay 的网络创建 Pod,并且仍然可以通过给 Pod 添加 annotation 的方式指定 Pod 以 overlay 的网络被创建。已经创建的 overlay Pod 不会受到影响。

修改默认网络类型需要分别 kubectl edit deploy hybridnet-webhook -n kube-system 和 kubectl edit deploy hybridnet-manager -n kube-system,修改容器启动的 DEFAULT_NETWORK_TYPE 环境变量为 Underlay:

spec:containers:- name: hybridnet-[manager|webhook]           command:- /hybridnet/hybridnet-[manager|webhook]env:- name: DEFAULT_NETWORK_TYPE# "Overlay" or "Underlay", # default "Underlay" if environment variable not configured. value: Underlay

这样修改完之后,Pod 将会默认以 underlay 的方式被创建,新的 underlay Pod 与原有 overlay Pod 的网络连通性不受影响(简单来说,相当于 underlay Pod 会有一个与其他 overlay Pod 通信的 overlay 的身份)。  

添加/删除网络资源

就如同上面示例中展示的,添加 Network/Subnet 的网络资源只需要应用对应 CR 的 yaml 即可,一旦 Network/Subnet 被应用,hybridnet 会认为环境中已经完成基础网络配置,并且使用对应 CR 进行网络资源分配。

出于安全角度考虑,删除 Network/Subnet 的操作是有基本约束的。只有当 Subnet 中没有 IP 在被使用时,Subnet 本身才能被删除;同理,只用先删除 Network 中的所有 Subnet,Network 本身才能被删除。

ACK Distro:总而言之,借助 hybridnet ,我可以使阿里云容器服务 ACK 在异构环境之上,构建一层 underlay + overlay 的统一网络平面,提高管控运维能力,为广大的开发者带来更好的容器服务体验。

记者:好的,十分感谢您这次的细心讲解,第二弹深度访谈到这里又要跟大家说再见了,期待下次与读者朋友们的相遇。

ACK Distro:我们下次再见!

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EventBridge消息路由|高效构建消息路由能力

简介&#xff1a;企业数字化转型过程中&#xff0c;天然会遇到消息路由&#xff0c;异地多活&#xff0c;协议适配&#xff0c;消息备份等场景。本篇主要通过 EventBridge 消息路由的应用场景和应用实验介绍&#xff0c;帮助大家了解如何通过 EventBridge 的消息路由高效构建消…

哪吒汽车选择BlackBerry QNX为中国新能源轿跑——哪吒S保驾护航

BlackBerry与合众新能源汽车有限公司近日宣布达成合作&#xff0c;合众汽车旗下汽车品牌——中国造车新势力哪吒汽车&#xff0c;在其即将量产的运动型智享轿跑——哪吒S中搭载了BlackBerry QNX为其保驾护航&#xff0c;旨在确保关键系统的功能安全、网络安全与可靠性的同时&am…

异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题

简介&#xff1a;本文分为三个部分&#xff1a;概述中引入了积压问题&#xff0c;并介绍了函数计算异步调用基本链路&#xff1b;并在指标介绍部分详细介绍了指标查看方式&#xff0c;分类解读了不同的指标含义&#xff1b;最后以一个常见的异步请求积压场景为例&#xff0c;介…

并发-分布式锁质量保障总结

简介&#xff1a;并发问题是电商系统最常见的问题之一&#xff0c;例如库存超卖、抽奖多发、券多发放、积分多发少发等场景&#xff1b;之所以会出现上述问题&#xff0c;是因为存在多机器多请求同时对同一个共享资源进行修改&#xff0c;如果不加以限制&#xff0c;将导致数据…

以网强算,中国移动算网建设激发澎湃能量

近日&#xff0c;在首届中国算力大会上&#xff0c;中国工程院院士张宏科发表演讲认为&#xff0c;“信息网络已经成为大国博弈的核心与关键&#xff0c;面临机遇期&#xff0c;我们亟需新型网络体系与技术创新&#xff0c;满足自主可控和建设网络强国的重大战略需求&#xff0…

对象方法(包含es6)

1.Object.assign(target,source1,source2,...) 方法主要用于对象的合并&#xff0c;将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性&#xff0c;不拷贝继承的属性。&#xff08;从后向前覆盖&#xff09; Object.assign方法实行的是浅拷贝…

云上的移动性能测试平台

简介&#xff1a;功能决定现在&#xff0c;性能决定未来。欢迎大家围观《云上的移动性能测试平台》&#xff0c; 了解EMAS性能测试平台的能力与规划。 1. 功能决定现在&#xff0c;性能决定未来 性能测试在移动测试领域一直是一个大难题&#xff0c;它最直观的表现是用户在前…

Docker 镜像和容器的导入导出及常用命令

作者 | 微枫Micromaple来源 | CSDN博客Docker 镜像和容器的导入导出1.1 镜像的导入导出1.1.1 镜像的保存通过镜像ID保存方式一&#xff1a;docker save image_id > image-save.tar例如&#xff1a;rootUbuntu:/usr/local/docker/nginx# docker imagesREPOSITORY TAG …

阿里云「低代码音视频工厂」正式上线,为企业用户打造音视频应用开发最短路径

简介&#xff1a;vPaaS全新定义企业级音视频应用开发 1月5日&#xff0c;阿里云视频云“低代码音视频工厂vPaaS“正式上线&#xff0c;极大程度降低音视频开发门槛&#xff0c;打破传统音视频技术壁垒&#xff0c;全新定义企业级的音视频应用开发。 低代码音视频工厂基于云原生…

数组方法 包含es6

有回调函数的方法都有两个参数&#xff08;不写默认是window) 例&#xff1a;map&#xff0c;forEach&#xff0c;find let arr[1,2,3,4]; let obj{a:1,b:2}; let _thisnull; arr.map(v>{_thisthisreturn v1 },obj) console.log(_this) 数组方法细则 方法功能参数返回值是…

阿里开源支持10万亿模型的自研分布式训练框架EPL(EasyParallelLibrary)

简介&#xff1a;EPL背后的技术框架是如何设计的&#xff1f;开发者可以怎么使用EPL&#xff1f;EPL未来有哪些规划&#xff1f;今天一起来深入了解。 作者 | 王林、飒洋 来源 | 阿里技术公众号 一 导读 最近阿里云机器学习PAI平台和达摩院智能计算实验室一起发布“低碳版”巨…

如何从 Docker 镜像里提取 dockerfile!

作者 | A-刘晨阳来源 | CSDN博客今天给大家分享一下 dockerfile 里面是如何写的&#xff0c;然后去查了查就有了新的发现——通过镜像来提取 dockerfile。从镜像中提取dockerfile的两种方法。history参数我们可以直接用docker自带的参数来查看镜像的dockerfile&#xff0c;但有…

新品发布|备案变更不用再担心中断服务啦

简介&#xff1a;ICP备案迁移服务&#xff0c;就是面向有计划变更域名备案主体&#xff0c;或者在不同主体间迁移网站备案信息的客户&#xff0c;实现迁移过程中域名或者网站服务不中断的备案增值服务。 说起ICP备案&#xff0c;做过互联网经营业务的朋友都很熟悉&#xff0c;…

一眼定位问题,函数计算发布日志关键词秒检索功能

简介&#xff1a;当 FaaS 应用出现很多报错&#xff0c;且调用日志页面的请求过多时&#xff0c;如何才能简单、快速地查到出现 bug 的原因&#xff1f; 听说这个问题你也遇到了&#xff1f; 小王是一名程序员&#xff0c;最近在使用 FaaS &#xff08…

如何在 Linux 中使用 rsync 传输文件

作者 | 刘光录来源 | TIAPrsync&#xff08;远程同步&#xff0c;Remote Sync&#xff09;是一种在系统中或两个系统之间复制文件和目录的同步工具。rsync 的一个最大的优点&#xff0c;就是它只复制更改的文件&#xff0c;因而可以减少 CPU 消耗&#xff0c;在复制文件时节省带…

es6 字符串

es6 新引入字符串方式 作用&#xff1a; 可以直接出现换行符 可以直接进行变量拼接 let name小红花 let str<ul><li>${name}</li></ul>

国民级消消乐背后的网络技术支持:不畏巨“峰”,“运”筹帷幄

简介&#xff1a;近日&#xff0c;阿里云网络携手乐元素共同部署建设了基于7层业务自动化调度的弹性网络架构&#xff0c;进一步提升乐元素在用户服务上的娱乐体验。提到乐元素相信大家都不陌生&#xff0c;作为从事移动网络游戏的研发、运营及广告平台&#xff0c;其代表作就是…

透析阿里云视频云「低代码音视频工厂」之能量引擎——vPaaS视频原生应用开发平台

简介&#xff1a;支撑15分钟上线高品质专属音视频平台 为满足企业用户极速搭建高品质专属音视频业务的需求&#xff0c;阿里云视频云的“低代码音视频工厂”应运而生&#xff0c;但极速而高品质的平台搭建诉求&#xff0c;需要用全新的开发方式才能真正实现&#xff0c;而全新…

自动驾驶“稳打地基”,小鹏汽车基于阿里云建自动驾驶AI智算中心算力可达600PFLOPS

数据驱动是自动驾驶发展的公认方向&#xff0c;也让自动驾驶模型训练成为一头“吃算力”的巨兽。自动驾驶的视觉检测、轨迹预测与行车规划等算法模型&#xff0c;有赖于机器学习海量数据集&#xff0c;但算力的不足让研发速度仍远远赶不上数据量增长的速度。随着传感器的进一步…

vue 利用hash值实现刷新无跳转页面

//子组件一定要有name值 <template><div><ul><li click"aaa(i)" v-for"(v, i) in nav" :key"i">{{ v }}</li><components :is"active"></components></ul></div> </templat…