什么是 Kubernetes 网络?

一名男子在阿尔高阿尔卑斯山独自徒步

作者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

什么是 Kubernetes 网络?

Kubernetes 网络提供网络基础架构,用于实现容器化应用程序的通信、可扩展性、安全性和外部访问。

该网络十分复杂,涉及内部所有主要组件(例如 Pod、节点、容器和服务)与外部组件(例如 Kubernetes 簇的外部流量)之间的通信。

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

1. 容器到容器网络。

2. Pod 到 Pod 网络。

3. Pod 到服务网络。

4. 外部到服务网络。

高速公路鸟瞰图

在云端保持清醒头脑 


获取每周 Think 时事通讯,了解有关在 AI 时代优化多云设置的专家指导。

什么是 Kubernetes (K8s)?

Kubernetes 这个名字起源于希腊语,意思是舵手或飞行员。基于谷歌的内部容器编排平台 Borg,Kubernetes 于 2014 年作为开源工具向公众推出。

同年,Google 将 Kubernetes 捐赠给云原生计算基金会,该基金会是开源、供应商中立的云原生计算中心。从那时起,Kubernetes 已成为全球运行基于容器的工作负载时使用最为广泛的容器编排工具。

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

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

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

NS1 Connect

IBM NS1 Connect

使用 IBM NS1 Connect 增强网络弹性。我们将在本视频中讨论 IBM NS1 Connect 在应用程序弹性和性能方面的价值。

Kubernetes (K8s) 架构

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

集群

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

主节点

主节点表示单个计算主机,可以是虚拟机,也可以是物理机。它们托管 Kubernetes 控制平面组件,并负责调度和扩展应用程序。

通过管理 Kubernetes 集群中的所有计算、网络和存储资源,主节点可确保容器化应用程序和服务均匀地部署到集群中的工作程序节点。j

工作节点

工作程序节点负责运行容器并执行主节点分配的任何工作。它们还托管应用程序容器,这些容器被分组为 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 网络之前,值得先回顾以下基础网络术语:

网络主机:指连接到网络的任何计算机,其向网络中的其他主机或节点提供信息、应用程序或服务。

Internet protocol (IP) 地址IP 地址指分配给所有连接到网络的设备的唯一标识号,这些设备通过 IP 协议进行通信。它用于标识设备所属的主机网络及其在该主机网络中的位置。

本地主机:本地主机是默认主机名,其功能等同于私有 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 通信的 4 种基本类型:

1. 容器到容器网络

容器是 Kubernetes 网络中最小的单元。在基本网络配置中,容器通过 localhost 在单个 Pod 内进行通信。

之所以能实现这种通信,是因为同一 Pod 中的容器共享相同的网络命名空间,其中包括存储、IP 地址和端口空间等网络资源。

2. Pod 到 Pod 网络

Pod 到 Pod 通信包括同一节点上的 Pod 之间的通信以及不同节点上的 Pod 之间的通信。Kubernetes 集群中的每个 Pod 都有自己的唯一 IP 地址,允许 Pod 之间直接通信,而无需考虑它们驻留的节点。

而且,除了 Pod IP 地址之外,每个 Kubernetes 集群还自动提供域名系统服务 (DNS Services)。DNS Services 将名称分配给 Pod 和服务,为管理员创建简单易读的名称,从而为服务发现提供轻量级机制。

3. Pod 到服务网络

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. 外部到服务网络

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

Kubernetes 提供多种服务以支持外部流量接入集群:

集群 IP (ClusterIP):ClusterIP 是 Kubernetes 用于内部通信的默认服务类型,外部流量可通过 kube-proxy 访问该服务。在笔记本电脑上访问服务或调试服务时,ClusterIP 会非常实用。

节点端口 (NodePort):NodePort 会在每个节点的 IP 上通过静态端口暴露服务,使该服务可在集群外部访问。NodePort 是实现“外部到服务”网络通信的最基础方式,常用于测试场景(例如验证应用的公网访问可用性)。

负载均衡器 (LoadBalancer):作为外部服务网络通信的标准方案,LoadBalancer 通过云供应商提供的负载均衡器向外部暴露服务,并为该服务分配公网 IP 地址。外部负载均衡器的流量随后会路由至后端 Pod。

外部名称 (ExternalName):外部名称服务允许通过 DNS 名称访问外部服务,无需在集群 DNS 中暴露该外部服务。此类服务有助于为外部服务提供稳定的 DNS 名称(例如未部署在集群内的消息服务)。

入站规则 (Ingress):Kubernetes 入站规则是一组路由规则的集合,用于管理集群内服务的外部访问。入站规则控制器是一个负载平衡器,充当 Kubernetes Service 和外部服务之间的网络桥梁。

Kubernetes 网络策略

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

网络策略通过 Kubernetes 网络策略 API 应用,包含以下基本组件:

Pod 选择器:Pod 选择器基于标签和选择器指定策略适用的目标 Pod。

入站规则 (Ingress):入站规则定义 Pod 的入站流量访问规则。

出站规则 (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 (K8s)教程

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

相关解决方案
IBM Cloud Pak for Network Automation

IBM Cloud Pak for Network Automation 是一款 Cloud Pak,可以实现网络基础设施运营的自动化和编排。

深入了解 Cloud Pak Automation
网络解决方案

IBM 的云网络解决方案可实现高性能连接,为应用程序和业务提供支持。

深入了解云网络解决方案
网络支持服务

使用 IBM Technology Lifecycle Services 整合数据中心支持,以实现云网络等。

云网络服务
采取后续步骤

通过先进的 DNS 管理和云解决方案增强业务发展。利用 IBM 领先的服务,提高应用程序的可靠性并优化网络性能。

深入了解云网络解决方案 发现托管 DNS Services