什么是 Kubernetes 网络?
探索 IBM Cloud Kubernetes Service
不同形状的网络连接

发布日期:2023 年 11 月 21 日
贡献者:Stephanie Susnjara,Ian Smalley

什么是 Kubernetes 网络?

Kubernetes 网络提供网络基础架构,用于实现容器化应用程序的通信、可扩展性、安全性和外部访问。网络错综复杂,包括 Kubernetes 集群内部(例如 Pod、节点、容器、服务)和外部(例如外部流量)的所有主要组件之间的通信。

这些组件依靠四种不同的网络途径进行通信:

1. 容器到容器网络

2. Pod to-Pod 网络

3. Pod-to-Service 网络

4. External-to-Service 网络

自动化应用程序驱动的容器弹性

适用于希望在确保应用程序性能的同时加快上市速度的平台和开发运维工程师。

相关内容

订阅 IBM 时事通讯

什么是 Kubernetes?

Kubernetes 这个名字起源于希腊语,意思是舵手或飞行员。基于谷歌的内部容器编排平台 Borg,Kubernetes 于 2014 年作为开源工具向公众推出。同年,谷歌向云原生计算基金会(链接位于 ibm.com 外部)捐赠了 Kubernetes,该基金会是开源、供应商中立的云原生计算中心。从那时起,Kubernetes 已成为全球运行基于容器的工作负载时使用最为广泛的容器编排工具。

Kubernetes 也称为“k8s”或“kube”,专门为实现容器管理自动化而设计,容器是封装代码及其所有依赖项的标准软件单元。该编排工具可以在任何基础架构环境中快速且可靠地运行,无论是在本地、私有云、公共云还是混合云中,因此该工具受到高度评价。

虚拟机 (VM)虚拟化物理硬件)不同,容器可以虚拟化操作系统(例如 Linux 或 Windows)。每个容器仅包含应用程序的库和依赖项。由于容器与主机共享相同的操作系统内核,因此它们被视为轻量级、快速且可移植。

Kubernetes 及服务、支持和工具生态系统已成为现代云基础架构和应用程序现代化的基础。所有主要云供应商(包括 Amazon Web Services (AWS)、Google、Microsoft、IBM 和 Red Hat)都将 Kubernetes 集成到自己的云平台中,以增强平台即服务 (PaaS)基础架构即服务 (IaaS) 功能。

Kubernetes 架构

Kubernetes 架构由以下基本组件组成:

集群

Kubernetes 集群是一组物理或虚拟机(节点),它们通过协同工作运行容器化应用程序。集群是 Kubernetes 架构的基础。

主节点

主节点表示单个计算主机,可以是虚拟机,也可以是物理机。它们托管 Kubernetes 控制平面组件,并负责调度和扩展应用程序。通过管理 Kubernetes 集群中的所有计算、网络和存储资源,主节点可确保容器化应用程序和服务均匀地部署到集群中的工作程序节点。

工作节点

工作程序节点负责运行容器并执行主节点分配的任何工作。它们还托管应用程序容器,这些容器被分组为 Pod。

pod

Pod 是由一个或多个容器(如 Linux 或 Docker)组成的群组,这些容器共享相同的计算资源和网络。它们是集群部署单元,也可以用作可扩展性单元。例如,如果 Pod 中的容器流量很大,Kubernetes 可以将该 Pod 复制到集群中的其他节点。如果流量减少,Kubernetes 还可以关闭 Pod。

Kubernetes 的其他组件如下:

  • 部署:Kubernetes 中的部署管理一组 Pod,旨在运行应用程序工作负载。部署确定集群上应运行的 Pod 副本数量。如果 Pod 故障,部署将创建一个新的 Pod。这一关键功能有助于扩展副本 Pod 的数量、定期更新代码并保持可用性。使用 Kubernetes 特定的命令行工具 kubectl 执行部署。
  • 服务:Kubernetes Service 是一个抽象层,它定义了 Pod 的逻辑集合以及如何访问它们。服务会公开在集群中一个或多个 Pod 上运行的网络应用程序。它提供了一种对 Pod 进行负载平衡的抽象方法。
  • API 服务器:Kubernetes 中的 API 服务器公开 Kubernetes API(用于管理、创建和配置 Kubernetes 集群的接口),并用作所有命令和查询的入口点。
网络术语和概念

基本的计算机网络包括通过电缆(有线)或 Wi-Fi 连接两个或更多计算设备以共享数据和交换资源。

在物理网络中,物理服务器连接到物理网络设备(交换机、路由器和以太网电缆),以连接到互联网。

在虚拟网络、软件定义网络 (SDN) 中,虚拟以太网设备和虚拟接口等组件安装在裸机服务器或虚拟机上,以连接到互联网。Kubernetes 部署依赖 SDN 来配置和管理集群之间的网络通信。

