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 证书。
  • 您在集群中的 FullExternal 模式中启用了 IPsec。
  • OVN-Kubernetes 网络插件必须配置为本地网关模式,其中 ovnKubernetesConfig.gatewayConfig.routingViaHost=true

流程

  1. 使用 NMState Operator 节点网络配置策略创建 IPsec 配置。如需更多信息,请参阅 Libreswan 作为 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>" 
      1
      
        desiredState:
          interfaces:
          - name: <interface_name> 
      2
      
            type: ipsec
            libreswan:
              left: <cluster_node> 
      3
      
              leftid: '%fromcert'
              leftrsasigkey: '%cert'
              leftcert: left_server
              leftmodecfgclient: false
              right: <external_host> 
      4
      
              rightid: '%fromcert'
              rightrsasigkey: '%cert'
              rightsubnet: <external_address>/32 
      5
      
              ikev2: insist
              type: transport
      Copy to Clipboard Toggle word wrap

      1 1
      指定要将策略应用到的主机名。此主机充当 IPsec 配置中的左侧主机。
      2
      指定要在主机上创建的接口名称。
      3
      指定在集群端终止 IPsec 隧道的集群节点的主机名。名称应匹配您提供的 PKCS#12 证书中的 SAN [Subject Alternate Name]
      4
      指定外部主机名,如 host.example.com。名称应与您提供的 PKCS#12 证书中的 SAN [Subject Alternate Name] 匹配。
      5
      指定外部主机的 IP 地址,如 10.1.2.3/32

      NMState IPsec 隧道配置示例

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

      1
      指定要将策略应用到的主机名。此主机充当 IPsec 配置中的左侧主机。
      2
      指定要在主机上创建的接口名称。
      3
      指定在集群端终止 IPsec 隧道的集群节点的主机名。名称应匹配您提供的 PKCS#12 证书中的 SAN [Subject Alternate Name]
      4
      指定外部主机名,如 host.example.com。名称应与您提供的 PKCS#12 证书中的 SAN [Subject Alternate Name] 匹配。
      5
      指定外部主机的 IP 地址,如 10.1.2.3/32
    3. 要配置 IPsec 接口,请输入以下命令:

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

    • left_server.p12:IPsec 端点的证书捆绑包
    • ca.pem :您使用签名证书的证书颁发机构
  3. 创建机器配置以将证书添加到集群中:

    1. 要为 control plane 和 worker 节点创建 Butane 配置文件,请输入以下命令:

      注意

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

      $ for role in master worker; do
        cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF
        variant: openshift
        version: 4.17.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
    2. 要将您在上一步中创建的 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
  4. 要将机器配置应用到集群,请输入以下命令:

    $ 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 连接可用前,您必须等待所有节点更新。

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

    $ oc get mcp
    Copy to Clipboard Toggle word wrap

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

    注意

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

  6. 要确认 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. 确认 control plane 节点的 IPsec 扩展的应用程序。示例输出将显示 2

      $ 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
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat