百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

非云环境中 Kubernetes 的配置和运行:网络

zhezhongyun 2025-09-12 05:58 16 浏览

这是非云环境中 Kubernetes 的配置和运行系列的第三篇文章,本文主要介绍组成网络体系架构中的每个组件,及其它们在整体架构中的作用,重点介绍 IP、子网、DHCP、DNS 等技术。

想要先睹为快的读者,可直接克隆该项目的 GitHub 代码库。代码库中的文档正在持续改进中,并完全可用。代码库地址为: mvallim/kubernetes-under-the-hood

DNS

网站等 Internet 资源有两种表示方式,即通过其域名(例如,“ kubernetes.io ”),或是通过承载资源的主机 IP 地址(例如,“45.54.44.102”,即与 kubernetes.io 域关联的 IP)。网络层使用 IP 地址确定设备的物理位置和虚拟位置,但对于用户和企业而言,域名更易于记忆。因此,我们需要一种将域名解析为 IP 地址的机制。这就是 DNS 的主要功能。
DNS 时常被假定为仅用于将 Internet 主机名映射到数据(例如 TXT、MX 等),并将地址映射到主机名。但事实上,DNS 可用于存储几乎用于任何目的的各种数据类型。

出处: https://www.cloudflare.com/learning/dns/what-is-dns/

为了简化概念,我们可设想在一个教室中,老师以学生的名字呼唤学生,然后学生回答说他们在班级中的确切位置,并提供以行和列表示的座位坐标。 例如:

  • 老师说:“小明!”
  • 小明回答:“我在这里,第 4 行第 10 列。”
  • 老师说:“好的,我知道你的确切位置了,第 4 行第 10 列。”

在上面的例子中,老师知道了小明的具体座位。同样原理,当我们在浏览器中输入地址“ kubernetes.io ”时,DNS 响应以地址“45.54.44.102”。

NAT

在计算机网络中,网络地址转换(NAT,Network Address Translation),也称为“地址伪装”(masquerading),是一种使用哈希表重写通过路由器或防火墙的源地址网络包,使得内网计算机可以访问外网或者万维网(即公网)

引用自: https://en.wikipedia.org/wiki/Network_address_translation

DHCP

动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)是一种为网络中设备(包括虚拟机实例、笔记本、平板电脑、移动设备、IoT 传感器等)提供 IP 地址、子网掩码、默认网关地址、DNS 服务器地址、DNS 搜索前缀、 WINS 服务器地址等动态配置的 TCP/IP 服务协议。

DHCP 是从 BOOTP 延续发展而来。尽管 BOOTP 协议更为简单,但不能满足当前的需求。DHCP 在 1993 年 10 月成为标准,在 RFC 2131 (1997 年)中包含了大部分的当前规格说明。最新基于 IPv6 的 DHCP(DHCPv6)规格说明发布在 RFC 3315 (2003 年)中。

引用自: https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol

如果读者未理解 DHCP,可回顾上一篇技术栈文章。

网关

网关也称为协议转换器,可运作在任一网络层。网关的职责比路由器和交换机更为复杂,因为网关使用多种协议通信。

网络节点是因特网用户的计算机和向用户提供网页的计算机。连接节点间网络的节点就是网关。例如,用于控制企业网络的计算机,或是因特网服务提供商(ISP)用于将用户接入因特网的计算机,就是网关节点。
在企业网络中,充当网关节点的服务器通常作为代理服务器或防火墙服务器。网关通常与路由器有关,路由器知道将网关接收的特定数据包发向何方,并进行交换,这为特定接收方提供了网关的实际输入和输出路径。

引用自: https://en.wikipedia.org/wiki/Gateway_(telecommunications)

简而言之,网关是计算机出入所在网络的访问点。根据所在网络复杂性的不同,网关可能是一台,也可能存在多台。它们提供网络的进出端点,正如房间的门一样。

IP 地址

IP 地址长度是 32 个字节,分成 4 个 8 位字节表示(IPv4)。每个 8 位字节可以表示为用点分隔的数字,如下所示。

网络分段(Network Segmentation)

网络分段就是将一个计算机网络分隔为多个称为分段操作,每个分段称为一个子网。分段操作的最大优点是改进了网络的安全性和性能。

优点

降低网络流量。

  • 网络分段导致网络流量隔离在各个分段子网中,这意味着每个子网分段具有自己的流量,不会影响整个网络。

安全性

  • 广播局限于各个分段子网中,而非整个网络。
  • 分段子网中的资源可与其它网络隔离,或是相互限制。
  • 一般攻击仅局限于当前子网,而非整个网络。考虑这一点,网络可按资源分段,例如数据库、NFS、Web 等。

问题隔离

  • 任何一个子网中出现网络问题,将局限于该子网中,不会影响到整个网络。

访问控制

  • 可控制进入子网以及子网间的访问。例如子网 A 只能访问子网 B。

参考资料: https://en.wikipedia.org/wiki/Network_segmentation

网络分类

  • A 类地址:IP 地址首个 8 位字节的值位于 1–127 范围内。
  • B 类地址:IP 地址首个 8 位字节的值位于 128–191 范围内。
  • C 类地址:IP 地址首个 8 位字节的值位于 192–223 范围内。
  • D 类地址:IP 地址首个 8 位字节的值位于 224–239 范围内。
  • E 类地址:IP 地址首个 8 位字节的值位于 240–255 范围内。

无类域间路由(CIDR,Classless Inter-Domain Routing)

CIDR 是一种替代传统子网的技术。

IP 地址使用 2 组字节表示:第一组字节是网络前缀,用于标识整个网络或是子网;第二组字节是主机标识符,指定网络中主机的特定接口。这种分别表示的方法用于路由 IP 网络和地址分配策略间的流量。

CIDR 的基本理念是分组地址最开始处的字节,如下表所示:

参考文献: https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing

localhost

IP 地址范围 127.0.0.0–127.255.255.255(CIDR 表示为 127.0.0.0/8)保留,用于 localhost 间通信。发送到上述地址的网络包,不会离开生成网络包的主机。当然,这些网络包的处理,与从网络接收的包相同。

保留私有地址范围

在可用的 4,294,967,296(即 0.0.0.0/0 - 2^3^2)个 IPv4 地址中,有三段地址保留用于私有网络。在此地址段中的 IP 地址不能路由出私有网络,即不能在公网上路由。

标准 RFC 1918、3330 和 3927 分别指定了 A、B 和 C 类保留地址,称为私有网络地址,如下表所示。

我们的网络拓扑

网络

下表给出了我们主网络的 IP 地址范围。该范围提供了 65534 个地址,可分隔成个多个更小的专用网段。

子网

我们定义了子网的分隔方式,使得我们可以分隔各个资源类别。主网具有 16 位掩码,子网是 24 和 25 位掩码。

简而言之,设想我们有一栋多层商业建筑,每层楼具有专门的用途。例如,软件开发人员在第一层,厨师在第二层,医生在第三层,诸如此类。

通常而言,我们的工作就是对建筑(即主网)每层分配地址,指定每层支持容纳的专业人员(即主机)上限。

隔离子网可提供 256(24 位掩码)和 126(25 位掩码)个地址,规模足以容纳实例个数、负载均衡器(即 MetalLB)和浮动 IP,用于完全部署我们的 Kubernetes 集群。

读者可能会问,为什么不选择 256(即 2 — (32–24))和 128(即 2 — (32 -25))。原因在于,子网段的首尾地址分别保留用于标识网络和广播使用。

DNS

如上所述,通常将网段首个可用地址被指定为 DNS 服务器。如下表:

DHCP

为确保上面定义各个子网具有足够可用的 IP 地址,分配给需要加载地址的主机,我们定义了如下 IP 地址分布范围。

仔细看来,每个 IP 地址范围支持 252 和 124 个 IP 地址。如果给定子网中的主机数量高于此,就会出现 IP 地址用尽的问题。这意味着,想要加入该子网的主机不能分配 IP 地址,进而无法加入该子网。

注意,首个地址保留给 DNS 服务器,最后一个地址保留给网关。这就是为什么子网可提供 252(即 /24)或 124(即 /25)个 IP 地址,而非 254 或 126 个。

网关

常见做法是将子网的首个或最后一个 IP 地址保留,用于网关地址。技术上看,我们可以另行指定任意网关地址。谨记,这样做会导致 DHCP 配置复杂化。

例如,一个子网的 CIDR 表示为 192.168.5.0/24,如果我们随意指定 IP 地址 192.168.5.127 为网关,那么 IP 分别范围将必须定义为 192.168.5.1–192.168.5.126,或是 192.168.5.128–192.168.5.254,非常不直观。

简要起见,我们指定子网的最后一个 IP 地址为网关。

浮动 IP

在我们的网络中,浮动 IP 可以是 DMZ 子网 192.168.4.0/25 中的任一地址。这里,指定为 192.168.4.20。

负载均衡器

原文链接:

Kubernetes Journey — Up and running out of the cloud — Network

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书!

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...