GroupBasedPolicy/InstallODLIntegrationDevstack
目录
安装和运行 GBP
以下是一系列安装和使用 GBP/ODL 集成的说明
虚拟机设置
- 在 virtualbox 或 vmware fusion 中设置 Ubuntu 14.04 虚拟机,可以使用一个虚拟机或两个虚拟机。 在示例中,为 devstack 设置一个虚拟机(2 核,4G 内存),为 opendaylight 控制器设置第二个虚拟机(2 核,6G 内存)。
- 运行 OVS 2.1 或更高版本!(我们推荐 2.3)。
OpenDaylight 设置
1. sudo apt-get install git-core maven openjdk-7-jre openjdk-7-jdk
1.1 手动将 maven 从 3.0.5 升级到 3.1.1
cd ~/Downloads wget http://apache.mirrors.timporter.net/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz sudo mkdir -p /usr/local/apache-maven sudo mv apache-maven-3.1.1-bin.tar.gz /usr/local/apache-maven cd /usr/local/apache-maven sudo tar -xzvf apache-maven-3.1.1-bin.tar.gz sudo rm /usr/bin/mvn sudo ln -s /usr/local/apache-maven/apache-maven-3.1.1/bin/mvn /usr/bin/mvn cd
2. git clone https://github.com/opendaylight/groupbasedpolicy.git
3. cd groupbasedpolicy
4. mvn clean install
5. cd distribution-karaf/target/assembly/bin/
6. ./karaf
7. 在 karaf 内部,运行以下命令
feature:install odl-restconf odl-groupbasedpolicy-base odl-groupbasedpolicy-ofoverlay
一体化 Devstack 安装
1. 从 github 获取 devstack
git clone https://github.com/group-policy/devstack.git -b stable/juno-gbp-odl cd devstack cp local.conf.controller local.conf
2. 修改 local.conf 文件末尾的 'odl_host',使其为
- ODL_MGR_IP = <odl-controller-ip>
- HOST_IP = <openstack 控制器 ip>
- odl_host = <odl-controller-ip>
3. ./stack.sh
注册 OFOverlay
从您的 POSTMAN 应用程序,设置以下 RESTful 调用:PUT http://<controller_IP>:8181/restconf/config/opendaylight-inventory:nodes
{
"opendaylight-inventory:nodes": {
"node": [
{
"id": "openflow:XXXX",
"ofoverlay:tunnel-ip": "<ovs IP address>"
}
]
}
}
其中 XXXX 是从 <sudo ovs-ofctl show br-int -OOpenFlow13> 转换的 DPID,从十六进制转换为长整型
GBP 实际操作
使用 "gbp" CLI 二进制文件("gbp --help" 将为您提供命令)
示例场景:使用 GBP 建模 Web Tier 和 App Tier 之间的连接
# Authenticate with admin user, demo project. This is for availabilty-zone source openrc admin demo
# Create allow action that can used in several rules gbp policy-action-create allow --action-type allow
# Create ICMP rule gbp policy-classifier-create icmp-traffic --protocol icmp --direction bi gbp policy-rule-create ping-policy-rule --classifier icmp-traffic --actions allow
# Create HTTP Rule gbp policy-classifier-create web-traffic --protocol tcp --port-range 80 --direction in gbp policy-rule-create web-policy-rule --classifier web-traffic --actions allow
# ICMP policy-rule-set gbp policy-rule-set-create icmp-policy-rule-set --policy-rules ping-policy-rule
# WEB policy-rule-set gbp policy-rule-set-create web-policy-rule-set --policy-rules web-policy-rule
# Policy Target Group creation and policy-rule-set association gbp group-create web --provided-policy-rule-sets "icmp-policy-rule-set=true,web-policy-rule-set=true" gbp group-create client-1 --consumed-policy-rule-sets "icmp-policy-rule-set=true,web-policy-rule-set=true"
# Policy Target ceation and launching VMs
WEB1=$(gbp policy-target-create web-ep-1 --policy-target-group web | awk "/port_id/ {print \$4}")
CLIENT1=$(gbp policy-target-create client-ep-1 --policy-target-group client-1 | awk "/port_id/ {print \$4}")
nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$WEB1 web-vm-1 nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT1 client-vm-1
#Check your availability zone using <nova service-list>
#For multi-node setup, this will launch extra VMs on compute node
WEB2=$(gbp policy-target-create web-ep-2 --policy-target-group web | awk "/port_id/ {print \$4}")
CLIENT2=$(gbp policy-target-create client-ep-2 --policy-target-group client-1 | awk "/port_id/ {print \$4}")
nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$WEB2 web-vm-2 --availability-zone=nova:osgbp2
nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT2 client-vm-2 --availability-zone=nova:osgbp2
####CHECKPOINT: ICMP and HTTP work from app to web and vice versa
取消堆叠和重新堆叠
停止 OpenDaylight 控制器并删除任何持久数据
logout rm -rf ../data
修改 local.conf 取消注释 "OFFLINE=True",开始取消堆叠和重新堆叠
./unstack.sh --all rm -rf /opt/stack/horizon/openstack_dashboard/enabled/*gbp*.py sudo service rabbitmq-server restart sudo service mysql restart
启动 OpenDaylight 控制器
./karaf feature:install odl-groupbasedpolicy-openstackgbp odl-restconf
启动 Devstack
./stack.sh
多节点 Devstack 安装
- 启动 ODL 控制器 OpenDaylight 设置
- 启动 Openstack 控制器节点:遵循 一体化 Devstack 安装。
- 创建计算节点 VM 虚拟机设置。 注意:此 VM 大小可以更小,CPU 2 核,内存 2GB 即可。
- 按照此链接设置计算节点 设置计算节点
- 在控制器节点上,注册 OFOverlay OFOverlay
- 在控制器节点上,运行 GBP 实际操作脚本 GBP 实际操作
设置计算节点
1. 从 github 获取 devstack
git clone https://github.com/group-policy/devstack.git -b stable/juno-gbp-odl cd devstack cp local.conf.compute local.conf
2. 修改 local.conf 文件中的 IP 地址,使其为
- ODL_MGR_IP = <odl-controller-ip>
- HOST_IP = <openstack 计算 ip>
- SERVICE_HOST = <openstack 控制器 ip>
- odl_host = <odl-controller-ip>
3. ./stack.sh
使用 devstack 启用实时虚拟机迁移
该过程与多节点设置类似
- 启动 ODL 控制器 OpenDaylight 设置
- 使用 ODL 控制器作为 NFS 服务器。 NFS 服务器将由 devstack 控制器和计算用作 VM 实例数据共享存储。 NFS 服务器设置
- 启动 Openstack 控制器节点:参考 一体化 Devstack 安装。 在启动 ./stack.sh 之前,需要确保主机配置 主机配置,NFS 共享已挂载 NFS 客户端配置 并确保 libvirt 已正确配置 Libvirt 配置
- 创建计算节点 VM 虚拟机设置。 注意:此 VM 大小可以更小,CPU 2 核,内存 2GB 即可。
- 按照此链接设置计算节点 设置计算节点。 在启动 ./stack.sh 之前,需要确保主机配置 主机配置,确保 NFS 共享已挂载 NFS 客户端配置 并确保 libvirt 已正确配置 Libvirt 配置
- 在控制器节点上,注册 OFOverlay OFOverlay
- 在控制器节点上,运行 GBP 实际操作脚本 GBP 实际操作
- 启动 VM 后,启动 VM 迁移
# check which compute node the instance is running
nova-manage vm list | awk '{print $1,$2,$4,$5}' | column -t
# Run nova live-migration command to move the VM to another compute node:
nova live-migration web-vm-1 <replace with the destination compute node>
# check the VM state nova list
# validate which compute node the instance is running
nova-manage vm list | awk '{print $1,$2,$4,$5}' | column -t
NFS 服务器设置
- 安装 NFS 服务器软件包
sudo adduser stack
sudo apt-get install nfs-kernel-server
sudo mkdir -p /srv/demo-stack/instances
sudo chmod o+x /srv/demo-stack/instances
sudo chown stack:stack /srv/demo-stack/instances
- 在 /etc/exports 中添加以下条目
/srv/demo-stack/instances 192.168.0.0/16(rw,fsid=0,insecure,no_subtree_check,async,no_root_squash)
- 启动 NFS 服务器守护程序
sudo exportfs -ra
sudo service nfs-kernel-server restart
主机配置
- 编辑您的 DNS 或 /etc/hosts,以确保 devstack 控制器节点和计算节点可以相互执行名称解析。
$ ping HostA
$ ping HostB
NFS 客户端配置
- 安装 NFS 客户端软件包
sudo apt-get install rpcbind nfs-common
- 创建实例数据文件夹并挂载 NFS 文件共享
sudo mkdir /opt/stack
sudo chown stack:stack /opt/stack
mkdir -p /opt/stack/data/instances
sudo mount <your NFS server ip address>:/srv/demo-stack/instances /opt/stack/data/instances
Libvirt 配置
- 修改 /etc/libvirt/libvirtd.conf 文件以包含以下内容
listen_tls = 0
listen_tcp = 1
auth_tcp = “none”
- 修改 /etc/default/libvirt-bin 文件
libvirtd_opts = “ -d -l”
- 重启 libvirt
sudo service libvirt-bin restart