【云原生】Kubernetes 中容器跨主机网络是怎么样的?

news2024/10/5 15:30:26

文章目录

  • 前言
  • 什么是 Flannel
  • Flannel 的后端实现有哪些
    • UDP
    • VXLAN
    • Host-gw
  • 基于 Flannel UDP 模式的实现跨主通信
  • UDP 模式案例实现
  • 基于 Flannel VXLAN 模式的跨主通信
    • VXLAN 模式案例实现
  • 总结

前言

在云原生领域,Kubernetes 已经成为了最主流的容器管理工具。Kubernetes 支持将容器部署到多个节点(即主机)上,因此必须解决容器间跨主机通信的问题。

本文将详细介绍 Kubernetes 中容器跨主机网络的实现原理和方法。

什么是 Flannel

  • 在 Kubernetes 中,Flannel 是一个开源的容器网络解决方案。它负责在 Kubernetes 集群中创建一个虚拟网络,使得不同节点上的 Pod 可以使用相同的 IP 地址进行通信。

  • Flannel 旨在提供简单、快速、可靠的容器网络。

  • Flannel 通过分配每个节点一个唯一的子网,然后让节点之间的 Pod 通过这些子网进行通信来实现网络隔离。Flannel 支持多种后端,包括 UDP、VXLAN 和 Host-gw 等。

Flannel 的后端实现有哪些

Flannel 的后端实现主要包括以下几种方式:

  • VXLAN;
  • host-gw;
  • UDP。

这三种不同的后端实现,代表了三种容器跨主网络的主流实现方法。

在这三种模式中,UDP 模式可以说是 Flannel 项目早支持的一种方式,但也是性能最差的一种方式。

所以,目前为止这个模式用的比较少。不过,Flannel 之所以最先选择 UDP 模式,还是有它的道理的,因为这种模式是最直接、也是最容易理解的容器跨主网络实现。

UDP

UDP 是 Flannel 默认的后端实现方式。它使用 UDP 协议创建一组 overlay 网络,连接 Kubernetes 集群中的所有节点。每个节点都会获取一个子网,并将其中的 IP 地址分配给其上运行的 Pod。
当 Pod 需要与其他节点上的 Pod 通信时,它会将数据包封装在 UDP 包中,通过 overlay 网络发送到目标节点,并在那里解包。由于 UDP 的轻量级和简单性,它是 Flannel 最常用的后端实现方式。

VXLAN

VXLAN 是一种虚拟化隧道协议,它可以在不同子网之间传递以太网流量。Flannel 使用 VXLAN 创建 overlay 网络,每个节点都会获取一个唯一的 VTEP(VXLAN Tunnel Endpoint),并将其中的 IP 地址分配给其上运行的 Pod。

与 UDP 相比,VXLAN 需要较多的计算资源,但它提供了更好的可靠性和灵活性。

Host-gw

Host-gw 是一种“主机网关”模式,它将每个节点都视为一个网关,将所有 Pod 的流量直接路由到目标节点上的 Pod 所在的子网。

这种方式非常简单,因为它不需要任何 overlay 网络和封装解封装的过程。但是,它需要将所有节点上的路由表配置正确,也需要在集群中动态改变路由表来保证容器间的通信。

基于 Flannel UDP 模式的实现跨主通信

  • 在 Flannel 的 UDP 模式下,每个节点都会获取一个唯一的子网,并将其中的 IP 地址分配给其上运行的 Pod。当 Pod 需要与其他节点上的 Pod 通信时,它会将数据包封装在 UDP 包中,通过 overlay 网络发送到目标节点,并在那里解包。

  • 具体来说,Flannel 最初在集群中的每个节点上启动一个 flanneld 服务。flanneld 服务会协调所有节点之间的 overlay 网络,并为每个节点分配一个唯一的子网。

  • 然后,在每个节点上运行的 kubelet 服务会在容器启动时将该子网的 IP 地址分配给容器。容器内的应用程序可以使用该 IP 地址来访问集群中的其他容器。

UDP 模式案例实现

假设有一个 Kubernetes 集群,有两个节点,每个节点都有一个容器正在运行。容器名称为“web1”和“web2”,它们都运行在不同的节点上。现在,我们要让这两个容器之间进行跨主机通信。

  • 首先,我们需要确保每个节点上都已经安装了 Flannel 并成功启动了 flanneld 服务。然后,在每个节点上运行以下命令来检查 Flannel 是否正常工作:
$ sudo systemctl status flanneld
  • 接下来,我们需要为每个节点分配一个唯一的子网。假设我们将第一个节点的子网设置为 10.244.0.0/24,第二个节点的子网设置为 10.244.1.0/24。在每个节点上运行以下命令来配置 Flannel 并分配子网:
$ sudo vim /etc/sysconfig/flanneld
FLANNEL_ETCD="http://etcd-ip:2379"
FLANNEL_ETCD_PREFIX="/kube-centos/network"
FLANNEL_OPTIONS="-iface=eth0"

$ sudo systemctl restart flanneld

其中,etcd-ip 是 etcd 服务器的 IP 地址。注意,所有节点的 FLANNEL_ETCD_PREFIX 值必须相同,以便它们能够从 etcd 中获取相同的子网信息。

  • 现在,我们可以在容器内使用指定的 IP 地址进行通信了。例如,在 web1 容器内运行以下命令来向 web2 容器发送 ping 包:
$ ping 10.244.1.2

其中,10.244.1.2 是 web2 容器的 IP 地址。
通过 Flannel UDP 模式,我们可以轻松地实现跨主机通信,使得基于 Kubernetes 的应用程序能够更加稳定和可靠地运行。

基于 Flannel UDP 模式的跨主通信的基本原理如下:
在这里插入图片描述

基于 Flannel VXLAN 模式的跨主通信

在 Flannel 的 VXLAN 模式下,每个节点都会获取一个唯一的 VTEP,它可以将容器的数据包封装在 VXLAN 包中,在 overlay 网络中传输。与 UDP 模式不同,VXLAN 模式需要使用 VXLAN 协议来进行封装和解封装。

具体来说,Flannel VNI(VXLAN Network Identifier)将被分配给 overlay 网络,并且每个节点都必须为该网络配置一个 VTEP(VXLAN Tunnel Endpoint)。

此外,每个 Pod 都将获得该网络中的一个唯一 IP 地址,并将其用于与其他 Pod 进行通信。

VXLAN 模式案例实现

假设有一个 Kubernetes 集群,有两个节点,每个节点都有一个容器正在运行。容器名称为“web1”和“web2”,它们都运行在不同的节点上。现在,我们要让这两个容器之间进行跨主机通信。

  • 首先,我们需要确保每个节点上已经安装了 Flannel 并成功启动了 flanneld 服务。然后,在每个节点上运行以下命令来检查 Flannel 是否正常工作:
$ sudo systemctl status flanneld
  • 接下来,我们需要为每个节点分配一个唯一的 VTEP。假设我们将 VXLAN 网络 ID 设置为 1,第一个节点的 VTEP IP 地址为 192.168.0.1,第二个节点的 VTEP IP 地址为 192.168.0.2。在每个节点上运行以下命令来配置 Flannel 并分配 VTEP:
$ sudo vim /etc/sysconfig/flanneld
FLANNEL_ETCD="http://etcd-ip:2379"
FLANNEL_ETCD_PREFIX="/kube-centos/network"
FLANNEL_OPTIONS="-iface=eth0 -vni=1"

$ sudo ifconfig flannel.1 192.168.0.1/24 up
$ sudo systemctl restart flanneld
  • 然后,在每个容器中都可以进行跨主机通信。例如,在 web1 容器内运行以下命令来向 web2 容器发送 ping 包:
$ ping 10.244.1.2

其中,10.244.1.2 是 web2 容器的 IP 地址。
通过 Flannel VXLAN 模式,我们可以轻松地实现跨主机通信,并提供更好的可靠性和灵活性。在运行基于 Kubernetes 的大规模应用程序时,使用 Flannel VXLAN 模式能够有效地提高网络性能和通信效率。
基于 Flannel VXLAN 模式的跨主通信的基本原理如下:
在这里插入图片描述