在深入研究 Kubernetes 网络之前,需要回顾一下基本的网络术语:

  • 网络主机:网络主机是连接到网络上的任何计算机,它向网络上的其他主机或节点提供信息、应用程序或服务。
  • IP (Internet Protocol) 地址:IP 地址是为连接到使用 Internet Protocol 进行通信的网络的每台设备分配的唯一编号。IP 地址标识设备的主机网络和设备在主机网络上的位置。
  • Localhost:Localhost 是一个默认主机名,可充当专用 IP 地址,直接指向其使用的计算机或设备。
  • 端口:端口标识网络设备之间的特定连接。每个端口由一个数字标识。计算机使用端口号来确定哪个应用程序、服务或进程应接收特定消息。
  • NAT(网络地址转换):NAT 将内部或私有地址更改为公共或全球可路由的 IP 地址,从而实现安全的互联网访问。NAT 使一个唯一的 IP 地址能够代表整组计算设备。
  • 节点代理:节点代理是管理代理,用于监控主机系统上的应用程序服务器并将管理请求路由到服务器。
  • 网络命名空间:网络命名空间是一组网络接口和路由表指令,用于在网络设备之间提供隔离。
  • 代理/代理服务器:代理提供用户和互联网之间的网关。
Kubernetes 网络如何工作?

Kubernetes 的创建是为了运行分布式系统,其网络平面分布在机器集群中。除了提供组件之间的互联性,Kubernetes 集群网络还创建了一个无缝环境,通过软件定义的网络,数据可以自由、高效地移动。

Kubernetes 网络的另一个显著特点是其扁平化网络结构,这意味着所有组件都可以连接,而无需依赖其他硬件。在 Kubernetes 中,集群中的每个 Pod 都能与其他 Pod 通信,无论它运行在哪个节点上。扁平化网络提供了一种高效的资源共享方式,并消除了动态端口分配的需要。

总体而言,Kubernetes 网络采用抽象方法表示复杂性,使开发人员和运维人员能够专注于构建和维护应用程序,而不是处理复杂的网络配置。

Kubernetes 网络模型

Kubernetes 提供一个网络模型,帮助应对在分布式环境中编排容器化应用程序的挑战。每个节点上的容器运行时均可实现网络模型并遵循以下规则:

  • 每个 Pod 都有自己的 IP 地址,可以在集群内路由。此功能无需在 Pod 和映射端口之间创建链接。
  • 由于每个 Pod 都有自己的 IP 地址,因此不需要 NAT。所有 Pod 都可以与集群中的所有其他 Pod 通信,无需 NAT。
  • 节点上的代理(例如 kubelet – 在每个节点上运行的主节点代理)可以与该特定节点上的所有 Pod 进行通信。

Kubernetes 网络模型适用于 Kubernetes 通信的四种基本类型:

1. 容器到容器网络

容器是 Kubernetes 网络中最小的单元。在基本网络配置中,容器通过 localhost 在单个 Pod 内进行通信。之所以能实现这种通信,是因为同一 Pod 中的容器共享相同的网络命名空间,其中包括存储、IP 地址和端口空间等网络资源。

2. Pod to-Pod 网络

Pod-to-Pod 通信包括同一节点上的 Pod 之间的通信以及不同节点上的 Pod 之间的通信。Kubernetes 集群中的每个 Pod 都有自己的唯一 IP 地址,允许 Pod 之间直接通信,而无需考虑它们驻留的节点。而且,除了 Pod IP 地址之外,每个 Kubernetes 集群还自动提供 DNS 服务(域名系统服务)。DNS 服务将名称分配给 Pod(和服务),为管理员创建简单易读的名称,从而为服务发现提供轻量级机制。

3. Pod-to-Service 网络

Kubernetes 中的服务是一种抽象表示,它定义一组逻辑 Pod,并支持这些 Pod 的外部流量暴露、负载平衡和服务发现。这些服务可以促进 Pod-to-Service 通信和 External-to-Service 通信。

根据 Kubernetes 网络模型,Pod IP 地址是暂时的。因此,如果一个 Pod 崩溃或被删除,并在其位置创建了一个新的 Pod,则新的 Pod 很可能会收到一个新的 IP 地址。

在 Pod-to-Service 通信中,ClusterIP 是为一组 Pod 提供稳定虚拟 IP 地址的一种服务。该内部 IP 仅在集群内部可达,可用于 Pod 和服务之间的内部通信。

kube-proxy 安装在集群中的每个节点上,用于维护主机上的网络规则并监控服务和 Pod 的变化。创建或销毁 Pod 时,kube-proxy 会更新 iptables(一种实用程序,用于在 Linux 内核防火墙上创建流量路由规则)来反映这一变化,以便正确路由发送到服务 IP 的流量。

4. External-to-Service 网络

External-to-service 网络是指从 Kubernetes 集群外部公开和访问服务,如外部服务或数据库。

