6.6. 配置 IPsec 加密


通过启用 IPsec,您可以加密节点之间的内部 pod 到 pod 集群流量,以及集群外部的 pod 和 IPsec 端点之间的外部流量。OVN-Kubernetes 集群网络上的节点之间的所有 pod 到 pod 网络流量都使用 IPsec 传输模式 加密。

默认禁用 IPsec。您可以在安装集群安装过程中或安装后启用 IPsec。有关集群安装的详情,请参阅 OpenShift Container Platform 安装概述

注意

libreswanNetworkManager-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 时,您可以从以下操作模式中选择:

Expand
表 6.5. 操作的 IPsec 模式
模式描述default

Disabled

没有流量被加密。这是集群的默认设置。

Full

pod 到 pod 的流量被加密,如"由 pod 到 pod IPsec 加密的网络流量类型"中所述。完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。

外部

完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。

6.6.2. 先决条件

对于将流量加密到外部主机的 IPsec 支持,请确保您满足以下先决条件:

  • 在 OVN-Kubernetes 网络插件的 ovnKubernetesConfig.gatewayConfig 规格中设置 routingViaHost=true
  • 安装 NMState Operator。指定 IPsec 配置需要这个 Operator。如需更多信息,请参阅 Kubernetes NMState Operator

    注意

    Google Cloud 仅支持 NMState Operator 来配置 IPsec。

  • 已安装 Butane 工具 (butane)。要安装 Butane,请参阅安装 Butane

这些先决条件需要将证书添加到主机 NSS 数据库中,并配置 IPsec 与外部主机进行通信。

6.6.3. 启用 IPsec 时的网络连接要求

您必须配置机器之间的网络连接,以允许 OpenShift Container Platform 集群组件进行通信。每台机器都必须能够解析集群中所有其他机器的主机名。

Expand
表 6.6. 用于全机器到所有机器通信的端口
协议port描述

UDP

500

IPsec IKE 数据包

4500

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 支持使用 IPsec 来加密用于外部主机的流量,确保传输过程中数据的保密性和完整性。此功能依赖于您必须提供的 X.509 证书。

6.6.5.1. 支持的平台

在以下平台上支持此功能:

  • 裸机
  • Google Cloud
  • Red Hat OpenStack Platform(RHOSP)
  • VMware vSphere
重要

如果您有 Red Hat Enterprise Linux (RHEL)计算节点,则它们不支持对外部流量的 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 标头的开销。

流程

  1. 要启用 IPsec 加密,请输入以下命令:

    $ oc patch networks.operator.openshift.io cluster --type=merge -p \
      '{
      "spec":{
        "defaultNetwork":{
          "ovnKubernetesConfig":{
            "ipsecConfig":{
              "mode":"<mode"> 
    1
    
            }}}}}'
    Copy to Clipboard Toggle word wrap
    1 1 1
    指定 External 以加密到外部主机的流量,或者指定 Full 来加密 pod 到 pod 流量,以及可选的到外部主机的流量。默认情况下禁用 IPsec。
  2. 完成"为外部流量配置 IPsec 加密"流程,使用 IPsec 加密外部流量。

验证

  1. 要查找 OVN-Kubernetes data plane pod 的名称,请输入以下命令:

    $ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
    Copy to Clipboard Toggle word wrap

    输出示例

    ovnkube-node-5xqbf                       8/8     Running   0              28m
    ovnkube-node-6mwcx                       8/8     Running   0              29m
    ovnkube-node-ck5fr                       8/8     Running   0              31m
    ovnkube-node-fr4ld                       8/8     Running   0              26m
    ovnkube-node-wgs4l                       8/8     Running   0              33m
    ovnkube-node-zfvcl                       8/8     Running   0              34m
    ...
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,验证您在集群中启用了 IPsec:

    注意

    作为集群管理员,当您以 Full 模式配置 IPsec 时,您可以验证您是否在集群中的 pod 之间启用了 IPsec。此步骤不会验证 IPsec 是否在集群和外部主机间工作。

    $ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec 
    1
    Copy to Clipboard Toggle word wrap

    其中: & lt;XXXXX > 指定上一步中 pod 的随机字符序列。

    命令的成功输出显示状态为 true

6.6.7. 为外部流量配置 IPsec 加密

作为集群管理员,要使用 IPsec 加密外部流量,您必须为网络基础架构配置 IPsec,包括提供 PKCS#12 证书。因为这个步骤使用 Butane 创建机器配置,所以您必须安装 butane 工具。

注意

