【2023】Kubernetes-网络原理

目录

    • kubernetes网络模型
    • kubernetes网络实现
      • 容器到容器之间通信
      • Pod之间的通信
      • Pod到Service之间的通信
      • 集群内部与外部组件之间的通信
    • 开源容器网络方案
      • Flannel
      • Calico

kubernetes网络模型

Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个Node中,都要求它们可以直接通过对方的IP进行访问。

Kubernetes 的网络模型可以分为以下几个方面:

  • Pod 网络模型:Kubernetes 中最小的调度单元是 Pod,每个 Pod 都有一个唯一的 IP 地址。Pod 网络模型定义了如何为 Pod 分配 IP 地址,并使它们能够在集群内相互通信。

  • Service 网络模型:Kubernetes Service 是一种虚拟的网络抽象层,它为一组 Pod 提供了一个单一的 IP 地址和 DNS 名称。Service 网络模型定义了如何将请求从 Service 路由到后端 Pod。

  • Ingress 网络模型:Kubernetes Ingress 是一种用于将外部流量路由到 Kubernetes Service 的 API 对象。Ingress 网络模型定义了如何将请求从外部路由到正确的 Service。

  • CNI 网络模型:Kubernetes 采用容器网络接口 (CNI) 来实现 Pod 网络。CNI 插件是一个可插拔的网络解决方案,可以支持不同类型的网络,如 Linux bridge、Open vSwitch、flannel 等。

  • Network Policy 网络模型:Kubernetes Network Policy 是一种安全机制,可以定义哪些 Pod 可以访问其他 Pod 和 Service,以及哪些端口可以访问。Network Policy 网络模型定义了如何实现网络策略并确保网络安全。

kubernetes网络实现

为了支持业务应用组件的通信,Kubernetes网络的设计主要致力于解决以下问题:

  • 容器到容器之间的直接通信。
  • 抽象的Pod到Pod之间的通信。
  • Pod到Service之间的通信。
  • 集群内部与外部组件之间的通信。

容器到容器之间通信

Kubernetes 使用容器网络接口 (CNI) 插件来实现 Pod 内的网络。CNI 插件在 Pod 启动时会为该 Pod 分配一个唯一的 IP 地址,并创建一个名为“eth0”的网络接口。每个容器都会连接到该网络接口,从而共享该 IP 地址和网络接口。容器可以通过在本地主机上发送和接收网络数据包来与其他容器进行通信。

Pod之间的通信

Pod 之间的通信主要是通过网络实现的。每个 Pod 都有一个唯一的 IP 地址,Pod 中的容器可以通过该 IP 地址和它们的容器端口相互通信。

Pod到Service之间的通信

Pod 到 Service 之间的通信主要是通过 Service 的代理实现的。Service 是一种虚拟的网络抽象层,为一组 Pod 提供了一个单一的 IP 地址和 DNS 名称。容器可以通过 Service 的 IP 地址和端口访问 Service 代理到的后端 Pod 中的容器。

假设有一个 Kubernetes 集群,其中有两个 Pod,每个 Pod 中都运行了一个简单的 Web 服务器容器,并且我们需要为这两个 Pod 创建一个 Service。我们可以使用以下 YAML 文件来创建这个 Service:

apiVersion: v1
kind: Service
metadata:
  name: web-service
spec:
  selector:
    app: web
  ports:
  - name: http
    port: 80
    targetPort: 80
  type: ClusterIP

它的 selector 为“app: web”,表示它将代理所有带有“app=web”的标签的 Pod。该 Service 监听了端口 80,并将所有来自该端口的请求转发到 Pod 中的容器的端口 80。

集群内部与外部组件之间的通信

集群外部的通信可以使用 Kubernetes 的 Ingress 资源来实现。Ingress 允许将外部请求路由到集群内部的 Service。与 Service 相比,Ingress 提供了更多的功能,如负载均衡、HTTPS 和基于主机名的路由等。在使用 Ingress 之前,必须先安装和配置 Ingress 控制器,例如 Nginx、Traefik 或 Istio 等。

在这里插入图片描述

开源容器网络方案

Flannel

Flannel 的实现原理基于 Linux 内核中的虚拟网络设备和路由表。

在 Flannel 中,每个节点(Node)都会运行一个叫做 flanneld 的守护进程,它负责为节点上的容器分配 IP 地址并建立网络通信。具体来说,Flannel 实现的过程如下:

