Underlay 网络是底层基础网络,具有低延迟、可靠、安全等特性。这些特性能满足一些延时敏感的应用业务需求、提供优质的用户体验以及有效管理和保护网络资源,通常应用在延时敏感、防火墙安全管控中:
创新互联建站服务项目包括台江网站建设、台江网站制作、台江网页制作以及台江网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,台江网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到台江省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
随着数据中心私有云的不断普及,Underlay 网络作为数据中心网络架构的重要组成部分,已经被广泛应用于数据中心的网络架构中,以提供更高效的网络传输和更好的网络拓扑管理能力。
笔者最近在使用 Underlay 网络时,遇到了这样的场景:有一个集群,但集群的节点分布在不同地区或数据中心,一些节点的区域只能使用子网 10.6.1.0/24,一些节点的区域只能使用子网 172.16.2.0/24, 在此背景下,当一个应用跨子网部署副本时,要求 IPAM 能够在不同的节点上,为同一个应用下的不同 Pod 分配出与子网匹配的 IP 地址,且能正确运行。对此,希望能通过 IP 地址管理(IPAM)实现跨网络区域的 IP 分配,为应用程序提供灵活的部署和扩展性。
该场景的网络拓扑图如下:
通过上述场景,在 Underlay 网络下,同一应用的不同副本之间实现跨域网络的 IP 地址分配是生产场景中常见且需要去解决的需求。开源社区中的一个 Kubernetes 的 IPAM 插件项目:Spiderpool,带来一种全新的解决方案,它可以灵活而智能地实现跨网络区域的 IP 分配,一起来了解一下。
Spiderpool (https://github.com/spidernet-io/spiderpool) 是一个 Kubernetes 的 IPAM 插件项目,其主要针对于 Underlay 网络的 IP 地址管理需求而设计,能够为任何兼容第三方 IPAM 插件的 CNI 项目所使用。而基于跨越网络区域的 IP 分配是 Spiderpool 的一个重要功能支持,同时它还包括应用 IP 地址固定、IP 地址自动弹性扩缩容、多网卡、双栈支持等特点。更多说明参考 Spiderpool 功能 (https://github.com/spidernet-io/spiderpool/blob/main/README-zh_CN.md) 介绍。
为演示 Spiderpool 的跨网络区域分配 IP 的能力,笔者准备了一套跨网络区域的集群,并为节点打上可用的子网标签,以下是所使用的集群信息:
~# kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP
controller-node-1 Ready control-plane 1h v1.25.3 10.6.168.71
worker-node-1 Ready 1h v1.25.3 10.7.168.73
~# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
controller-node-1 Ready control-plane,master 1h v1.25.3 node-subnet=subnet-6, ...
worker-node-1 Ready 1h v1.25.3 node-subnet=subnet-7, ...
以下是笔者集群的网络拓扑图:
根据 Spiderpool 的官方文档: https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/get-started-macvlan-zh_CN.md 搭建了一套 Multus 、Macvlan、Veth 、Spiderpool 的环境,以下是根据自身环境已创建的 SpiderSubnet 实例:
~# kubectl get spidersubnet
NAME VERSION SUBNET ALLOCATED-IP-COUNT TOTAL-IP-COUNT
subnet-6 4 10.6.0.0/16 0 10
subnet-7 4 10.7.0.0/16 0 10
以下示例中将会创建 Multus 的 network-attachment-definition 配置: macvlan-conf,其中:
cat <
Spiderpool 的 CRD:SpiderIPPool 提供了 nodeAffinity 字段,当 Pod 在某个节点上启动,尝试从 SpiderIPPool 分配 IP 时,若 Pod 所在节点符合该 nodeAffinity 设置,则能从该 SpiderIPPool 中成功分配出 IP,否则无法从该 SpiderIPPool 中分配出IP。
依据如上所述,使用如下的 Yaml,创建 2 个 SpiderIPPool,它们将为不同节点上的 Pod 提供 IP 地址。
~# cat <
以下的示例 Yaml 中, 会创建一个 daemonSet 应用,其中:
~# cat <
完成创建后,可以发现 Pod 的 IP 属于 Pod 所在节点的子网内,所对应的 IP 池为应用的不同副本分配了 IP 地址。
~# kubectl get po -l app=test-app -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-app-j9ftl 1/1 Running 0 45s 10.6.168.65 controller-node-1
test-app-nkq5h 1/1 Running 0 45s 10.7.168.61 worker-node-1
~# kubectl get spiderippool
NAME VERSION SUBNET ALLOCATED-IP-COUNT TOTAL-IP-COUNT DEFAULT DISABLE
test-ippool-6 4 10.6.0.0/16 1 10 false false
test-ippool-7 4 10.7.0.0/16 1 10 false false
跨网络区域的 Pod 与 Pod 之间的通讯情况:
~# kubectl exec -ti test-app-j9ftl -- ping 10.7.168.61 -c 2
PING 10.7.168.61 (10.7.168.61) 56(84) bytes of data.
64 bytes from 10.7.168.61: icmp_seq=1 ttl=63 time=1.06 ms
64 bytes from 10.7.168.61: icmp_seq=2 ttl=63 time=0.515 ms
--- 10.7.168.61 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.515/0.789/1.063/0.274 ms
经过测试:不同网络区域的 Pod 能够通过 Pod IP、clusterIP、nodePort 等方式通信,Spiderpool 可以很好地实现基于跨越网络区域的 IP 分配需求。
当前名称:创新互联Spiderpool:基于跨越网络区域的IP分配
文章起源:http://www.shufengxianlan.com/qtweb/news1/118501.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联