应用机器配置后,Machine Config Operator (MCO)会重启集群中的受影响节点以推出新机器配置。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 您已在本地计算机上安装了 butane 工具。
  • 在集群中安装了 NMState Operator。
  • 以具有 cluster-admin 权限的用户身份登录集群。
  • 您已为 IPsec 端点有一个现有的 PKCSxdg 证书,并以 Privacy Enhanced Mail (PEM)格式使用 CA 证书。
  • 您在集群中的 FullExternal 模式中启用了 IPsec。
  • 您必须在 OVN-Kubernetes 网络插件的 ovnKubernetesConfig.gatewayConfig 规格中将 routingViaHost 参数设置为 true

流程

  1. 使用 NMState Operator 节点网络配置策略创建 IPsec 配置。如需更多信息,请参阅使用 nmstatectl 配置基于 IPsec 的 VPN 连接

    1. 要识别 IPsec 端点的集群节点的 IP 地址,请输入以下命令:

      $ oc get nodes
      Copy to Clipboard Toggle word wrap
    2. 创建名为 ipsec-config.yaml 的文件,该文件具有 NMState Operator 的节点网络配置策略,如下例所示。有关 NodeNetworkConfigurationPolicy 对象的概述,请参阅 Kubernetes NMState 项目

      NMState IPsec 传输配置示例

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: ipsec-config
      spec:
        nodeSelector:
          kubernetes.io/hostname: "<hostname>"
        desiredState:
          interfaces:
          - name: <interface_name>
            type: ipsec
            libreswan:
              left: <cluster_node>
              leftid: '%fromcert'
              leftrsasigkey: '%cert'
              leftcert: left_server
              leftmodecfgclient: false
              right: <external_host>
              rightid: '%fromcert'
              rightrsasigkey: '%cert'
              rightsubnet: <external_address>/32
              ikev2: insist
              type: transport
      Copy to Clipboard Toggle word wrap

      其中:

      kubernetes.io/hostname
      指定要将策略应用到的主机名。此主机充当 IPsec 配置中的左侧主机。
      name
      指定要在主机上创建的接口名称。
      left
      指定在集群端终止 IPsec 隧道的集群节点的主机名。名称必须与您提供的 PKCS resources 证书中的 SAN [Subject Alternate Name] 匹配。
      right
      指定外部主机名,如 host.example.com。名称应与您提供的 PKCS#12 证书中的 SAN [Subject Alternate Name] 匹配。
      rightsubnet

      指定外部主机的 IP 地址,如 10.1.2.3/32

      NMState IPsec 隧道配置示例

      apiVersion: nmstate.io/v1
      kind: NodeNetworkConfigurationPolicy
      metadata:
        name: ipsec-config
      spec:
        nodeSelector:
          kubernetes.io/hostname: "<hostname>"
        desiredState:
          interfaces:
          - name: <interface_name>
            type: ipsec
            libreswan:
              left: <cluster_node>
              leftid: '%fromcert'
              leftmodecfgclient: false
              leftrsasigkey: '%cert'
              leftcert: left_server
              right: <external_host>
              rightid: '%fromcert'
              rightrsasigkey: '%cert'
              rightsubnet: <external_address>/32
              ikev2: insist
              type: tunnel
      Copy to Clipboard Toggle word wrap

    3. 要配置 IPsec 接口,请输入以下命令:

      $ oc create -f ipsec-config.yaml
      Copy to Clipboard Toggle word wrap
  2. 授予以下证书文件添加到每个主机上的网络安全服务(NSS)数据库中。这些文件在下一步中作为 Butane 配置的一部分导入。

    • left_server.p12:IPsec 端点的证书捆绑包
    • ca.pem :您使用签名证书的证书颁发机构
  3. 创建机器配置以将证书添加到集群中。
  4. 从挂载的 secret 文件中读取密码:

    $ password=$(cat run/secrets/<left_server_password>)
    Copy to Clipboard Toggle word wrap
    • left_server_password:: 包含密码的文件名称。此文件存在于挂载的 secret 中。
  5. 使用 pk12util 工具,它预先打包了 Red Hat Enterprise Linux (RHEL),输入以下命令指定保护 PKCS edServiceSet 文件的密码。确保将 < password&gt; 值替换为您的密码。

    $ pk12util -W "<password>" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/
    Copy to Clipboard Toggle word wrap
  6. 要为 control plane 和计算节点创建 Butane 配置文件,请输入以下命令:

    注意

    您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以 0 结尾。例如:4.16.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。

    $ for role in master worker; do
      cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF
      variant: openshift
      version: 4.16.0
      metadata:
        name: 99-${role}-import-certs
        labels:
          machineconfiguration.openshift.io/role: $role
      systemd:
        units:
        - name: ipsec-import.service
          enabled: true
          contents: |
            [Unit]
            Description=Import external certs into ipsec NSS
            Before=ipsec.service
    
            [Service]
            Type=oneshot
            ExecStart=/usr/local/bin/ipsec-addcert.sh
            RemainAfterExit=false
            StandardOutput=journal
    
            [Install]
            WantedBy=multi-user.target
      storage:
        files:
        - path: /etc/pki/certs/ca.pem
          mode: 0400
          overwrite: true
          contents:
            local: ca.pem
        - path: /etc/pki/certs/left_server.p12
          mode: 0400
          overwrite: true
          contents:
            local: left_server.p12
        - path: /usr/local/bin/ipsec-addcert.sh
          mode: 0740
          overwrite: true
          contents:
            inline: |
              #!/bin/bash -e
              echo "importing cert to NSS"
              certutil -A -n "CA" -t "CT,C,C" -d /var/lib/ipsec/nss/ -i /etc/pki/certs/ca.pem
              pk12util -W "" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/
              certutil -M -n "left_server" -t "u,u,u" -d /var/lib/ipsec/nss/
    EOF
    done
    Copy to Clipboard Toggle word wrap
  7. 要将上一步中创建的 Butane 文件转换为机器配置,请输入以下命令:

    $ 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 Toggle word wrap
  8. 要将机器配置应用到集群,请输入以下命令:

    $ for role in master worker; do
      oc apply -f 99-ipsec-${role}-endpoint-config.yaml
    done
    Copy to Clipboard Toggle word wrap
    重要

    当 Machine Config Operator (MCO) 更新每个机器配置池中的机器时,它会逐一重启每个节点。在外部 IPsec 连接可用前,您必须等待所有节点更新。

