------------恢复内容开始------------

Kubernetes网络是Kubernetes中一个核心概念。简而言之,Kubernetes网络模型可以确保集群上所有Kubernetes pod都能进行通信。此外,在Kubernetes网络模型的基础上,Kubernetes还有其他核心概念,即Kubernetes Services和Kubernetes Ingress。

本文将使用系统模型的方法探索Kubernetes网络。我们将开发一个简单的模型来了解容器与容器间的通信以及Pod之间的通信。

如何看待网络

毫无疑问,网络是一个极为广泛且复杂的领域,它需要多年的理论积累以及实践才能精通。在本文中,我们将在概念层面对网络进行梳理,暂时不涉及实现层面的细节。

理想的网络模型

上图将网络描述为Network Graph,该网络由一组节点以及节点之间的链接组成。如果当且仅当节点之间存在联系时,一个节点才可以与另一个节点交换信息。



消息交换框架

一个节点,即源节点,通过将消息放入目标的输入队列,与另一个节点,即目标交换消息。消息交换由源节点观察到的Send Event,Send·M和在目标节点观察到的相应的Receive Event,Recv·M表示。

消息交换行为

网络中的节点要么是Process,要么是Switch。Process会产生和消耗消息,Switch根据其转发信息库(FIB)处理消息。

S1和S2的转发信息库(FIB)

上图描述了Switch的转发信息库(FIB)S1和S2。在收到消息时,每台Switch都会查询其转发信息库,以决定是发送(deliver)、转发(forward)还是丢弃(discard)该消息。

Switch:

将信息的请求头,即源地址、源端口、目标地址和目标端口与其转发信息库相匹配、

执行相关操作,默认为弃置(discard)

Kubernetes网络模型

Kubernetes网络模型是一个描述性的网络模型,也就是说,任何满足Kubernetes网络模型规范的网络都是Kubernetes网络。

然而,Kubernetes并没有规定如何实现网络模型。事实上,现在市面上有许多替代的实现,称为网络插件。

本节将用一组关于消息交换的约束条件来描述Kubernetes网络模型。

限制条件:网络可寻址实体

Kubernetes网络模型定义了3个可寻址实体:K8S pod、K8S 节点以及K8S Service,每个实体都会分配到一个不同的IP地址。

∧ (K8s-Pod(E₁) ∨ K8s-Node(E₁) ∨ K8s-Service(E₁))
∧ (K8s-Pod(E₂) ∨ K8s-Node(E₂) ∨ K8s-Service(E₂)):
addr(E₁, a) ∧ addr(E₂, a)₂
⟺ E₁ = E₂

然而,网络模型不对这些IP地址做任何进一步的声明。例如,Kubernetes网络模型不对从这些IP地址中提取的IP地址空间做任何进一步的声明。

限制条件:容器间通信

Kubernetes网络模型要求在Pod P上下文中执行的容器C1可以通过localhost与在P上下文中执行的其他容器C2进行通信。

K8s-Pod(P) ∧ K8s-Container(C₁, P) ∧ K8s-Container(C₂, P):
open(C₂, p)

Send(e, C₁, 127.0.0.1, _, 127.0.0.1, p)

Recv(e, C₂, 127.0.0.1, _, 127.0.0.1, p)

限制条件:Pod到Pod

Kubernetes网络模型要求在Pod P1上下文中执行的容器C1可以通过P2的地址与在P2上下文中执行的其他容器C2进行通信。

∧ K8s-Pod(P₁) ∧ K8s-Container(C₁, P₁)
∧ K8s-Pod(P₂) ∧ K8s-Container(C2, P₂):
addr(P₁, sa) ∧ addr(P₁, ta) ∧ open(C₂, tp)

Send(e, C₁, sa, sp, ta, tp)

Recv(e, C₂, sa, sp, ta, tp)

限制条件:Process到Pod

Kubernetes网络模型要求托管在节点N上的一个Process,称为Daemon D,可以通过P的地址与托管在N上的Pod P上下文中执行的任何容器C进行通信。

