24.11. 配置 IPsec 加密


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

默认禁用 IPsec。它可以在安装集群期间或之后启用。有关集群安装的详情,请参阅 OpenShift Container Platform 安装概述。如果您需要在集群安装后启用 IPsec,您必须首先将集群 MTU 大小调整为考虑 IPsec ESP IP 标头的开销。

注意

IBM Cloud® 上的 IPsec 仅支持 NAT-T。不支持使用 ESP。

OpenShift Container Platform 集群中 IPsec 存在以下支持限制:

  • 在升级到 OpenShift Container Platform 4.15 前,您必须禁用 IPsec。禁用 IPsec 后,还必须删除关联的 IPsec daemonset。如果您在没有禁用 IPsec 的情况下更新,存在一个已知问题可能会导致 pod 到 pod 的通信中断。(OCPBUGS-43323)

使用以下文档中的流程来:

  • 在集群安装后启用和禁用 IPSec
  • 配置集群外的外部 IPsec 端点支持
  • 验证 IPsec 是否加密不同节点上的 pod 之间的流量

24.11.1. 先决条件

  • 您已将集群 MTU 的大小减少为 46 字节,以便增加 IPsec ESP 标头的开销。有关重新定义集群使用的 MTU 大小的更多信息,请参阅为集群网络更改 MTU

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

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

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

UDP

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

24.11.3. pod 到 pod 流量的 IPsec 加密

OpenShift Container Platform 支持对 pod 间的网络流量的 IPsec 加密。

24.11.3.1. 由 pod 到 pod IPsec 加密的网络流量类型

启用 IPsec 后,只有 pod 间的以下网络流量会被加密:

  • 集群网络的不同节点上的 pod 间的流量
  • 从主机网络上的 pod 流量到集群网络上的 pod

以下流量流没有加密:

  • 集群网络上同一节点上的 pod 间的流量
  • 主机网络上的 pod 间的流量
  • 从集群网络上的 pod 流量到主机网络上的 pod

下图中显示了加密和未加密的流程:

IPsec 加密和未加密流量流

24.11.3.2. 加密协议和 IPsec 模式

使用的加密机制是 AES-GCM-16-256。完整性检查值(ICV)为 16 字节。密钥长度为 256 位。

使用的 IPsec 模式是 传输模式,这是通过向原始数据包的 IP 标头添加封装安全 Payload (ESP) 标头来加密端到端通信的模式。OpenShift Container Platform 目前不支持 pod 到 pod 通信的 IPsec Tunnel 模式

24.11.3.3. 安全证书生成和轮转

Cluster Network Operator(CNO)生成自签名 X.509 证书颁发机构(CA),该颁发机构(CA)用于加密。来自每个节点的证书签名请求(CSR)由 CNO 自动实现。

CA 的有效期为 10 年。独立节点证书的有效期为 5 年,并在 4 年半后自动轮转。

24.11.3.4. 启用 pod 到 pod IPsec 加密

作为集群管理员,您可以在集群安装后启用 pod 到 pod IPsec 加密。

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 以具有 cluster-admin 权限的用户身份登录集群。
  • 您已将集群 MTU 的大小减少为 46 字节,以允许 IPsec ESP 标头的开销。

流程

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

    $ oc patch networks.operator.openshift.io cluster --type=merge \
    -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"ipsecConfig":{ }}}}}'

验证

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

    $ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node

    输出示例

    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

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

    $ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec

    其中:

    <XXXXX>
    指定上一步中 pod 的随机字符序列。

    输出示例

    true

24.11.3.5. 禁用 IPsec 加密

作为集群管理员,只有在集群安装后启用了 IPsec 时,才能禁用 IPsec 加密。

先决条件

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

流程

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

    $ oc patch networks.operator.openshift.io/cluster --type=json \
      -p='[{"op":"remove", "path":"/spec/defaultNetwork/ovnKubernetesConfig/ipsecConfig"}]'
  2. 可选:您可以将集群 MTU 的大小增加 46 个字节,因为 IP 数据包中不再有 IPsec ESP 标头的开销。

24.11.4. 外部流量的 IPsec 加密

OpenShift Container Platform 支持到外部主机流量的 IPsec 加密。

您必须提供自定义 IPsec 配置,其中包括 IPsec 配置文件本身和 TLS 证书。

确保观察到以下限制:

  • 自定义 IPsec 配置不得包含可能会影响集群的 pod 到 pod IPsec 配置的任何连接规格。
  • 提供的证书捆绑包中的证书通用名称(CN)不能以 ovs_ 前缀开头,因为这个命名可以与每个节点的网络安全服务(NSS)数据库中的 pod 到 pod 的 IPsec CN 名称冲突。
重要

对外部端点的 IPsec 支持只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

24.11.4.1. 为外部 IPsec 端点启用 IPsec 加密

作为集群管理员,您可以在集群和外部 IPsec 端点之间启用 IPsec 加密。因为这个流程使用 Butane 创建机器配置,所以必须安装 butane 命令。

注意

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

先决条件

  • 安装 OpenShift CLI (oc) 。
  • 以具有 cluster-admin 权限的用户身份登录集群。
  • 您已将集群 MTU 的大小减少为 46 字节,以允许 IPsec ESP 标头的开销。
  • 您已安装了 with ane 实用程序。
  • 您有一个 IPsec 端点的现存的 PKCS#12 证书,以及一个 PEM 格式的 CA 证书。

流程

作为集群管理员,您可以为外部 IPsec 端点启用 IPsec 支持。

  1. 创建名为 ipsec-endpoint-config.conf 的 IPsec 配置文件。配置在下一步中被消耗。如需更多信息,请参阅 Libreswan 作为 IPsec VPN 实现
  2. 提供以下证书文件以添加到每个主机上的网络安全服务(NSS)数据库中。这些文件在后续步骤中作为 Butane 配置的一部分导入。

    • left_server.p12:IPsec 端点的证书捆绑包
    • ca.pem :您使用签名证书的证书颁发机构
  3. 使用以下两个步骤,创建机器配置以将 IPsec 配置应用到集群:

    1. 要添加 IPsec 配置,请为 control plane 和 worker 节点创建 Butane 配置文件,其内容如下:

      $ for role in master worker; do
        cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF
        variant: openshift
        version: 4.14.0
        metadata:
          name: 99-${role}-import-certs-enable-svc-os-ext
          labels:
            machineconfiguration.openshift.io/role: $role
        openshift:
          extensions:
            - ipsec
        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
          - name: ipsecenabler.service
            enabled: true
            contents: |
              [Service]
              Type=oneshot
              ExecStart=systemctl enable --now ipsec.service
      
              [Install]
              WantedBy=multi-user.target
        storage:
          files:
          - path: /etc/ipsec.d/ipsec-endpoint-config.conf
            mode: 0400
            overwrite: true
            contents:
              local: ipsec-endpoint-config.conf
          - 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
    2. 要将上一步中创建的 Butane 文件转换为机器配置,请输入以下命令:

      $ for role in master worker; do
        butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml
      done
  4. 要将机器配置应用到集群,请输入以下命令:

    $ for role in master worker; do
      oc apply -f 99-ipsec-${role}-endpoint-config.yaml
    done
    重要

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

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

    $ oc get mcp

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

    注意

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

24.11.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.