启用 Neutron VPN 服务¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/openstack-chef/+spec/neutron-vpnaas-enablement
问题描述¶
VPN 服务是 Neutron 提供的一个关键特性,用于启用到 OpenStack 云的安全私有连接。目前 Neutron 中的参考 VPN 实现是 [IPSec] VPN,IPSec 驱动程序是 [OPENSWAN]。
目前,没有 Chef cookbook 支持来配置和启动 Neutron VPN 服务。
提议的变更¶
为 cookbook-openstack-network 添加一个 recipe,以及相关的属性/单元测试,以安装、配置和启动 VPN 服务。
需要安装的软件包是
Ubuntu: neutron-plugin-vpn-agent
RedHat: openstack-neutron
Suse: openstack-neutron-vpn-agent
需要添加的属性包括
一个新的属性,用于决定是否启动 VPN agent 或 L3 agent
['openstack']['network']['enable_vpn']
新的属性,用于在 /etc/neutron/vpn_agent.ini 中的 VPN 配置
['openstack']['network']['vpn']['vpn_device_driver'] ['openstack']['network']['vpn']['ipsec_status_check_interval']
该 recipe 将检查是否应该安装、配置和启动 VPN 服务,然后使用属性值来配置 VPN agent 配置文件并启动 VPN 服务。
备选方案¶
目前没有替代方案。
数据模型影响¶
没有数据模型影响
REST API 影响¶
没有 API 变更
安全影响¶
目前,为了简单起见,Neutron VPNaaS 中仅实现了使用“PSK”(预共享密钥)身份验证模式的 IKE。psk 是 IPsec 站点连接建立过程的输入。
例如,可以在新的 IPsec 站点连接中使用“secret” psk
neutron ipsec-site-connection-create --name vpnconnection1 --vpnservice-id myvpn
--ikepolicy-id ikepolicy1 --ipsecpolicy-id ipsecpolicy1 --peer-address 172.24.4.233
--peer-id 172.24.4.233 --peer-cidr 10.2.0.0/24 --psk secret
由于身份验证和密钥交换不在启动和配置 VPN 服务的范围内,因此此 Spec 不会对安全性产生影响。
通知影响¶
没有通知影响
其他最终用户影响¶
性能影响¶
其他部署者影响¶
开发者影响¶
实现¶
负责人¶
- 主要负责人
工作项¶
添加一个新的属性值,用于决定是否启动 VPN agent 或 L3 agent,因为这两个服务不能同时启动。
为 /etc/neutron/vpn_agent.ini 中的 VPN 配置添加新的属性,并添加一个新的 vpn 模板。
添加一个新的 recipe 来安装 VPN 软件包,配置 [VPN_TEMPLATE] 并启动 VPN 服务
在 Horizon 中启用 VPN 支持 [VPN_HORIZON] 配置 /opt/stack/horizon/openstack_dashboard/local/local_settings.py
OPENSTACK_NEUTRON_NETWORK = { 'enable_vpn': True, }
添加验证,以确保 VPN 服务正常启动和运行。
添加单元测试
关于此主题的 openstack 提问参考 [HOW_TO_SETUP_VPN]
依赖项¶
测试¶
为新的 recipe 添加单元测试。
对于功能测试和 CI 集成测试,建议至少有一个具有三个 NIC 的节点。一个 NIC 用于外部网络连接,一个 NIC 用于数据网络,另一个用于管理网络。
文档影响¶
配置属性 [‘openstack’][‘network’][‘enable_vpn’] = ‘True’ 以启用 VPN 服务。
配置 VPN 相关属性,例如
['openstack']['network']['vpn']['vpn_device_driver'] = neutron.services.vpn.device_drivers.ipsec.OpenSwanDriver ['openstack']['network']['vpn']['ipsec_status_check_interval'] = 60