Flannel 在每个节点上启动时,会创建一个名为 flannel0 的虚拟网络设备,该设备是一个 Layer 2 网桥。

每个节点都会被分配一个唯一的 Subnet,例如 10.1.0.0/16、10.2.0.0/16 等,这些 Subnet 通过 etcd 存储在集群中。

当容器需要创建网络连接时,Flannel 会从 Subnet 中选择一个未被分配的 IP 地址,并将其分配给容器。

为了实现跨节点通信,Flannel 还会为每个节点创建一个虚拟网络设备,例如 flannel.1、flannel.2 等,用于连接不同节点的网络。当两个节点需要通信时,它们会在各自的虚拟网络设备中创建一个对应的 VXLAN Tunnel,并通过该 Tunnel 互相发送网络数据包。

Flannel 还会修改节点的路由表,将目标 IP 地址为集群内其他节点的 IP 地址的流量转发到对应的 VXLAN Tunnel 中。这样,当一个容器需要访问另一个节点上的容器时,数据包会先通过节点本地的虚拟网络设备转发到目标节点的虚拟网络设备,然后再通过 VXLAN Tunnel 到达目标节点上的容器。

它能实现以下两点:

(1)它能协助Kubernetes,给每一个Node上的Docker容器都分配互不冲突的IP地址。
(2)它能在这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器内。

Calico

Calico是一个基于BGP的纯三层的网络方案,与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。

Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP1协议把在本节点上运行的容器的路由信息向整个Calico网络广播,并自动设置到达其他节点的路由转发规则。

Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。

Calico节点组网时可以直接利用数据中心的网络结构(L2或者L3),不需要额外的NAT、隧道或者Overlay Network,没有额外的封包解包,能够节约CPU运算,提高网络效率。

Calico基于iptables还提供了丰富的网络策略,实现了Kubernetes的Network Policy策略,提供容器间网络可达性限制的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Android -- 软技能】《软技能:代码之外的生存指南》之好书推荐(一)

前言 这是一本由美国的一个软件开发人员写的,但书中除了有 Java 、C# 几个单词外,没有一行代码。 因为这本书讲的是代码之外的东西。 文章目录结构: 1. 职业 从业心态:说白了就是要有责任心,把每份工作要当成是自…

【国产FPGA】国产FPGA搭建图像处理平台

最近收到了高云寄过来的FPGA板卡,下图:来源:https://wiki.sipeed.com/hardware/zh/tang/tang-primer-20k/primer-20k.htmlFPGA主要参数:FPGA型号参数GW2A-LV18PG256C8/I7逻辑单元(LUT4) 20736寄存器(FF) 15552分布式静态随机存储器S-SRAM(bit…

Python+Yolov5道路障碍物识别

PythonYolov5道路障碍物识别如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonYolov5道路障碍物识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与…

蓝桥杯刷题冲刺 | 倒计时15天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.年号字串2.裁纸刀3.猜生日1.年号字串 题目 链接&#xff1a; 年号字串 - 蓝桥云课 (lanqiao.c…

Java 网络编程入门

文章目录一、网络编程入门1. 网络编程三要素2. IP 地址3. InetAddress4. 端口5. 协议二、UDP 通信程序1. UDP 发送数据2. UDP 接收数据3. UDP 案例三、TCP 通信程序1. TCP 发送数据2. TCP 接收数据3. 服务器给出反馈4. 客户端录入键盘数据5. 服务器数据写入文件6. 客户端数据来…

Ubuntu使用vnc远程桌面【远程内网穿透】

文章目录1.前言2.两台互联电脑的设置2.1 Windows安装VNC2.2 Ubuntu安装VNC2.3.Ubuntu安装cpolar3.Cpolar设置3.1 Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 记得笔者刚刚开始接触电脑时&#xff0c;还是win95/98的时代&#xff0c;那时的电脑桌面刚迈入图形…

C++三种继承方式

C继承的一般语法为&#xff1a;class 派生类名:&#xff3b;继承方式&#xff3d; 基类名{派生类新增加的成员};继承方式限定了基类成员在派生类中的访问权限&#xff0c;包括 public&#xff08;公有的&#xff09;、private&#xff08;私有的&#xff09;和 protected&#…

Python|蓝桥杯进阶第五卷——数论

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…

Linux基本命令

