6.6. 配置 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.16 会导致两个连续的计算节点重新引导操作。对于第一次重启,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 之间的流量。
6.6.1. 操作模式 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中使用 IPsec 时,您可以从以下操作模式中选择:
模式 | 描述 | default |
---|---|---|
| 没有流量被加密。这是集群的默认设置。 | 是 |
| pod 到 pod 的流量被加密,如"由 pod 到 pod IPsec 加密的网络流量类型"中所述。完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。 | 否 |
| 完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。 | 否 |
6.6.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 与外部主机进行通信。
6.6.3. 启用 IPsec 时的网络连接要求 复制链接链接已复制到粘贴板!
您必须配置机器之间的网络连接,以允许 OpenShift Container Platform 集群组件进行通信。每台机器都必须能够解析集群中所有其他机器的主机名。
协议 | port | 描述 |
---|---|---|
UDP |
| IPsec IKE 数据包 |
| IPsec NAT-T 数据包 | |
ESP | N/A | IPsec Encapsulating Security Payload(ESP) |
6.6.4. pod 到 pod 流量的 IPsec 加密 复制链接链接已复制到粘贴板!
对于 pod 到 pod 流量的 IPsec 加密,以下小节描述了加密哪些特定的 pod 到 pod 的流量,使用什么加密协议,以及如何处理 X.509 证书。这些部分不适用于集群和外部主机之间的 IPsec 加密,您必须为特定的外部网络基础架构手动配置。
6.6.4.1. 由 pod 到 pod IPsec 加密的网络流量类型 复制链接链接已复制到粘贴板!
启用 IPsec 后,只有 pod 间的以下网络流量会被加密:
- 集群网络的不同节点上的 pod 间的流量
- 从主机网络上的 pod 流量到集群网络上的 pod
以下流量流没有加密:
- 集群网络上同一节点上的 pod 间的流量
- 主机网络上的 pod 间的流量
- 从集群网络上的 pod 流量到主机网络上的 pod
下图中显示了加密和未加密的流程:
6.6.4.2. 加密协议和 IPsec 模式 复制链接链接已复制到粘贴板!
使用的加密机制是 AES-GCM-16-256
。完整性检查值(ICV)为 16
字节。密钥长度为 256
位。
使用的 IPsec 模式是 传输模式,这是通过向原始数据包的 IP 标头添加封装安全 Payload (ESP) 标头来加密端到端通信的模式。OpenShift Container Platform 目前不支持 pod 到 pod 通信的 IPsec Tunnel 模式。
6.6.4.3. 安全证书生成和轮转 复制链接链接已复制到粘贴板!
Cluster Network Operator(CNO)生成自签名 X.509 证书颁发机构(CA),该颁发机构(CA)用于加密。来自每个节点的证书签名请求(CSR)由 CNO 自动实现。
CA 的有效期为 10 年。独立节点证书的有效期为 5 年,并在 4 年半后自动轮转。
6.6.5. 外部流量的 IPsec 加密 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持到具有必须提供的 TLS 证书的外部主机流量的 IPsec 加密。
6.6.5.1. 支持的平台 复制链接链接已复制到粘贴板!
在以下平台上支持此功能:
- 裸机
- Google Cloud Platform (GCP)
- Red Hat OpenStack Platform(RHOSP)
- VMware vSphere
如果您有 Red Hat Enterprise Linux (RHEL) worker 节点,它们不支持外部流量的 IPsec 加密。
如果您的集群在 Red Hat OpenShift Container Platform 中使用托管的 control plane,则不支持将流量加密到外部主机的 IPsec。
6.6.5.2. 限制: 复制链接链接已复制到粘贴板!
确保观察到以下限制:
- 在为外部流量配置 IPsec 时,NMState Operator 目前不支持 IPv6 配置。
-
提供的证书捆绑包中的证书通用名称(CN)不能以
ovs_
前缀开头,因为这个命名可以与每个节点的网络安全服务(NSS)数据库中的 pod 到 pod 的 IPsec CN 名称冲突。
6.6.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-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证您在集群中启用了 IPsec:
注意作为集群管理员,当您以
Full
模式配置 IPsec 时,您可以验证您是否在集群中的 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 . ipsec
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中: &
lt;XXXXX
> 指定上一步中 pod 的随机字符序列。命令的成功输出显示状态为
true
。
6.6.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 nodes
Copy 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.yaml
Copy 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.16.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 done
Copy 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 done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要当 Machine Config Operator (MCO) 更新每个机器配置池中的机器时,它会逐一重启每个节点。在外部 IPsec 连接可用前,您必须等待所有节点更新。
输入以下命令检查机器配置池状态:
oc get mcp
$ oc get mcp
Copy 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 ipsec
Copy 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 6d15h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 control plane 节点的 IPsec 扩展的应用程序。示例输出将显示
2
。oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认计算节点的 IPsec 扩展的应用程序。示例输出将显示
2
。oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.9. 禁用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以禁用 IPsec 加密。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。
流程
要禁用 IPsec 加密,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:您可以将集群 MTU 的大小增加
46
个字节,因为 IP 数据包中不再有 IPsec ESP 标头的开销。
6.6.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.16/html-single/operator_apis/#network-operator-openshift-io-v1[Network [operator.openshift.io/v1\] API