Manila/IPv6
< Manila
使用 IPv6 的 Devstack 配方
为了测试 Manila IPv6 补丁,你需要能够让你的 devstack 正常工作 IPv6。以下是我所做的事情。
虚拟机设置
我为我的 devstack 虚拟机使用 2 个网络。“前端”网络连接到外部世界。“后端”网络完全隔离。我使用前端网络进行管理,并使用后端网络作为 devstack 的“公共”网络(即使这可能不是预期的设计)。
前端
<network>
<name>devstacknet_fe</name>
<forward mode='nat' />
<bridge name='devstacknet0' stp='on' delay='0'/>
<mac address='52:54:00:00:30:01'/>
<domain name='localdomain'/>
<ip address='192.168.30.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.30.2' end='192.168.30.20'/>
<host mac="52:54:00:00:30:01" name="master" ip="192.168.30.1" />
<host mac="52:54:00:00:30:02" name="cache" ip="192.168.30.2" />
<host mac="52:54:00:00:30:03" name="stage1" ip="192.168.30.3" />
<host mac="52:54:00:00:30:04" name="stage2" ip="192.168.30.4" />
<host mac="52:54:00:00:30:05" name="openstack1" ip="192.168.30.5" />
<host mac="52:54:00:00:30:06" name="openstack2" ip="192.168.30.6" />
</dhcp>
</ip>
<ip family='ipv6' address='fd30::1' prefix='64'>
<dhcp>
<range start='fd30::100' end='fd30::1ff'/>
<host id="00:03:00:01:52:54:00:00:30:01" name="master" ip="fd30::1" />
<host id="00:03:00:01:52:54:00:00:30:02" name="cache" ip="fd30::2" />
<host id="00:03:00:01:52:54:00:00:30:03" name="stage1" ip="fd30::3" />
<host id="00:03:00:01:52:54:00:00:30:04" name="stage2" ip="fd30::4" />
<host id="00:03:00:01:52:54:00:00:30:05" name="openstack1" ip="fd30::5" />
<host id="00:03:00:01:52:54:00:00:30:06" name="openstack2" ip="fd30::6" />
</dhcp>
</ip>
</network>
后端
<network ipv6='yes'> <name>devstacknet_be</name> <bridge name='devstacknet1' stp='on' delay='0'/> <mac address='52:54:00:00:31:01'/> </network>
我的虚拟机是一个 Ubuntu Xenial 虚拟机,具有 2 个网卡。
<domain type='kvm'>
<name>openstack1</name>
<memory unit='GiB'>4</memory>
<currentMemory unit='GiB'>4</currentMemory>
<vcpu>2</vcpu>
<cpu mode='host-passthrough'></cpu>
<os>
<type arch='x86_64'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc' />
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/vmdata/openstack1.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='network'>
<mac address='52:54:00:00:30:05'/>
<source network='devstacknet_fe'/>
<model type='virtio'/>
</interface>
<interface type='network'>
<source network='devstacknet_be'/>
<mac address='52:54:00:00:31:02'/>
<model type='virtio'/>
</interface>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
<model type='vmvga' vram='16384' heads='1'/>
</video>
<memballoon model='virtio' />
</devices>
</domain>
在虚拟机内部,我这样配置我的网络
$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
auto eth1
iface eth1 inet manual
up ip link set dev eth1 up
down ip link set dev eth1 down
我还强制 DUID 使用 DUID-LL 格式,而不是 DUID-LLT,以便我可以拥有可预测的 IPv6 地址。如果你愿意每次查找你获得的 IPv6 地址,则此步骤无关紧要。
$ head -n 1 /var/lib/dhcp/dhclient6.eth0.leases default-duid "\000\003\000\001RT\000\0000\005";
在虚拟机外部(在 hypervisor 上),我设置了一个路由,以确保 nova 虚拟机能够与 hypervisor 通信
sudo ip -6 route replace fd10::/15 via fd30::5 dev devstacknet0
Devstack 设置
克隆仓库
sudo mkdir /opt/stack sudo chown $USERNAME:$USERNAME /opt/stack cd /opt/stack git clone https://github.com/openstack-dev/devstack git clone https://github.com/openstack/manila git clone https://github.com/openstack/python-manilaclient
创建 local.conf
[[local|localrc]] # HOSP_IP comes from DHCP, it's predictable HOST_IP=192.168.30.5 ADMIN_PASSWORD=camacho DATABASE_PASSWORD=camacho RABBIT_PASSWORD=camacho SERVICE_PASSWORD=camacho SERVICE_TOKEN=camacho GUEST_PASSWORD=camacho MYSQL_HOST=127.0.0.1 MYSQL_USER=root MYSQL_PASSWORD=nova RABBIT_HOST=127.0.0.1 LOGDAYS=1 LOGFILE=$DEST/devstack.log SCREEN_LOGDIR=$DEST/logs/screen RECLONE=False LOG_COLOR=False LIBVIRT_TYPE=kvm IP_VERSION=4+6 DOWNLOAD_DEFAULT_IMAGES=False LIBS_FROM_GIT=python-manilaclient enable_plugin manila git://git.openstack.org/openstack/manila MANILA_MULTI_BACKEND=True MANILA_BACKEND1_CONFIG_GROUP_NAME=vienna MANILA_BACKEND2_CONFIG_GROUP_NAME=prague MANILA_SHARE_BACKEND1_NAME=Vienna MANILA_SHARE_BACKEND2_NAME=Prague # This image is the "client" image built from openstack/manila-test-image and # uploaded to a cache server. IMAGE_URLS=http://192.168.30.2/manila-test.img SHARE_DRIVER=manila.share.drivers.lvm.LVMShareDriver MANILA_OPTGROUP_vienna_driver_handles_share_servers=False MANILA_OPTGROUP_prague_driver_handles_share_servers=False MANILA_OPTGROUP_vienna_lvm_share_volume_group=lvm-shares1 MANILA_OPTGROUP_prague_lvm_share_volume_group=lvm-shares2 # This export IP comes from DHCPv6, it's predictable MANILA_LVM_SHARE_EXPORT_IP=fd30::5 ENABLED_SERVICES=key,mysql,rabbit,tempest,manila,m-api,m-sch,m-shr,m-dat,q-svc,q-dhcp,q-meta,q-agt,q-l3,neutron,n-api,n-cond,n-cpu,n-sch,g-api,g-reg Q_USE_PROVIDERNET_FOR_PUBLIC=True PUBLIC_INTERFACE=eth1 Q_USE_SECGROUP=False IPV4_ADDRS_SAFE_TO_USE=10.0.0.0/22 IPV6_RA_MODE=dhcpv6-stateful IPV6_ADDRESS_MODE=dhcpv6-stateful IPV6_ADDRS_SAFE_TO_USE=fd10::/16 FIXED_RANGE_V6=fd10::/64 IPV6_PUBLIC_RANGE=fd11::/64 IPV6_PUBLIC_NETWORK_GATEWAY=fd11::2
在堆叠之前,我显式创建我的 backing 文件
mkdir /opt/stack/data truncate -s 100g /opt/stack/data/lvm-shares1-backing-file truncate -s 100g /opt/stack/data/lvm-shares2-backing-file sudo vgcreate lvm-shares1 \$(sudo losetup -f --show /opt/stack/data/lvm-shares1-backing-file) sudo vgcreate lvm-shares2 \$(sudo losetup -f --show /opt/stack/data/lvm-shares2-backing-file)
现在我运行 stack.sh 并去喝咖啡。
测试
堆叠之后,我运行这些命令
source /opt/stack/devstack/openrc demo demo > /dev/null
openstack network create demo-net
POOL6=$(openstack subnet pool list | grep fd10::/16 | awk '{print $2}')
openstack subnet create --ip-version 6 demo-v6-subnet --network demo-net --subnet-pool $POOL6 --ipv6-ra-mode dhcpv6-stateful --ipv6-address-mode dhcpv6-stateful
POOL4=$(openstack subnet pool list | grep 10.0.0.0/22 | awk '{print $2}')
openstack subnet create --ip-version 4 demo-v4-subnet --network demo-net --subnet-pool $POOL4
openstack router add subnet router1 demo-v6-subnet
openstack router add subnet router1 demo-v4-subnet
openstack keypair create --public-key ~/.ssh/id_rsa.pub demo-key
nova boot --flavor cirros256 --image manila-test --nic net-name=demo-net --key-name demo-key --config-drive true demo-vm
一旦 nova 虚拟机启动,我使用“nova list”获取它的 IPv6 地址,并且我可以从 devstack 虚拟机或 hypervisor SSH 到它,并且 nova 虚拟机能够 ping devstack 虚拟机和 hypervisor,并通过 IPv6 执行挂载等操作。