K8s-Node(N) ∧ K8s-Daemon(D) ∧ K8s-Pod(P) ∧ K8s-

Container(C, P):
host(N, D) ∧ host(N, P) ∧ addr(P, a) ∧ open(C, p)

Send(e, D, _, _, a, p)

Recv(e, C, _, _, a, p)

Kubernetes网络作为Network Graph

本节用Kubernetes Network Graph这个理想的模型来描述Kubernetes网络模型。

下图描述了本节内容中的用例:Kubernetes集群K1由2个节点组成。每个节点托管2个Pod。每个Pod执行2个容器,一个容器监听8080端口,一个容器监听9090端口。此外,每个节点托管1个Daemon。

我们可以将Kubernetes集群网络建模为一个具有一组节点和一组链接的Graph。

节点

每个K8S容器C映射到网络Process C

K8s-Pod(P) ∧ K8s-Container(C, P):
Process(C)

每个Daemon D映射到网络Process C

K8s-Daemon(D):
Process(D)

每个K8s Pod P映射到网络Switch P, Pod的Switch

K8s-Pod(P):
Switch(P)

每个K8S节点N 映射到网络 Switch N,节点的Switch:

K8s-Pod(N):
Switch(N)

链接

每个容器C会被链接到其Pod Switch P

K8s-Pod(P) ∧ K8s-Container(C, P):
link(C, P)

每个Daemon D会被链接到其节点Switch N

K8s-Node(N) ∧ K8s-Daemon(D):
host(N, D)

link(D, N)

每个Pod Switch P会被链接到其节点Switch N

K8s-Node(N) ∧ K8s-Pod(P):
host(N, P)

link(P, N)

每个节点Switch N1会被链接到其他各节点Switch N2

K8s-Node(N₁) ∧ K8s-Node(N₂):
N₁ ≠ N₂

link(N₁, N₂)

在Pod Switch的转发信息库

P2的转发信息库

1. Delivery on localhost
K8s-Pod(P) ∧ K8s-Container(C, P):
open(C, p)

[* * 127.0.0.1 p Deliver(C)] in FIB[P]
2. Delivery on Pod Address
K8s-Pod(P) ∧ K8s-Container(C, P):
addr(P, a) ∧ open(C, p)

[* * a p Deliver(C)] in FIB[P]
3. Local Forwarding Rule
K8s-Node(N) ∧ K8s-Pod(P):
host(N, P)

[* * * * Forward(N)] in FIB[P]

在节点Switch的转发信息库

转发信息库 N2

  1. Node to Pod Forwarding Rule

    K8s-Node(N) ∧ K8s-Pod(P):

    host(N, P) ∧ addr(P, a)



    [* * a * Forward(P)] in FIB[N]
  2. Node to Node Forwalding Rule

    K8s-Node(N₁) ∧ K8s-Node(N₂) ∧ K8s-Pod(P):

    N₁ ≠ N₂ ∧ host(N₂, P) ∧ addr(P, a)



    [* * a * Forward(N₂)] in FIB[N₁]

示例

本节将通过一些例子,按照Kubernetes集群网络K1中的消息生命(Life of a Message)来进行讲解。

容器到容器

容器C1.1需要与容器C1.2进行通信:

  • C1.1在P1的上下文中执行
  • C1.2在P1的上下文中执行

C₁.₁通过127.0.0.1:9090到C₁.₂

节点内Pod到Pod通信

容器C 1.1需要与C 3.1进行通信:

  • C 1.1在N1节点上的P1上下文中执行
  • C 3.1在N1节点上的P3上下文中执行

C 1.1通过10.1.1.2:8080到C 3.1

节点间Pod到Pod通信

容器C 1.1需要与容器C 2.1进行通信:

  • C1.1是在N1节点上托管的P1的上下文中执行的
  • C2.1在节点N2上的P2上下文中执行

C1.1通过10.1.2.1:8080到C2.1

Daemon到Pod通信

