Kube-OVN Overlay 网络支持 IPsec 加密
本文档提供了在 Kube-OVN Overlay 网络中启用和禁用 IPsec 加密隧道流量的详细指南。由于 OVN 隧道流量通过物理路由器和交换机传输,这些设备可能位于不受信任的公共网络中或面临攻击风险,因此启用 IPsec 加密可以有效防止流量数据被监控或篡改。
术语
术语 | 解释 |
---|
IPsec | 一种用于保护和验证通过互联网传输的数据的协议和技术。它在 IP 层提供安全通信,主要用于创建虚拟私人网络(VPN)以及保护 IP 数据包的传输。IPsec 主要通过以下方法确保数据安全: - 数据加密:通过加密技术,IPsec 可以确保数据在传输过程中不被窃取或篡改。常见的加密算法包括 AES、3DES 等。
- 数据完整性检查:IPsec 使用哈希函数(例如 SHA-1、SHA-256)验证数据的完整性,确保数据在传输过程中未被修改。
- 身份验证:IPsec 可以使用多种方法(例如预共享密钥、数字证书)验证通信双方的身份,以防止未经授权的访问。
- 密钥管理:IPsec 使用互联网密钥交换(IKE)协议进行加密密钥的协商与管理。
|
注意事项
先决条件
请执行以下命令检查当前操作系统内核是否支持 IPsec 相关模块。如果输出显示所有与 XFRM 相关的模块为 y
或 m
,则表示支持 IPsec。
cat /boot/config-$(uname -r) | grep CONFIG_XFRM
输出:
CONFIG_XFRM_ALGO=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_IPCOMP=m
步骤
注意:除非另有说明,以下命令必须在集群主节点的 CLI 工具中执行。
启用 IPsec
-
修改 kube-ovn-controller 的配置文件。
-
执行以下命令编辑 kube-ovn-controller 的 YAML 配置文件。
kubectl edit deploy kube-ovn-controller -n kube-system
-
按照以下说明修改指定字段。
spec:
template:
spec:
containers:
- args:
- --enable-ovn-ipsec=true # 添加此字段
securityContext:
runAsUser: 0 # 将值更改为 0
字段说明:
- spec.template.spec.containers[0].args:在此字段下添加
- --enable-ovn-ipsec=true
。
- spec.template.spec.containers[0].securityContext.runAsUser:将此字段的值更改为 0。
-
保存更改。
-
修改 kube-ovn-cni 的配置文件。
-
执行以下命令编辑 kube-ovn-cni 的 YAML 配置文件。
kubectl edit ds kube-ovn-cni -n kube-system
-
按照以下说明修改指定字段。
spec:
template:
spec:
containers:
- args:
- --enable-ovn-ipsec=true # 添加此字段
volumeMounts: # 添加挂载路径,将名为 ovs-ipsec-keys 的卷挂载到容器
- mountPath: /etc/ovs_ipsec_keys
name: ovs-ipsec-keys
volumes: # 添加类型为 hostPath 的名为 ovs-ipsec-keys 的卷
- name: ovs-ipsec-keys
hostPath:
path: /etc/origin/ovs_ipsec_keys
字段说明:
- spec.template.spec.containers[0].args:在此字段下添加
- --enable-ovn-ipsec=true
。
- spec.template.spec.containers[0].volumeMounts:添加挂载路径,并将名为 ovs-ipsec-keys 的卷挂载到容器。
- spec.template.spec.volumes:在此字段下添加类型为 hostPath 的名为 ovs-ipsec-keys 的卷。
-
保存更改。
-
验证功能是否成功启用。
-
执行以下命令进入 kube-ovn-cni Pod。
kubectl exec -it -n kube-system $(kubectl get pods -n kube-system -l app=kube-ovn-cni -o=jsonpath='{.items[0].metadata.name}') -- /bin/bash
-
执行以下命令检查安全关联连接的数量。如果有(节点数量 - 1)个连接处于活动状态,表示启用成功。
ipsec status | grep "Security"
输出:
Security Associations (2 up, 0 connecting): # 由于该集群中有 3 个节点,可以看到连接数量为 2 个活跃
禁用 IPsec
-
修改 kube-ovn-controller 的配置文件。
-
执行以下命令编辑 kube-ovn-controller 的 YAML 配置文件。
kubectl edit deploy kube-ovn-controller -n kube-system
-
按照以下说明修改指定字段。
spec:
template:
spec:
containers:
- args:
- --enable-ovn-ipsec=false # 更改为 false
securityContext:
runAsUser: 65534 # 将值更改为 65534
字段说明:
- spec.template.spec.containers[0].args:将此字段
enable-ovn-ipsec
的值更改为 false。
- spec.template.spec.containers[0].securityContext.runAsUser:将此字段的值更改为 65534。
-
保存更改。
-
修改 kube-ovn-cni 的配置文件。
-
执行以下命令编辑 kube-ovn-cni 的 YAML 配置文件。
kubectl edit ds kube-ovn-cni -n kube-system
-
按照以下说明修改指定字段。
-
修改前的配置
spec:
template:
spec:
containers:
- args:
- --enable-ovn-ipsec=true # 更改为 false
volumeMounts: # 移除名为 ovs-ipsec-keys 的挂载路径
- mountPath: /etc/ovs_ipsec_keys
name: ovs-ipsec-keys
volumes: # 移除名为 ovs-ipsec-keys 的卷,类型为 hostPath
- name: ovs-ipsec-keys
hostPath:
path: /etc/origin/ovs_ipsec_keys
字段说明:
- spec.template.spec.containers[0].args:将此字段
enable-ovn-ipsec
的值更改为 false。
- spec.template.spec.containers[0].volumeMounts:移除此字段下名为 ovs-ipsec-keys 的挂载路径。
- spec.template.spec.volumes:移除此字段下名为 ovs-ipsec-keys 的卷,类型为 hostPath。
-
修改后的配置
spec:
template:
spec:
containers:
- args:
- --enable-ovn-ipsec=false
volumeMounts:
volumes:
-
保存更改。
-
验证功能是否成功禁用。
-
执行以下命令进入 kube-ovn-cni Pod。
kubectl exec -it -n kube-system $(kubectl get pods -n kube-system -l app=kube-ovn-cni -o=jsonpath='{.items[0].metadata.name}') -- /bin/bash
-
执行以下命令检查连接状态。如果没有输出,表示禁用成功。