网络概述


OpenShift Container Platform 4.17

了解 OpenShift Container Platform 中的基本网络概念和常规任务

Red Hat OpenShift Documentation Team

摘要

本文档介绍了 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 资源,如 IngressRoute

默认情况下,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 节点。

OpenShift Container Platform 安装程序不会为任何置备 OpenShift Container Platform 集群的 Amazon Elastic Compute Cloud (Amazon EC2) 实例创建公共 IP 地址。为了可以 SSH 到 OpenShift Container Platform 主机,您必须按照以下步骤操作。

流程

  1. 创建一个安全组,允许 SSH 访问由 openshift-install 命令创建的虚拟私有云 (VPC) 。
  2. 在安装程序创建的某个公共子网中创建 Amazon EC2 实例。
  3. 将公共 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 提供密钥。

  4. 一旦置备了 Amazon EC2 实例并可以 SSH 到它,您必须添加与 OpenShift Container Platform 安装关联的 SSH 密钥。这个密钥可以与堡垒实例的密钥不同,也可以相同。

    注意

    直接通过 SSH 访问仅建议在灾难恢复时使用。当 Kubernetes API 正常工作时,应该使用特权 Pod。

  5. 运行 oc get nodes,查看输出结果,然后选择一个 master 节点。主机名类似于 ip-10-0-1-163.ec2.internal
  6. 从您手动部署到 Amazon EC2 的堡垒 SSH 主机中,SSH 部署到该 control plane 主机。确定您使用了在安装过程中指定的相同的 SSH 密钥:

    $ ssh -i <ssh-key-path> core@<master-hostname>
    Copy to Clipboard Toggle word wrap

第 4 章 网络仪表板

网络指标可在 OpenShift Container Platform web 控制台的 dashboard 中的 ObserveDashboards 下查看。

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 UtilisationNetwork SaturationNetwork 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.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat