首页 > 其他分享 >Kubernetes 网络简单介绍

Kubernetes 网络简单介绍

时间:2023-10-15 22:31:50浏览次数:37  
标签:插件 策略 Kubernetes IP 网络 简单 Pod

后续会详细展示其原理并验证下,这里先汇总下,水平比较有限。

Kubernetes 网络模型

Kubernetes 使用一个称为 CNI(Container Network Interface)的接口标准,使其网络实现与具体的网络插件解耦。

Kubernetes 网络模型有以下几个重要的原则:

  • 所有 Pod 都在一个扁平的共享网络中:每个 Pod 都有一个唯一的 IP 地址,Pod 之间可以直接通过 IP 地址进行通信,无需进行 NAT。
  • Pod 内的容器共享一个网络命名空间:一个 Pod 内的所有容器都能够通过 localhost 相互通信,并且共享同样的网络接口和端口空间。
  • Pod 的 IP 是在整个集群范围内可路由的:不仅 Pod 间可以相互通信,节点之间也可以直接访问 Pod,而不需要额外的 NAT 网关。

这样的网络模型给予了 Kubernetes 强大的网络能力,也使得网络插件的开发和集成变得更加灵活。

Kubernetes 网络插件

Kubernetes 网络插件负责实现上述网络模型。根据 CNI 标准,网络插件通过一个预定义的接口与 Kubernetes 交互,使得 Kubernetes 能够与各种不同的网络技术和实现进行集成。以下是一些常见的 Kubernetes 网络插件:

  • Calico:Calico 是一个广泛使用的网络和网络策略解决方案,它提供了高度可扩展的网络和丰富的网络策略选项。
  • Flannel:Flannel 是一个简单的、易于使用的网络插件,它支持多种网络类型,包括 VXLAN 和 Host-gw。
  • Cilium:Cilium 是一个新兴的网络插件,它使用 eBPF 技术来提供网络和安全性能。
  • Weave:Weave 是一个简单而强大的网络解决方案,它提供了一个快速的、稳定的网络,并且不需要配置 etcd。
  • Kube-router:Kube-router 提供了网络、网络策略和 IPVS/LVS 基于的服务代理。
  • Multus:Multus 是一种允许 Kubernetes pods 连接到多个网络的插件。它充当 Kubernetes CNI 插件的 "多路复用器",并支持多个网络接口。
  • Romana:Romana 是一个网络和网络策略插件,提供了 Kubernetes 的网络策略实现和 IP 地址管理 (IPAM)。Romana 使用本机云提供商路由来提供网络,无需创建或管理任何隧道。
  • Contiv:Contiv 提供了一个统一的网络框架,支持多种网络模型(例如,基于 VLAN 的网络,VXLAN 网络,静态路由等),并提供丰富的网络策略。
  • Antrea:Antrea 是一个用于 Kubernetes 的网络插件,基于 Open vSwitch 数据平面。它支持网络策略、负载均衡、流量镜像等功能。
  • NSX-T:NSX-T 是 VMware 提供的一个网络虚拟化和安全平台,它提供了一个完全集成的、完全自动化、完全可编程的软件定义网络 (SDN) 解决方案。
  • Canal:Canal 实际上就是 Flannel 和 Calico 的结合体,它将 Flannel 的网络功能与 Calico 的网络策略功能结合在一起。
  • OpenShift SDN:OpenShift SDN 是 Red Hat OpenShift 平台的默认网络插件。它支持多种网络模型(例如,NetworkPolicy、Multitenant 和 Subnet)和 IP 地址管理 (IPAM)。
  • Lyft VPC:Lyft VPC 是 AWS 上的 Kubernetes 网络插件,提供高性能网络解决方案。
  • Terway 是阿里云开源的基于专有网络 VPC 的容器网络接口 CNI(Container Network Interface)插件,支持基于 Kubernetes 标准的网络策略来定义容器间的访问策略。您可以通过使用 Terway 网络插件实现 Kubernetes 集群内部的网络互通。Terway IPvlan 模式采用 IPvlan 虚拟化和 eBPF 内核技术实现高性能的 Pod 和 Service 网络。IPvlan 模式主要在 Pod 网络、Service、网络策略(NetworkPolicy)做了性能的优化:
  • Pod 的网络直接通过 ENI 网卡的 IPvlan L2 的子接口实现,大大简化了网络在宿主机上的转发流程,让 Pod 的网络性能几乎与宿主机的性能无异,延迟相对传统模式降低 30%。
  • Service 的网络采用 eBPF 替换原有的 kube-proxy 模式,不需要经过宿主机上的 iptables 或者 IPVS 转发,在大规模集群中性能几乎无降低,扩展性更优。在大量新建连接和端口复用场景中请求延迟比 IPVS 和 iptables 模式大幅降低。
  • Pod 的网络策略(NetworkPolicy)也采用 eBPF 替换掉原有的 iptables 的实现,不需要在宿主机上产生大量的 iptables 规则,降低网络策略对网络性能的影响。