总结

以上主要介绍了在 Kubernetes 中容器跨主机网络的实现原理和方法。

  • Flannel 作为 Kubernetes 支持的容器网络解决方案,已经成为云原生领域中最流行的容器网络解决方案之一。

  • Flannel 通过分配每个节点一个唯一的子网或 VTEP,在 overlay 网络中传输容器的数据包,使得不同节点上的 Pod 可以使用相同的 IP 地址进行通信。

  • Flannel 提供了多种后端实现方式,包括 UDP、VXLAN 和 Host-gw 等。无论采用哪种后端实现方式,Flannel 都可以帮助我们轻松地实现跨主机通信,并提供稳定、高效的容器网络解决方案。

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

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

相关文章

JMM内存模型详解

1、概要 JMM全称叫Java Memory Model(Java内存模型),什么是JMM,为什么要设置JMM,要弄清楚这个,咱们要先从计算机硬件存储体系说起。 2、计算机硬件存储体系 Window任务管理器Mac资源管理器window和mac是两…

Flink 优化 (二) --------- 状态及 Checkpoint 调优

目录一、RocksDB 大状态调优1. 开启 State 访问性能监控2. 开启增量检查点和本地恢复3. 调整预定义选项4. 增大 block 缓存5. 增大 write buffer 和 level 阈值大小6. 增大 write buffer 数量7. 增大后台线程数和 write buffer 合并数8. 开启分区索引功能9. 参数设定案例二、Ch…

拐点!智能座舱破局2023

“这是我们看到的整个座舱域控渗透率,2022年是8.28%,主力的搭载车型仍然是30-35万区间。”3月29日,2023年度(第五届)高工智能汽车市场峰会上,高工智能汽车研究院首发《2022-2025年中国智能汽车产业链市场数…

WRF中替换LAI数据

WRF中替换LAI数据 本次下载的LAI数据是GLASS中的AVHRR(1981-2018)(V50),可以从这个这里获取数据GLASS_AVHRR_LAI数据集。由于我需要做一个时间序列的模拟,总共下载了从1990-2018年灌溉季3-9月份对应的天数为73,105,137&#xff0…

人工智能大时代——AIGC综述

生成式AI分类 模型按照输入输出的数据类型分类,目前主要包括9类。 有趣的是,在这些已发布大模型的背后,只有六个组织(OpenAI, Google, DeepMind, Meta, runway, Nvidia)参与部署了这些最先进的模型。 其主要原因是&am…

11.基于粒子群算法的含风光燃储微网优化调度(论文复现)

说明书 相关代码资源:基本算法智能微电网粒子群优化算法,微源:光伏、风机、发电机、储能等 基于多目标算法的冷热电联供型综合能源系统运行优化 基于多目标粒子群算法冷热电联供综合能源系统运行优化 MATLAB代码:基于粒子群算法的含风光燃…

0成本 使用home assistant远程开关机电脑

环境:dockerwin10HACS 问题:在外网手机上远程开关机家中电脑 解决办法:开机:WOL,关机ssh命令 背景:在部署HACS后,便想用HACS中的命令来开关机windows电脑,开机很简单,使用…

暴力破解之验证码识别

文章目录背景操作步骤1、安装python模块2、安装Captcha-killer模块3、尝试进行验证码识别背景 渗透测试过程中,现在验证码越来越多,这对测试的时候遇到的阻力不小,一位大佬给我安利了一个burp插件,Captcha-killer,可以…

ROS开发之如何使用ICM20948 IMU模块?

文章目录0.引言1.创建工作空间2.获取IMU功能包并编译3.检查IMU端口4.启动launch显示IMU测量结果0.引言 笔者研究课题涉及多传感器融合,除了前期对ROS工具的学习,还需要用IMU获取数据,对其他传感器的姿态纠正。本文使用IMU模块获取姿态数据。I…

