网络概述
了解 OpenShift Container Platform 中的基本网络概念和常规任务
摘要
第 1 章 关于网络 复制链接链接已复制到粘贴板!
Red Hat OpenShift 网络是一个功能生态系统、插件和高级网络功能,它使用高级网络相关功能来扩展 Kubernetes 网络,集群需要为其一个或多个混合集群管理网络流量。这个网络功能生态系统集成了入口、出口、负载均衡、高性能吞吐量、安全性和集群内部流量管理,并提供基于角色的可观察工具来减少其自然复杂性。
以下列表重点介绍集群中可用的一些最常用的 Red Hat OpenShift Networking 功能:
由以下 Container Network Interface (CNI) 插件之一提供的主要集群网络:
- 经认证的第三方替代主网络插件
- 用于网络插件管理的 Cluster Network Operator
- 用于 TLS 加密 Web 流量的 Ingress Operator
- 用于名称分配的 DNS Operator
- 用于裸机集群上的流量负载均衡的 MetalLB Operator
- 对高可用性的 IP 故障转移支持
- 通过多个 CNI 插件支持额外的硬件网络,包括 macvlan、ipvlan 和 SR-IOV 硬件网络
- IPv4、IPv6 和双堆栈寻址
- 用于基于 Windows 的工作负载的混合 Linux-Windows 主机集群
- Red Hat OpenShift Service Mesh 用于发现、负载均衡、服务对服务身份验证、故障恢复、指标和监控服务
- 单节点 OpenShift
- Network Observability Operator 用于网络调试和见解
- Submariner 用于 inter-cluster 网络
- Red Hat Service Interconnect 用于第 7 层 inter-cluster 网络
第 2 章 了解网络 复制链接链接已复制到粘贴板!
集群管理员有几个选项用于公开集群内的应用程序到外部流量并确保网络连接:
- 服务类型,如节点端口或负载均衡器
-
API 资源,如
Ingress
和Route
默认情况下,Kubernetes 为 pod 内运行的应用分配内部 IP 地址。Pod 及其容器可以网络,但集群外的客户端无法访问网络。当您将应用公开给外部流量时,为每个容器集指定自己的 IP 地址意味着 pod 在端口分配、网络、命名、服务发现、负载平衡、应用配置和迁移方面可被视为物理主机或虚拟机。
一些云平台提供侦听 169.254.169.254 IP 地址的元数据 API,它是 IPv4 169.254.0.0/16
CIDR 块中的 连接内部 IP 地址。
此 CIDR 块无法从 pod 网络访问。需要访问这些 IP 地址的 Pod 必须通过将 pod spec 中的 spec.hostnetwork
字段设置为 true
来获得主机网络访问。
如果允许 pod 主机网络访问,则将授予 pod 对底层网络基础架构的访问权限。
2.1. OpenShift Container Platform DNS 复制链接链接已复制到粘贴板!
如果您运行多个服务,比如使用多个 pod 的前端和后端服务,则要为用户名和服务 IP 等创建环境变量,使前端 pod 可以跟后端服务通信。如果删除并重新创建服务,可以为该服务分配一个新的 IP 地址,而且需要重新创建前端 pod 来获取服务 IP 环境变量的更新值。另外,必须在任何前端 pod 之前创建后端服务,以确保正确生成服务 IP,并将它作为环境变量提供给前端 pod。
因此,OpenShift Container Platform 具有一个内置 DNS,以便服务 DNS 以及服务 IP/端口能够访问这些服务。
2.2. OpenShift Container Platform Ingress Operator 复制链接链接已复制到粘贴板!
在创建 OpenShift Container Platform 集群时,在集群中运行的 Pod 和服务会各自分配自己的 IP 地址。IP 地址可供附近运行的其他容器集和服务访问,但外部客户端无法访问这些 IP 地址。
Ingress Operator 通过部署和管理一个或多个基于 HAProxy 的 Ingress Controller 来处理路由,使外部客户端可以访问您的服务。您可以通过指定 OpenShift Container Platform Route
和 Kubernetes Ingress
资源,来使用 Ingress Operator 路由流量。Ingress Controller 中的配置(如定义 endpointPublishingStrategy
类型和内部负载平衡)提供了发布 Ingress Controller 端点的方法。
2.2.1. 路由和 Ingress 的比较 复制链接链接已复制到粘贴板!
OpenShift Container Platform 中的 Kubernetes Ingress 资源通过作为集群内 pod 运行的共享路由器服务来实现 Ingress Controller。管理 Ingress 流量的最常见方法是使用 Ingress Controller。您可以像任何其他常规 pod 一样扩展和复制此 pod。此路由器服务基于 HAProxy,后者是一个开源负载均衡器解决方案。
OpenShift Container Platform 路由为集群中的服务提供入口流量。路由提供了标准 Kubernetes Ingress Controller 可能不支持的高级功能,如 TLS 重新加密、TLS 直通和为蓝绿部署分割流量。
入口流量通过路由访问集群中的服务。路由和入口是处理入口流量的主要资源。Ingress 提供类似于路由的功能,如接受外部请求并根据路由委派它们。但是,对于 Ingress,您只能允许某些类型的连接:HTTP/2、HTTPS 和服务器名称识别(SNI),以及 TLS(证书)。在 OpenShift Container Platform 中,生成路由以满足 Ingress 资源指定的条件。
2.3. OpenShift Container Platform 网络的常见术语表 复制链接链接已复制到粘贴板!
该术语表定义了在网络内容中使用的常用术语。
- 身份验证
- 为了控制对 OpenShift Container Platform 集群的访问,集群管理员可以配置用户身份验证,并确保只有批准的用户访问集群。要与 OpenShift Container Platform 集群交互,您必须对 OpenShift Container Platform API 进行身份验证。您可以通过在您对 OpenShift Container Platform API 的请求中提供 OAuth 访问令牌或 X.509 客户端证书来进行身份验证。
- AWS Load Balancer Operator
-
AWS Load Balancer (ALB) Operator 部署和管理
aws-load-balancer-controller
的实例。 - Cluster Network Operator
- Cluster Network Operator(CNO)在 OpenShift Container Platform 集群中部署和管理集群网络组件。这包括在安装过程中为集群选择的 Container Network Interface (CNI) 网络插件部署。
- 配置映射
-
配置映射提供将配置数据注入 pod 的方法。您可以在类型为
ConfigMap
的卷中引用存储在配置映射中的数据。在 pod 中运行的应用程序可以使用这个数据。 - 自定义资源 (CR)
- CR 是 Kubernetes API 的扩展。您可以创建自定义资源。
- DNS
- 集群 DNS 是一个 DNS 服务器,它为 Kubernetes 服务提供 DNS 记录。由 Kubernetes 启动的容器会在其 DNS 搜索中自动包含此 DNS 服务器。
- DNS Operator
- DNS Operator 部署并管理 CoreDNS,以便为 pod 提供名称解析服务。这会在 OpenShift Container Platform 中启用基于 DNS 的 Kubernetes 服务发现。
- 部署
- 维护应用程序生命周期的 Kubernetes 资源对象。
- domain
- Domain(域)是 Ingress Controller 提供的 DNS 名称。
- egress
- 通过来自 pod 的网络出站流量进行外部数据共享的过程。
- 外部 DNS Operator
- External DNS Operator 部署并管理 ExternalDNS,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。
- 基于 HTTP 的路由
- 基于 HTTP 的路由是一个不受保护的路由,它使用基本的 HTTP 路由协议,并在未安全的应用程序端口上公开服务。
- 入口
- OpenShift Container Platform 中的 Kubernetes Ingress 资源通过作为集群内 pod 运行的共享路由器服务来实现 Ingress Controller。
- Ingress Controller
- Ingress Operator 管理 Ingress Controller。使用 Ingress Controller 是允许从外部访问 OpenShift Container Platform 集群的最常用方法。
- 安装程序置备的基础架构
- 安装程序部署并配置运行集群的基础架构。
- kubelet
- 在集群的每个节点上运行的一个主节点代理,以确保容器在 pod 中运行。
- Kubernetes NMState Operator
- Kubernetes NMState Operator 提供了一个 Kubernetes API,用于使用 NMState 在 OpenShift Container Platform 集群的节点上执行状态驱动的网络配置。
- kube-proxy
- kube-proxy 是一个代理服务,在每个节点上运行,有助于为外部主机提供服务。它有助于将请求转发到正确的容器,并且能够执行原语负载平衡。
- 负载均衡器
- OpenShift Container Platform 使用负载均衡器从集群外部与集群中运行的服务进行通信。
- MetalLB Operator
-
作为集群管理员,您可以将 MetalLB Operator 添加到集群中,以便在将
LoadBalancer
类型服务添加到集群中时,MetalLB 可为该服务添加外部 IP 地址。 - multicast
- 通过使用 IP 多播,数据可同时广播到许多 IP 地址。
- 命名空间
- 命名空间隔离所有进程可见的特定系统资源。在一个命名空间中,只有属于该命名空间的进程才能看到这些资源。
- networking
- OpenShift Container Platform 集群的网络信息。
- node
- OpenShift Container Platform 集群中的 worker 机器。节点是虚拟机 (VM) 或物理计算机。
- OpenShift Container Platform Ingress Operator
-
Ingress Operator 实现
IngressController
API,是负责启用对 OpenShift Container Platform 服务的外部访问的组件。 - pod
- 一个或多个带有共享资源(如卷和 IP 地址)的容器,在 OpenShift Container Platform 集群中运行。pod 是定义、部署和管理的最小计算单元。
- PTP Operator
-
PTP Operator 会创建和管理
linuxptp
服务。 - route
- OpenShift Container Platform 路由为集群中的服务提供入口流量。路由提供了标准 Kubernetes Ingress Controller 可能不支持的高级功能,如 TLS 重新加密、TLS 直通和为蓝绿部署分割流量。
- 扩展
- 增加或减少资源容量。
- service
- 在一组 pod 上公开正在运行的应用程序。
- 单根 I/O 虚拟化 (SR-IOV) Network Operator
- Single Root I/O Virtualization(SR-IOV)Network Operator 管理集群中的 SR-IOV 网络设备和网络附加。
- 软件定义型网络 (SDN)
- 软件定义网络 (SDN) 方法提供了一个统一的集群网络,它允许 OpenShift Container Platform 集群中的不同 pod 相互间进行通信。
- 流控制传输协议 (SCTP)
- SCTP 是基于信息的可靠协议,可在 IP 网络之上运行。
- taint
- 污点和容限可确保将 pod 调度到适当的节点上。您可以在节点上应用一个或多个污点。
- 容限 (tolerations)
- 您可以将容限应用到 pod。容限 (toleration) 允许调度程序调度具有匹配污点的 pod。
- Web 控制台
- 用于管理 OpenShift Container Platform 的用户界面(UI)。
第 3 章 访问主机 复制链接链接已复制到粘贴板!
了解如何创建堡垒主机来访问 OpenShift Container Platform 实例,以及使用安全 shell (SSH) 访问 control plane 节点。
3.1. 访问安装程序置备的基础架构集群中 Amazon Web Services 上的主机 复制链接链接已复制到粘贴板!
OpenShift Container Platform 安装程序不会为任何置备 OpenShift Container Platform 集群的 Amazon Elastic Compute Cloud (Amazon EC2) 实例创建公共 IP 地址。为了可以 SSH 到 OpenShift Container Platform 主机,您必须按照以下步骤操作。
流程
-
创建一个安全组,允许 SSH 访问由
openshift-install
命令创建的虚拟私有云 (VPC) 。 - 在安装程序创建的某个公共子网中创建 Amazon EC2 实例。
将公共 IP 地址与您创建的 Amazon EC2 实例相关联。
与 OpenShift Container Platform 安装不同,您应该将您创建的 Amazon EC2 实例与 SSH 密钥对关联。这与您为这个实例选择的操作系统无关,因为它只是一个 SSH 堡垒将互联网桥接到 OpenShift Container Platform 集群的 VPC。它与您使用的 Amazon Machine Image (AMI) 相关。例如,在 Red Hat Enterprise Linux CoreOS(RHCOS) 中,您可以像安装程序一样通过 Ignition 提供密钥。
一旦置备了 Amazon EC2 实例并可以 SSH 到它,您必须添加与 OpenShift Container Platform 安装关联的 SSH 密钥。这个密钥可以与堡垒实例的密钥不同,也可以相同。
注意直接通过 SSH 访问仅建议在灾难恢复时使用。当 Kubernetes API 正常工作时,应该使用特权 Pod。
-
运行
oc get nodes
,查看输出结果,然后选择一个 master 节点。主机名类似于ip-10-0-1-163.ec2.internal
。 从您手动部署到 Amazon EC2 的堡垒 SSH 主机中,SSH 部署到该 control plane 主机。确定您使用了在安装过程中指定的相同的 SSH 密钥:
ssh -i <ssh-key-path> core@<master-hostname>
$ ssh -i <ssh-key-path> core@<master-hostname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 网络仪表板 复制链接链接已复制到粘贴板!
网络指标可在 OpenShift Container Platform web 控制台的 dashboard 中的 Observe → Dashboards 下查看。
4.1. Network Observability Operator 复制链接链接已复制到粘贴板!
如果安装了 Network Observability Operator,可以通过从 Dashboards 下拉列表中选择 Netobserv 仪表板来查看网络流量指标仪表板。有关此仪表板中可用指标的更多信息,请参阅 Network Observability metrics dashboard。
4.2. 网络和 OVN-Kubernetes 仪表板 复制链接链接已复制到粘贴板!
您可以从仪表板中查看常规网络指标和 OVN-Kubernetes 指标。
要查看常规网络指标,请从 Dashboards 下拉列表中选择 Networking/Linux Subsystem Stats。您可以从控制面板查看以下网络指标:Network Utilisation、Network Saturation 和 Network Errors。
要查看 OVN-Kubernetes 指标,请从 Dashboards 下拉列表中选择 Networking/Infrastructure。您可以查看以下 OVN-Kuberenetes 指标:Networking Configuration, TCP Latency Probes, Control Plane Resources, 和 Worker Resources。
4.3. Ingress Operator 仪表板 复制链接链接已复制到粘贴板!
您可以从仪表板中查看 Ingress Operator 处理的网络指标。这包括类似如下的指标:
- 传入和传出带宽
- HTTP 错误率
- HTTP 服务器响应延迟
要查看这些 Ingress 指标,请从 Dashboards 下拉列表中选择 Networking/Ingress。您可以查看以下类别的 Ingress 指标: Top 10 Per Route,Top 10 Per Namespace, 和 Top 10 Per Shard。
第 5 章 CIDR 范围定义 复制链接链接已复制到粘贴板!
如果您的集群使用 OVN-Kubernetes,您必须为无类别域间路由(CIDR)子网范围指定非重叠范围。
对于 OpenShift Container Platform 4.17 及更新的版本,集群使用 169.254.0.0/17
(IPv4),或 fd69::/112
(IPv6)作为默认的伪装子网。用户也应避免这些范围。对于升级的集群,默认 masquerade 子网没有变化。
以下子网类型,对于使用 OVN-Kubernetes 的集群是强制的:
- Join :使用 join 交换将网关路由器连接到分布式路由器。join 交换减少了分布式路由器的 IP 地址数量。对于使用 OVN-Kubernetes 插件的集群,专用子网的 IP 地址都会被分配给附加到 join 交换的任何逻辑端口。
- Masquerade:在负载均衡器做出路由决策后,将从节点发送到同一节点的相同源和目标 IP 地址发生冲突。
- Transit :传输开关是跨集群中所有节点的分布式交换机类型。transit 交换会在不同区域间路由流量。对于使用 OVN-Kubernetes 插件的集群,专用子网的 IP 地址都会被分配给附加到 transit 交换的任何逻辑端口。
您可以将集群的加入、伪装和传输 CIDR 范围作为安装后任务更改。
OVN-Kubernetes 是 OpenShift Container Platform 4.14 及之后的版本中的默认网络供应商,内部使用以下 IP 地址子网范围:
-
V4JoinSubnet
:100.64.0.0/16
-
V6JoinSubnet
:fd98::/64
-
V4TransitSwitchSubnet
:100.88.0.0/16
-
V6TransitSwitchSubnet
:fd97::/64
-
defaultV4MasqueradeSubnet
:169.254.0.0/17
-
defaultV6MasqueradeSubnet
:fd69::/112
前面的列表包括了 join、transfer 和 masquerade IPv4 和 IPv6 地址子网。如果您的集群使用 OVN-Kubernetes,请不要在集群或基础架构中的任何其他 CIDR 定义中包含这些 IP 地址子网范围。
5.1. Machine CIDR 复制链接链接已复制到粘贴板!
在 Machine classless inter-domain routing (CIDR) 字段中,您必须为机器或集群节点指定 IP 地址范围。
创建集群后无法更改机器 CIDR 范围。
默认值为 10.0.0.0/16
。这个范围不得与任何连接的网络冲突。
5.2. Service CIDR 复制链接链接已复制到粘贴板!
在 Service CIDR 字段中,您必须为服务指定 IP 地址范围。范围必须足够大,以适应您的工作负载。该地址块不得与从集群内部访问的任何外部服务重叠。默认为 172.30.0.0/16
。
5.3. Pod CIDR 复制链接链接已复制到粘贴板!
在 pod CIDR 字段中,您必须为 pod 指定 IP 地址范围。
pod CIDR 与 clusterNetwork
CIDR 和集群 CIDR 相同。范围必须足够大,以适应您的工作负载。该地址块不得与从集群内部访问的任何外部服务重叠。默认为 10.128.0.0/14
。您可以在集群安装后扩展范围。
5.4. 主机前缀 复制链接链接已复制到粘贴板!
在 Host Prefix 字段中,您必须指定分配给调度到各个机器的 pod 的子网前缀长度。主机前缀决定了每台机器的 pod IP 地址池。
例如,如果主机前缀设置为 /23
,则每台机器从 pod CIDR 地址范围中分配一个 /23
子网。默认值为 /23
,允许 510 集群节点,以及每个节点的 510 个 pod IP 地址。
5.5. 托管 control plane 的 CIDR 范围 复制链接链接已复制到粘贴板!
要在 OpenShift Container Platform 上部署托管的 control plane,请使用以下所需的无类别域间路由(CIDR)子网范围:
-
v4InternalSubnet
: 100.65.0.0/16 (OVN-Kubernetes) -
clusterNetwork
: 10.132.0.0/14 (pod network) -
serviceNetwork
: 172.31.0.0/16
如需有关 OpenShift Container Platform CIDR 范围定义的更多信息,请参阅"CIDR 范围定义"。
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.