适用场景

  • 中间件与微服务
    避免了大规模部署时带来的性能衰减,微服务全链路延迟降低。
  • 游戏、直播类应用
    显著降低网络延迟,多个实例之间的争抢降低。
  • 高性能计算
    高性能计算会有大量的网络吞吐,IPvlan 模式网络本身带来 CPU 等的开销减少,留出更多的计算资源给业务本身。


标签:插件,策略,Kubernetes,IP,网络,简单,Pod
From: https://blog.51cto.com/first01/7873793

相关文章

  • 2023中山市第三届香山杯网络安全大赛线上初赛
    序被带飞了PWNmove先往变量sskd写入0x20字节,往第二个输入点输入0x12345678即可进入到第三个输入点,存在0x8字节的溢出。思路是在第一个输入点布置rop链,然后利用第三个输入点的溢出,打栈迁移然后泄libc后重新返回到main函数,这里要注意的是移了栈之后,栈顶指针就指......
  • Druid连接池的简单使用
    Druid的简介Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBossDataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴......
  • 用Java语言简单实现MQ消息队列服务
    大致的结构:一个消息队列大致的结构:消息处理中心Brokerpackagecom.tntxia;importjava.util.concurrent.ArrayBlockingQueue;/***消息处理中心*/publicclassBroker{//队列存储消息的最大数量privatefinalstaticintMAX_SIZE=3;//保存消息数据......
  • 一组Fabric区块链网络高质量架构图备忘
    图01:两个组织加入同一通道的最简单Fabric网络注意:体会其中Founder的作用。图02:Peer节点分类账内部组件示意图图03:附有链码和账本的Fabric网络示意图图04:具有多个通道的更复杂的Fabric网络示意图图05:Fabric事务调用工作流图06:一种生产环境中的Fabric架构拓扑引用https://www.serial......
  • 安装kubernetes-v1.26.9集群,安装配置calico网络
    安装kubernetes-v1.26.9集群,安装配置calico网络1、配置基础环境1、资源规划一共三台主机,安装配置一个master01,两个worker01master01:192.168.2.10worker01:192.168.2.11worker02:192.168.2.12镜像仓库服务器:192.168.2.20VMware虚拟机规格:CentOSLinux7(Core)2核CPU、3G内......
  • 如何预防网络数据丢失203.135.128.x
    数据丢失对于任何规模的企业来说都可能是灾难性的事件,并且代价高昂,这就是预防数据丢失至关重要的原因。企业可以使用各种程序来增强其网络安全性并防止数据丢失。此外,他们可以使用多种策略来管理数据泄露。数据备份和加密。在各种策略中,定期数据备份是企业应该实施的关键策略之一。......
  • 使用CS的简单操作
    1.解压并运行cs(1)首先在kali中解压cs压缩包(2)进入cs目录并给予相关权限Chmod777*//chomd命令指给所有文件可读可写可执行权限(777表示可读可写可执行) (3)运行cs文件,设置服务器IP,密码 (4)运行cs的.bat文件 (5)设置IP,端口,用户名,登录密码 (6)登录成......
  • 【ZROJ2730】简单题 可持久化分块题解
    Description给定一棵\(n\)个节点的树,每次询问编号为\([l,r]\)的点中有多少个是祖先关系。\(n,q\le10^5\)。Solution直接做的话树上的祖先关系不好统计,那么转化到\(\texttt{dfs}\)序上,如果\(u\)是\(v\)的祖先那么\(dfn_u\ledfn_v<dfn_u+siz_u\)。把\([d......
  • 如何用简单的方式避免烦人的小错误
    以下技巧在NOILinux下开启c++14的情况下均可使用,放心食用。在非void函数开头使用[[nodiscard]]避免没有用到函数的情况示例:[[nodiscard]]intplu(inta,intb){returna+b>=p?a+b-p:a+b;}voidsolve(){inta,b;cin>>a>>b;plu(a,b);}编译器会以警告......
  • 【移动开发学习】 Android Studio 编写一个简单的微信界面
    AndroidStudio简单还原微信ui目标实现3-4个tab的切换效果技术需求activity,xdm,fragment,recyclerview成果展示其中联系人界面通过recyclerview实现了可以滑动列表      仓库地址https://github.com/SmileEX/wecaht.git实现过程主要ui第......