华为乾坤王辉:新一代网络安全融合体系,筑牢企业数字化转型基石丨2023 INSEC WORLD

科技云报道原创。 随着数字化时代的到来,网络安全形势持续动荡。 围绕产业未来发展趋势、信息安全产业可持续发展、信息安全技术发展路径等话题,一场信息安全行业年度盛会——INSEC WORLD世界信息安全大会在西安盛大召开。 本届大会汇聚了近50位海内…

大数据技术(入门篇) --- 使用 Spring Boot 操作 CDH6.2.0 Hadoop

前言 本人是web后端研发,习惯使用spring boot 相关框架,因此技术选型直接使用的是spring boot,目前并未使用 spring-data-hadoop 依赖,因为这个依赖已经在 2019 年终止了,可以点击查看 ,所以我这里使用的是…

防火墙的IPSECVPN点到点实验 dsvpn多层分支实验

目录 防火墙的IPSECVPN点到点实验 dsvpn多层分支实验 ​编辑 防火墙的IPSECVPN点到点实验 配置路由器接口IP 配置接口防火墙IP 写放通的策略 ping对端防火墙的接口看是否能ping通 ipsec进行配置 配置往返流量 dsvpn多层分支实验 先配置IP 2,配置静态IP 3&#xf…

拦截导弹 导弹防御系统

拦截导弹 & 导弹防御系统拦截导弹导弹防御系统拦截导弹 题目链接:acwing1010. 拦截导弹 题目描述: 输入输出: 分析: 第一个问题为输出最长递减子序列,由于导弹数在1000以内所以采用时间复杂度为O(n2)O(n^2)O(n2)或者O(nlogn)O(nlogn)O…

介绍一款idea神级插件【Bito-ChatGPT】

什么是Bito? Bito是一款在IntelliJ IDEA编辑器中的插件,Bito插件是由ChatGPT团队开发的,它是ChatGPT团队为了提高开发效率而开发的一款工具。ChatGPT团队是一支专注于自然语言处理技术的团队,他们开发了一款基于GPT的自然语言处理…

[oeasy]python0133_[趣味拓展]好玩的unicode字符_另类字符_上下颠倒英文字符

另类字符 回忆上次内容 上次再次输出了大红心♥ 找到了红心对应的编码黑红梅方都对应有编码 原来的编码叫做 ascii️ \u这种新的编码方式叫unicode包括了 中日韩字符集等 各书写系统的字符集 除了这些常规字符之外 还有什么好玩的东西呢? 颠倒字符 这个网站可以…

DQN基本概念和算法流程(附Pytorch代码)

❀DQN算法原理 DQN,Deep Q Network本质上还是Q learning算法,它的算法精髓还是让Q估计Q_{估计}Q估计​尽可能接近Q现实Q_{现实}Q现实​,或者说是让当前状态下预测的Q值跟基于过去经验的Q值尽可能接近。在后面的介绍中Q现实Q_{现实}Q现实​也…

提高工作效率必备,5款实用的Windows系统工具推荐

每次分享实用的软件,都会给人一种踏实和喜悦的感觉,这也是我热衷于搜集和推荐高效工具软件的原因。 音量控制——EarTrumpet EarTrumpet是一款音量控制工具,可以让你更方便地调节Windows系统中不同应用程序的音量。你可以使用EarTrumpet来替代系统自带的音量混合器…

表单设计器开源的定义和应用场景布局介绍

为了实现提质增效的办公自动化,表单设计器开源工具的应用变得广泛起来。在低代码开发市场昌盛发展的今天,不少企业期望通过快速、现成的快速配置表单工具实现高效率表单制作,那么,现在给大家介绍的这款开发易用性强、组件丰富、高…

设计模式 -- 门面模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

stable-diffusion真的好用吗?

hi,各位大佬,今天尝试下diffusion大模型,也是CV领域的GPT,但需要prompt,我给了prompt结果并不咋滴,如下示例,并附代码及参考link 1、img2img 代码实现: import torch from PIL im…