23.9. 配置 IPsec 加密


启用 IPsec 后,OVN-Kubernetes 集群网络上的节点之间所有 pod 到 pod 网络流量都使用 IPsec 传输模式加密。

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

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

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

以下文档描述了如何在集群安装后启用和禁用 IPSec。

23.9.1. 先决条件

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

23.9.2. 使用 IPsec 加密的网络流量类型

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

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

以下流量流没有加密:

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

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

IPsec 加密和未加密流量流

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

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

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

UDP

500

IPsec IKE 数据包

4500

IPsec NAT-T 数据包

ESP

N/A

IPsec Encapsulating Security Payload(ESP)

23.9.3. 加密协议和 IPsec 模式

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

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

23.9.4. 安全证书生成和轮转

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

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

23.9.5. 启用 IPsec 加密

作为集群管理员,您可以在集群安装后启用 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 control plane pod 的名称,请输入以下命令:

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

    输出示例

    NAME                   READY   STATUS    RESTARTS   AGE
    ovnkube-master-fvtnh   6/6     Running   0          122m
    ovnkube-master-hsgmm   6/6     Running   0          122m
    ovnkube-master-qcmdc   6/6     Running   0          122m

  2. 输入以下命令验证集群中是否启用了 IPsec。命令输出必须 state true 来指示节点启用了 IPsec。

    $ oc -n openshift-ovn-kubernetes rsh ovnkube-master-<pod_number_sequence> \ 1
      ovn-nbctl --no-leader-only get nb_global . ipsec
    1
    将 < pod_number_sequence > 替换为上一步中的数据平面 pod 的随机序列( fvtnh )。

23.9.6. 禁用 IPsec 加密

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

重要

禁用 IPsec 后,您必须删除关联的 IPsec daemonsets pod。如果没有删除这些 pod,您可能会遇到集群中的问题。

先决条件

  • 安装 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. 要查找集群中 master 节点上存在的 OVN-Kubernetes data plane pod 的名称,请输入以下命令:

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

    输出示例

    ovnkube-master-5xqbf                      8/8     Running   0              28m
    ...

  3. 输入以下命令验证集群中的 master 节点是否已禁用 IPsec。命令输出必须处于 false 状态,以指示节点禁用了 IPsec。

    $ oc -n openshift-ovn-kubernetes -c nbdb rsh ovnkube-master-<pod_number_sequence> \1
      ovn-nbctl --no-leader-only get nb_global . ipsec
    1
    将 < pod_number_sequence > 替换为上一步中的数据平面 pod 的随机字符序列,如 5xqbf
  4. 要从节点上的 openshift-ovn-kubernetes 命名空间中删除 IPsec ovn-ipsec daemonset pod,请输入以下命令:

    $ oc delete daemonset ovn-ipsec -n openshift-ovn-kubernetes 1
    1
    ovn-ipsec daemonset 为节点上的 east-west 流量配置 IPsec 连接。
  5. 输入以下命令验证 ovn-ipsec daemonset pod 是否已从集群中的所有节点中删除。如果命令输出没有列出 pod,则移除操作会成功。

    $ oc get pods -n openshift-ovn-kubernetes -l=app=ovn-ipsec
    注意

    您可能需要重新运行 命令来删除 pod,因为有时初始命令尝试不会删除该 pod。

  6. 可选:您可以将集群 MTU 的大小增加 46 个字节,因为 IP 数据包中不再有 IPsec ESP 标头的开销。

23.9.7. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.