验证

  1. 输入以下命令检查机器配置池状态:

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

    成功更新的节点具有以下状态: UPDATED=trueUPDATING=falseDEGRADED=false

    注意

    默认情况下,MCO 会一次在一个池中更新一个机器,从而导致迁移总时间随着集群大小的增加而增加。

  2. 要确认 IPsec 机器配置已被成功推出,请输入以下命令:

    1. 确认创建 IPsec 机器配置:

      $ oc get mc | grep ipsec
      Copy to Clipboard Toggle word wrap

      输出示例

      80-ipsec-master-extensions        3.2.0        6d15h
      80-ipsec-worker-extensions        3.2.0        6d15h
      Copy to Clipboard Toggle word wrap

    2. 确认已将 IPsec 扩展应用到 control plane 节点:

      $ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
      Copy to Clipboard Toggle word wrap
    3. 确认计算节点的 IPsec 扩展的应用程序。示例输出将显示 2

      $ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
      Copy to Clipboard Toggle word wrap

6.6.9. 为外部 IPsec 端点禁用 IPsec 加密

作为集群管理员,您可以删除外部主机的现有 IPsec 隧道。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 以具有 cluster-admin 权限的用户身份登录集群。
  • 您在集群中的 FullExternal 模式中启用了 IPsec。

流程

  1. 使用以下 YAML 创建名为 remove-ipsec-tunnel.yaml 的文件:

    kind: NodeNetworkConfigurationPolicy
    apiVersion: nmstate.io/v1
    metadata:
      name: <name>
    spec:
      nodeSelector:
        kubernetes.io/hostname: <node_name>
      desiredState:
        interfaces:
        - name: <tunnel_name>
          type: ipsec
          state: absent
    Copy to Clipboard Toggle word wrap

    其中:

    name
    指定节点网络配置策略的名称。
    node_name
    指定您要删除的 IPsec 隧道的节点名称。
    tunnel_name
    指定现有 IPsec 隧道的接口名称。
  2. 要删除 IPsec 隧道,请输入以下命令:

    $ oc apply -f remove-ipsec-tunnel.yaml
    Copy to Clipboard Toggle word wrap

6.6.10. 禁用 IPsec 加密

作为集群管理员,您可以禁用 IPsec 加密。

先决条件

  • 安装 OpenShift CLI(oc)。
  • 使用具有 cluster-admin 权限的用户登陆到集群。

流程

  1. 要禁用 IPsec 加密,请输入以下命令:

    $ oc patch networks.operator.openshift.io cluster --type=merge \
    -p '{
      "spec":{
        "defaultNetwork":{
          "ovnKubernetesConfig":{
            "ipsecConfig":{
              "mode":"Disabled"
            }}}}}'
    Copy to Clipboard Toggle word wrap
  2. 可选:您可以将集群 MTU 的大小增加 46 个字节,因为 IP 数据包中不再有 IPsec ESP 标头的开销。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat