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 证书。
-
您在集群中的
Full或External模式中启用了 IPsec。 -
您必须在 OVN-Kubernetes 网络插件的
ovnKubernetesConfig.gatewayConfig规格中将routingViaHost参数设置为true。
流程
使用 NMState Operator 节点网络配置策略创建 IPsec 配置。如需更多信息,请参阅使用 nmstatectl 配置基于 IPsec 的 VPN 连接。
要识别 IPsec 端点的集群节点的 IP 地址,请输入以下命令:
$ oc get nodes创建名为
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其中:
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
要配置 IPsec 接口,请输入以下命令:
$ oc create -f ipsec-config.yaml
授予以下证书文件添加到每个主机上的网络安全服务(NSS)数据库中。这些文件在下一步中作为 Butane 配置的一部分导入。
-
left_server.p12:IPsec 端点的证书捆绑包 -
ca.pem:您使用签名证书的证书颁发机构
-
- 创建机器配置以将证书添加到集群中。
从挂载的 secret 文件中读取密码:
$ password=$(cat run/secrets/<left_server_password>)-
left_server_password:: 包含密码的文件名称。此文件存在于挂载的 secret 中。
-
使用
pk12util工具,它预先打包了 Red Hat Enterprise Linux (RHEL),输入以下命令指定保护PKCSedServiceSet 文件的密码。确保将 <password> 值替换为您的密码。$ pk12util -W "<password>" -i /etc/pki/certs/left_server.p12 -d /var/lib/ipsec/nss/要为 control plane 和计算节点创建 Butane 配置文件,请输入以下命令:
注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0结尾。例如:4.18.0。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。$ for role in master worker; do cat >> "99-ipsec-${role}-endpoint-config.bu" <<-EOF variant: openshift version: 4.18.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要将上一步中创建的 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 oc apply -f 99-ipsec-${role}-endpoint-config.yaml done重要当 Machine Config Operator (MCO) 更新每个机器配置池中的机器时,它会逐一重启每个节点。在外部 IPsec 连接可用前,您必须等待所有节点更新。
验证
输入以下命令检查机器配置池状态:
$ oc get mcp成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。注意默认情况下,MCO 会一次在一个池中更新一个机器,从而导致迁移总时间随着集群大小的增加而增加。
要确认 IPsec 机器配置已被成功推出,请输入以下命令:
确认创建 IPsec 机器配置:
$ oc get mc | grep ipsec输出示例
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h确认已将 IPsec 扩展应用到 control plane 节点:
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c确认计算节点的 IPsec 扩展的应用程序。示例输出将显示
2。$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c