相比Windows系统而言&#xff0c;在一般的企业开发中&#xff0c;使用linux系统无疑是更加广泛的&#xff0c;因此掌握常见的linux基本命令于我们来说是必要的&#xff0c;本文就是对Linux基本命令的简单介绍。 ls 列出当前目录下&#xff0c;所包含的目录及文件&#xff1b; …

学习系统编程No.9【文件操作】

引言&#xff1a; 北京时间&#xff1a;2023/3/23/6:34&#xff0c;可能是昨天充分意识到自己的摆烂&#xff0c;所以今天起的比较早一点吧&#xff01;昨天摆烂的头号原因&#xff0c;笔试强训&#xff0c;加上今天4节课&#xff0c;可以说一整天都是课&#xff0c;所以能不能…

【CE进阶】lua脚本使用

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ 脚本窗口Lua ScriptLua EngineAuto assemble2️⃣ 全局变量3️⃣ 进程当前打开的进程ID系统的进程列表系统的顶部窗口列表4️⃣ 线程5️⃣ 输入设备6️⃣ 屏幕7️⃣ 剪贴板&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x…

算法的时间复杂度和空间复杂度

目录 1 如何衡量一个算法的好坏 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见代码举例 2.3.1 Func2 O(N) 2.3.2 Func3 O(MN) 2.3.3 Func4 O(1) 2.3.4 Func5 strchr O(N) 2.3.5 Func6 冒泡排序 O(N^2) 2.3.6 Func7 二分…

菜鸟刷题Day6

⭐作者&#xff1a;别动我的饭 ⭐专栏&#xff1a;菜鸟刷题 ⭐标语&#xff1a;悟已往之不谏&#xff0c;知来者之可追 一.链表内指定区间反转&#xff1a;链表内指定区间反转_牛客题霸_牛客网 (nowcoder.com) 描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转…

如何用深度强化学习做单元测试代码生成

设计一个用强化学习来生成单元测试代码的系统需要考虑以下几个方面&#xff1a; Agent&#xff1a;强化学习算法中的智能体&#xff0c;它需要接收当前环境状态&#xff0c;根据策略选择相应的动作并执行。 State&#xff1a;描述当前环境状态的特征。在这个问题中&#xff0c…

电脑长按电源键强行关机,对SSD有伤害吗?SSD 掉盘之殇

说到“按住电源键强制关机”的操作&#xff0c;想必大家都不会陌生&#xff0c;毕竟在电脑蓝屏或者电脑死机的时候&#xff0c;我们总是束手无策。而且&#xff0c;身边的人在遇到同样的情况时&#xff0c;往往都是选择长按电源键强制关机&#xff0c;所以当我们遇到同样的情况…

【算法】回溯法详解

一、概述 回溯法在包含的所有可能解的解空间树中&#xff0c;从根节点出发&#xff0c;按照深度有限的策略进行搜索&#xff0c;对于解空间树的某个结点&#xff0c;如果该节点满足问题的约束条件&#xff0c;则进入该子树继续进行搜索&#xff0c;否则将以该节点为根节点进行…

【算法】一文详解贪心法

一、概述 贪心法将一个复杂问题分解为一系列较为简单的局部最优解&#xff0c;每一步都是对当前解的一个扩展&#xff0c;直到获得问题的完全解。贪心法的典型应用时求解最优化问题&#xff0c;而且即使是非最优解&#xff0c;最终得出的解也和最优解比较近似 1.1 贪心法设计…

【多线程】常见的锁策略

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;老当益壮&#xff0c;宁移白首之心&#xff1b;穷且益坚&#xff0c;不坠青云之志。 目 录&#x1f3f3;️一. 乐观锁 vs 悲观锁&#x1f3f4;二. 普通的互斥…

清晰概括:进程与线程间的区别的联系

相关阅读&#xff1a; &#x1f517;通俗简介&#xff1a;操作系统之进程的管理与调度&#x1f517;如何使用 jconsole 查看Java进程中线程的详细信息&#xff1f; 目录 一、进程与线程 1、进程 2、线程 二、进程与线程之间的区别和联系 1、区别 2、联系 一、进程与线程 …

程序员接私活一定要知道的事情,我走的弯路你们都别走了

文章目录前言一、程序员私活的种类1.兼职职位众包2.自由职业者驻场3.项目整包二、这3种私活可以接1.有熟人2.七分熟的项目3.需求明确的项目三、这3种私活不要接1.主动找上门的中介单2.一味强调项目简单好做3.外行人给你拉的项目四、接单的渠道1.线下渠道2.线上渠道3.比较靠谱的…