26.11. 配置 IPsec 加密
通过启用 IPsec,您可以加密节点之间的内部 pod 到 pod 集群流量,以及集群外部的 pod 和 IPsec 端点之间的外部流量。OVN-Kubernetes 集群网络上的节点之间的所有 pod 到 pod 网络流量都使用 IPsec 传输模式 加密。
默认禁用 IPsec。您可以在安装集群安装过程中或安装后启用 IPsec。有关集群安装的详情,请参阅 OpenShift Container Platform 安装概述。
当 libreswan 和 NetworkManager-libreswan 软件包有不同的 OpenShift Container Platform 版本时,将集群升级到 OpenShift Container Platform 4.15 会导致两个连续的计算节点重新引导操作。对于第一次重启,Cluster Network Operator (CNO)将 IPsec 配置应用到计算节点。对于第二个重启,Machine Config Operator (MCO)会将最新的机器配置应用到集群。
要将 CNO 和 MCO 更新合并到单一节点重启后,请完成以下任务:
-
在升级集群前,在对计算节点进行分组的
MachineConfigPools自定义资源(CR)中将paused参数设置为true。 -
在升级集群后,将参数设置为
false。
如需更多信息,请参阅 执行 Control Plane Only 更新。
OpenShift Container Platform 集群中 IPsec 存在以下支持限制:
- 在 IBM Cloud® 上,IPsec 仅支持 NAT-T。在此平台上不支持 Encapsulating Security Payload (ESP)。
- 如果您的集群在 Red Hat OpenShift Container Platform 中使用 托管的 control plane,则 IPsec 不支持 pod 到 pod,以及到外部主机的 IPsec 加密。
- 如果有一个或多个接口附加到 Open vSwitch (OVS),则不支持在任何网络接口中使用 ESP 硬件卸载。为集群启用 IPsec 会触发将 IPsec 与附加到 OVS 的接口搭配使用。默认情况下,OpenShift Container Platform 在附加到 OVS 的任何接口上禁用 ESP 硬件卸载。
- 如果您为未附加到 OVS 的网络接口启用了 IPsec,集群管理员必须在未附加到 OVS 的每个接口上手动禁用 ESP 硬件卸载。
-
Red Hat Enterprise Linux (RHEL)计算节点上不支持 IPsec,因为主机和每个计算节点上存在的
ovn-ipsec容器间的libreswan不兼容问题。请参阅(OCPBUGS-53316)。
以下列表概述了 IPsec 文档中的关键任务:
- 在集群安装后启用和禁用 IPsec。
- 为集群和外部主机之间的流量配置 IPsec 加密。
- 验证 IPsec 是否加密不同节点上的 pod 之间的流量。
26.11.1. 操作模式 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中使用 IPsec 时,您可以从以下操作模式中选择:
| 模式 | 描述 | default |
|---|---|---|
|
| 没有流量被加密。这是集群的默认设置。 | 是 |
|
| pod 到 pod 的流量被加密,如"由 pod 到 pod IPsec 加密的网络流量类型"中所述。完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。 | 否 |
|
| 完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。 | 否 |
26.11.2. 先决条件 复制链接链接已复制到粘贴板!
对于将流量加密到外部主机的 IPsec 支持,请确保您满足以下先决条件:
-
OVN-Kubernetes 网络插件必须配置为本地网关模式,其中
ovnKubernetesConfig.gatewayConfig.routingViaHost=true。 已安装 NMState Operator。指定 IPsec 配置需要这个 Operator。如需更多信息,请参阅关于 Kubernetes NMState Operator。
注意NMState Operator 仅在 Google Cloud Platform (GCP) 上支持来配置 IPsec。
-
已安装 Butane 工具 (
butane)。要安装 Butane,请参阅安装 Butane。
这些先决条件需要将证书添加到主机 NSS 数据库中,并配置 IPsec 与外部主机进行通信。
26.11.3. 启用 IPsec 时的网络连接要求 复制链接链接已复制到粘贴板!
您必须配置机器之间的网络连接,以允许 OpenShift Container Platform 集群组件进行通信。每台机器都必须能够解析集群中所有其他机器的主机名。
| 协议 | port | 描述 |
|---|---|---|
| UDP |
| IPsec IKE 数据包 |
|
| IPsec NAT-T 数据包 | |
| ESP | N/A | IPsec Encapsulating Security Payload(ESP) |
26.11.4. pod 到 pod 流量的 IPsec 加密 复制链接链接已复制到粘贴板!
对于 pod 到 pod 流量的 IPsec 加密,以下小节描述了加密哪些特定的 pod 到 pod 的流量,使用什么加密协议,以及如何处理 X.509 证书。这些部分不适用于集群和外部主机之间的 IPsec 加密,您必须为特定的外部网络基础架构手动配置。
26.11.4.1. 由 pod 到 pod IPsec 加密的网络流量类型 复制链接链接已复制到粘贴板!
启用 IPsec 后,只有 pod 间的以下网络流量会被加密:
- 集群网络的不同节点上的 pod 间的流量
- 从主机网络上的 pod 流量到集群网络上的 pod
以下流量流没有加密:
- 集群网络上同一节点上的 pod 间的流量
- 主机网络上的 pod 间的流量
- 从集群网络上的 pod 流量到主机网络上的 pod
下图中显示了加密和未加密的流程:
26.11.4.2. 加密协议和 IPsec 模式 复制链接链接已复制到粘贴板!
使用的加密机制是 AES-GCM-16-256。完整性检查值(ICV)为 16 字节。密钥长度为 256 位。
使用的 IPsec 模式是 传输模式,这是通过向原始数据包的 IP 标头添加封装安全 Payload (ESP) 标头来加密端到端通信的模式。OpenShift Container Platform 目前不支持 pod 到 pod 通信的 IPsec Tunnel 模式。
26.11.4.3. 安全证书生成和轮转 复制链接链接已复制到粘贴板!
Cluster Network Operator(CNO)生成自签名 X.509 证书颁发机构(CA),该颁发机构(CA)用于加密。来自每个节点的证书签名请求(CSR)由 CNO 自动实现。
CA 的有效期为 10 年。独立节点证书的有效期为 5 年,并在 4 年半后自动轮转。
26.11.5. 外部流量的 IPsec 加密 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持使用 IPsec 来加密用于外部主机的流量,确保传输过程中数据的保密性和完整性。此功能依赖于您必须提供的 X.509 证书。
26.11.5.1. 支持的平台 复制链接链接已复制到粘贴板!
在以下平台上支持此功能:
- 裸机
- Google Cloud Platform (GCP)
- Red Hat OpenStack Platform(RHOSP)
- VMware vSphere
如果您有 Red Hat Enterprise Linux (RHEL)计算节点,则它们不支持对外部流量的 IPsec 加密。
如果您的集群在 Red Hat OpenShift Container Platform 中使用托管的 control plane,则不支持将流量加密到外部主机的 IPsec。
26.11.5.2. 限制: 复制链接链接已复制到粘贴板!
确保观察到以下限制:
- 在为外部流量配置 IPsec 时,NMState Operator 目前不支持 IPv6 配置。
-
提供的证书捆绑包中的证书通用名称(CN)不能以
ovs_前缀开头,因为这个命名可以与每个节点的网络安全服务(NSS)数据库中的 pod 到 pod 的 IPsec CN 名称冲突。
26.11.6. 启用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群和外部 IPsec 端点之间,启用 pod 到 pod IPsec 加密和 IPsec 加密。
您可以使用以下模式之一配置 IPsec:
-
Full:pod 到 pod 和外部流量的加密 -
External:对外部流量进行加密
如果以 Full 模式配置 IPsec,还必须完成"为外部流量配置 IPsec 加密"过程。
先决条件
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin权限的用户身份登录集群。 -
您已将集群 MTU 的大小减少为
46字节,以允许 IPsec ESP 标头的开销。
流程
要启用 IPsec 加密,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
External以加密到外部主机的流量,或者指定Full来加密 pod 到 pod 流量,以及可选的到外部主机的流量。默认情况下禁用 IPsec。
- 完成"为外部流量配置 IPsec 加密"流程,使用 IPsec 加密外部流量。
验证
要查找 OVN-Kubernetes data plane pod 的名称,请输入以下命令:
oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
$ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-nodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证集群中是否启用了 IPsec:
注意作为集群管理员,您可以在 IPsec 配置为
Full模式时验证集群中 pod 之间是否启用了 IPsec。此步骤不会验证 IPsec 是否在集群和外部主机间工作。oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 其中
<XXXXX>指定上一步中 pod 的随机字符序列。
输出示例
true
trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
26.11.7. 为外部流量配置 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,要使用 IPsec 加密外部流量,您必须为网络基础架构配置 IPsec,包括提供 PKCS#12 证书。因为这个流程使用 Butane 创建机器配置,所以必须安装 butane 命令。
应用机器配置后,Machine Config Operator 会重新引导集群中受影响的节点,以推出新机器配置。
先决条件
-
安装 OpenShift CLI (
oc) 。 -
您已在本地计算机上安装了
butane工具。 - 在集群中安装了 NMState Operator。
-
以具有
cluster-admin权限的用户身份登录集群。 - 您有一个 IPsec 端点的现存的 PKCS#12 证书,以及一个 PEM 格式的 CA 证书。
-
您在集群中的
Full或External模式中启用了 IPsec。 -
您必须在 OVN-Kubernetes 网络插件的
ovnKubernetesConfig.gatewayConfig规格中将routingViaHost参数设置为true。
流程
使用 NMState Operator 节点网络配置策略创建 IPsec 配置。如需更多信息,请参阅 Libreswan 作为 IPsec VPN 实现。
要识别 IPsec 端点的集群节点的 IP 地址,请输入以下命令:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
ipsec-config.yaml的文件,其中包含 NMState Operator 的节点网络配置策略,如下例所示。有关NodeNetworkConfigurationPolicy对象的概述,请参阅 Kubernetes NMState 项目。NMState IPsec 传输配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NMState IPsec 隧道配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要配置 IPsec 接口,请输入以下命令:
oc create -f ipsec-config.yaml
$ oc create -f ipsec-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
提供以下证书文件以添加到每个主机上的网络安全服务(NSS)数据库中。这些文件在后续步骤中作为 Butane 配置的一部分导入。
-
left_server.p12:IPsec 端点的证书捆绑包 -
ca.pem:您使用签名证书的证书颁发机构
-
创建机器配置以将证书添加到集群中:
要为 control plane 和 worker 节点创建 Butane 配置文件,请输入以下命令:
注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如:4.15.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将上一步中创建的 Butane 文件转换为机器配置,请输入以下命令:
for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done$ for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
要将机器配置应用到集群,请输入以下命令:
for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done$ for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要当 Machine Config Operator (MCO) 更新每个机器配置池中的机器时,它会逐一重启每个节点。您必须等到所有节点都在外部 IPsec 连接可用前更新。
输入以下命令检查机器配置池状态:
oc get mcp
$ oc get mcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。注意默认情况下,MCO 会一次在一个池中更新一个机器,从而导致迁移总时间随着集群大小的增加而增加。
要确认 IPsec 机器配置已被成功推出,请输入以下命令:
确认已创建了 IPsec 机器配置:
oc get mc | grep ipsec
$ oc get mc | grep ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 IPsec 扩展应用到 control plane 节点:
oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
2
2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 IPsec 扩展已应用到 worker 节点:
oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -cCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
2
2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.11.8. 为外部 IPsec 端点禁用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以删除外部主机的现有 IPsec 隧道。
先决条件
-
安装 OpenShift CLI (
oc) 。 -
以具有
cluster-admin权限的用户身份登录集群。 -
您在集群中的
Full或External模式中启用了 IPsec。
流程
使用以下 YAML 创建名为
remove-ipsec-tunnel.yaml的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
name- 指定节点网络配置策略的名称。
node_name- 指定您要删除的 IPsec 隧道的节点名称。
tunnel_name- 指定现有 IPsec 隧道的接口名称。
要删除 IPsec 隧道,请输入以下命令:
oc apply -f remove-ipsec-tunnel.yaml
$ oc apply -f remove-ipsec-tunnel.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
26.11.9. 禁用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以禁用 IPsec 加密。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin权限的用户登陆到集群。
流程
要禁用 IPsec 加密,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:您可以将集群 MTU 的大小增加
46个字节,因为 IP 数据包中不再有 IPsec ESP 标头的开销。
26.11.10. 其他资源 复制链接链接已复制到粘贴板!
- 在 Red Hat Enterprise Linux (RHEL) 9 中配置使用 IPsec 的 VPN
- 安装 Butane
- 关于 OVN-Kubernetes Container Network Interface (CNI) 网络插件
- 更改集群网络的 MTU
- link:https://docs.redhat.com/en/documentation/openshift_container_platform/4.15/html-single/operator_apis/#network-operator-openshift-io-v1[Network [operator.openshift.io/v1\] API