Daemon D1需要与容器 C 1.1通信:

  • D1托管在节点N1上

  • C 1.1在Pod P1的上下文中执行,该Pod托管在节点N1上

D1通过10.1.1.1:8080到C 1.1

总结

Kubernetes网络模型是一个允许性的网络模型,也就是说,任何满足Kubernetes网络模型约束的网络都是一个有效的Kubernetes网络。

将Kubernetes网络模型映射到Network Graph,使我们能够在概念层面上对网络进行推理,并且跳过了在实现层面上推理所需的一系列细节。

在后续的文章中,我们将使用这个Network Graph来讨论Kubernetes服务、Kubernetes Ingress和Kubernetes策略。

原文链接:

https://dominik-tornow.medium.com/kubernetes-networking-22ea81af44d0

------------恢复内容结束------------

Kubernetes网络概念初探的更多相关文章

  1. 第13 章 : Kubernetes 网络概念及策略控制

    Kubernetes 网络概念及策略控制 本文将主要分享以下 5 方面的内容: Kubernetes 基本网络模型: Netns 探秘: 主流网络方案简介: Network Policy 的用处: 思 ...

  2. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家  叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...

  3. 容器技术研究-Kubernetes基本概念

    最近在研究容器技术,作为入门,基本概念必须搞明白,今天整理一下Kubernetes的基本概念. 一.什么是Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部 ...

  4. Kubernetes重要概念理解

    Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...

  5. Kubernetes 核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  6. 十分钟带你理解Kubernetes核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

  7. Kubernetes网络的4种解决方案

    一.Kubernetes + Flannel Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的 ...

  8. Kubernetes核心概念简介

    本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...

  9. 深入解读docker网络与kubernetes网络

    前言:你是否学习使用k8s很久很久了可是对于网络这块仍旧似懂非懂呢? 您是否对网上一堆帖子有如下的抱怨: 打开多个博客,然后发现有区别么? 明显是直译过来的,越看越迷糊 “因为xxx,所以yyy”,. ...

随机推荐

  1. nasm astrlen函数 x86

    xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...

  2. NGK项目好不好?

    在谈NGK项目之前,我们不得不提到NGK背后的研发团队,硅谷顶尖技术团队灵石团队.硅谷作为全世界最顶尖的高新技术和科技创新产业区,NGK.IO区块链系统正是在此处诞生. 灵石部门核心成员曾负责过多个P ...

  3. HQYJ嵌入式学习笔记——C语言复习day2

    1.计算机的数值表示 数值类型和非数值类型 二进制 0,1 (0b1001) 八进制 0~7   (0146) 十进制 0~9 十六进制 0~f (0x3f) 八进制转二进制-->一位八进制数换 ...

  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(四)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首 ...

  5. CSS中Position属性static、absolute、fixed、relative

    在html中网页可以看成一个立体的空间,一个完整的页面是由很多个页面堆积形成的,如下图所示   CSS中Position属性有四个可选值,它们分别是:static.absolute.fixed.rel ...

  6. Gateway网关

    前提要在注册中心把网关和服务都进行注册 通俗来说,网关就是指在客户端和服务端的一面墙,这面墙有请求转发,负载均衡,权限控制,跨域,熔断降级,限流保护等功能. 客户端发送请求,请求先通过网关,网关根据特 ...

  7. Vue学习笔记-Vue.js-2.X 学习(四)===>脚手架Vue-CLI(基本工作和创建)

    (五) 脚手架Vue-CLI 一 Vue-CLI前提(nodejs和webpack) 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nod ...

  8. R语言学习4:函数,流程控制,数据框重塑

    本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...

  9. SpringBoot注解集合

    使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 @SpringBo ...

  10. Win32Api -- 关闭当前应用

    本文介绍Windows系统下使用Win32API获取当前应用并关闭的方法. 思路 使用EnumWindows接口枚举当前窗口; 过滤掉不可用.隐藏.最小化的窗口: 过滤掉子窗口: 通过标题.类名过滤掉 ...