Kubernetes 提供多种服务,以促进外部流量进入集群:

  • ClusterIP:虽然 ClusterIP 是用于内部通信的默认 Kubernetes Service,但外部流量可以通过 kube-proxy 进行访问。使用笔记本电脑访问服务或调试服务时,ClusterIP 会很有帮助。
  • NodePort:NodePort 在每个节点 IP 的静态端口上公开服务,使群集外部也能访问该服务。NodePort 是执行 external-to-service 网络的最基本方法,通常用于测试目的,例如测试对应用程序的公共访问。
  • LoadBalancer:作为外部服务网络的标准,LoadBalancer 使用云提供商的负载均衡器向外部公开服务,并为服务分配一个公共 IP 地址。然后,来自外部负载均衡器的流量将定向到后端 Pod。
  • ExternalName:外部名称服务允许通过 DNS 名称访问外部服务,而无需将其暴露在 DNS 集群中。此类服务有助于为外部服务提供稳定的 DNS 名称,例如不在群集内托管的消息服务。
  • Ingress:Kubernetes 入口是一组路由规则集合,规则主要围绕外部访问集群内服务。Ingress Controller 是一个负载平衡器,充当 Kubernetes Service 和外部服务之间的网络桥梁。
Kubernetes 网络策略

Kubernetes 网络策略是一种应用程序构造,在 Kubernetes 网络中发挥着至关重要的作用。这些策略允许管理员和开发人员定义规则,指定 Pod 如何相互通信以及如何与其他网络端点通信。应用网络策略时需要使用 Kubernetes 网络策略 API,网络策略由以下基本组件组成:

  • Pod 选择器:Pod 选择器根据标签和选择器指定策略适用于哪些 Pod。
  • Ingress:入口定义了进入 Pod 的流量规则
  • Egress:Egress 定义 Pod 传出流量的规则。

Kubernetes 网络策略通过定义控制哪些 Pod 可以相互通信的规则,帮助定义和管理安全策略,从而防止未经授权的访问并避免恶意攻击。网络策略还确保 Pod 和服务之间提供隔离,以便只有这些 Pod 或服务才能与允许的 Pod 和服务通信。例如,在以下情况下,隔离对于多租户情境至关重要:开发运维或其他团队共享同一个 Kubernetes 集群但处理不同的项目。

对于有特定合规要求的公司,网络策略有助于指定和执行网络访问控制。这有助于达到监管标准,确保集群遵守组织政策。

容器网络接口 (CNI) 和网络插件

容器网络接口 (CNI) 是与 Kubernetes 网络相关的另一个重要功能。CNI 由云原生计算基金会创建和维护,Kubernetes 和其他容器运行时(包括 RedHat OpenShift® 和 Apache Mesos)都在使用,它是一个标准化规范和一套 API,定义了网络插件应如何启用容器网络。CNI 插件可以分配 IP 地址、创建网络命名空间、设置网络路由等,以实现同一节点内和跨节点的 Pod 间通信。

虽然 Kubernetes 提供默认 CNI,但许多第三方 CNI 插件(包括 Calico、Flannel 和 Weave)旨在处理基于容器的网络环境中的配置和安全性。虽然每个插件可能具有不同的功能和方法,例如覆盖网络或直接路由,但它们都遵守与 Kubernetes 兼容的 CNI 规范。

Kubernetes 教程

如果您想开始使用 Kubernetes,或想提高您使用 Kubernetes 和 Kubernetes 生态系统工具的现有技能,请试试这些教程。

Kubernetes 教程:提供认证的动手实验室

在 IBM Cloud® Kubernetes Service 上部署和运行集群的网页互动式培训。无需下载内容或进行配置。

关于 Kubernetes 的 8 个提示和技巧 IBM Developer 上的 Kubernetes 教程 使用 Kubernetes 在 IBM Cloud 上部署微服务应用程序
相关解决方案
IBM Cloud® Kubernetes Service

在原生 Kubernetes 体验中部署安全且高度可用的集群。

探索 IBM Cloud Kubernetes Service

Red Hat OpenShift® on IBM Cloud®

借助 Red Hat OpenShift on IBM Cloud,OpenShift 开发者可以快速安全地在 Kubernetes 集群中容器化和部署企业工作量。

探索 Red Hat OpenShift on IBM Cloud

IBM Cloud® Code Engine

IBM Cloud Code Engine 是一个完全托管的无服务器平台,可让您在完全托管的容器运行时上运行容器、应用程序代码或批处理作业。

探索 IBM Cloud Code Engine
资源 IBM Cloud 开发者培训

通过 IBM Cloud Professional Developer 认证中包含的课程培养 Kubernetes 技能。

表演必须继续

学生借助 Red Hat® OpenShift® on IBM Cloud® 展示艺术。

企业中的容器

容器是混合云策略的一部分,支持企业从任何地方构建和管理工作负载。

什么是 Kubernetes?

Kubernetes 是一个容器编排平台,用于调度和自动部署、管理和扩展容器化应用程序。

什么是容器?

容器是软件的可执行单元,其中应用程序代码与对应的库和依赖项一起以通用方式封装,以便代码可以在任何地方运行。

什么是容器编排?

容器编排可自动调配、部署和管理容器化应用程序,并简化相关流程。

采取下一步行动

查看 IBM Cloud Kubernetes Service 并免费获取集群。您只需创建一个免费的 IBM Cloud 帐户,即可获得一个群集,可试用 30 天。想了解更多定价选项?配置您的 Kubernetes 集群,计算价格并提供报价。

免费获取集群 查看定价选项