Openstack 之 使用flat网络

blob.png blob.png

 上面左边是个人我的微信,如需进一步沟通,请加微信。  右边是个人公众号“Openstack私有云”,若有兴趣,请关注。web


  原来写过一遍文章“Openstack 之 kolla 新增flat网络”是在部署完成以后在物理机上新增网卡并做为flat网络使用的状况下的解决方法,昨天给一个朋友远程支持了一下另一个需求,在只有2块网卡的状况下,第1块做为内部网路vxlan使用,第2块直接做为flat网络而非external flat网络,直接桥接到外部网络使虚拟机可以直接链接flat网络到外部网络,而不是像默认安装后经过openstack的内部路由分配floating ip映射外网地址。
安全

    对于这个需求我可能须要多啰嗦几句,openstack最初是为公有云设计的,对于外网IP资源在它看来是稀有的,所以,“外部网络”使用floating ip提供外网资源。可是咱们实际使用过程当中,咱们所说的“外部网络”只是相对于openstack私有云自己网络来讲的,并非公有云里面的外部网络概念,并且通常都是须要虚拟机可以直接链接到这个“外部网络”,同时,另外一个需求是可以分配静态IP地址。bash

    openstack通常部署完成以后运行的init-runonce 初始化脚本新建2个网络,一个网络是vxlan网络,一个是网络是external flat网络,微信

vxlan网络和子网,对应的命令是:网络

openstack network create --provider-network-type vxlan demo-net
openstack subnet create --subnet-range 10.0.0.0/24 --network demo-net \
    --gateway 10.0.0.1 --dns-nameserver 8.8.8.8 demo-subnet

external flat网络和子网,注意这个--external属性,对应的命令是:
ssh

openstack network create --external --provider-physical-network physnet1 \
    --provider-network-type flat public1
openstack subnet create --no-dhcp \
    --allocation-pool ${EXT_NET_RANGE} --network public1 \
    --subnet-range ${EXT_NET_CIDR} --gateway ${EXT_NET_GATEWAY} public1-subnet

另外就是建立路由:curl

openstack router create demo-router
openstack router add subnet demo-router demo-subnet
openstack router set --external-gateway public1 demo-router

而且设置了上面建立的vxlan网络须要经过这个路由到达external flat网络。tcp

最终的结果就是,运行这个init-runonce初始化脚本以后,你的虚拟机只能配置内部的vxlan网络地址,好比10.0.0.10,而且须要在openstack内部路由上生成floating ip 绑定到虚拟机上才能被外部网络访问以及访问外部网络。ide

    若是须要使虚拟机直接链接第二块网卡的flat网络和外部网络互通,要怎么操做呢?我昨天采用了本身手工建立网络的方式,等会儿记录一下,其实过后我才发现还有更加简单的办法,那就是,执行完init-runonce以后,进web管理界面,直接将脚本建立的public1这个外部网络的external属性取消掉就能够了!使用手工建立的方式能更好的帮助理解这个过程,下面记录一下不执行init-runonce脚本,而是使用手工建立的方式的过程:
post

    一、kolla部署完成后,执行 kolla-ansible post-deploy 生成 /etc/kolla/admin-openrc.sh 环境变量文件,并执行生效

    kolla-ansible post-deploy
    source /etc/kolla/admin-openrc.sh

    二、经过web管理界面建立vxlan网络及子网,或者经过下面的命令建立(实际过程我是经过web方式,过程略):

openstack network create --provider-network-type vxlan demo-net      //网络名称能够本身定义
openstack subnet create --subnet-range 10.0.0.0/24 --network demo-net \   
    --gateway 10.0.0.1 --dns-nameserver 8.8.8.8 demo-subnet        //子网名称能够本身定义

    三、经过web管理界面建立flat网络及子网,或者经过下面的命令建立(实际过程我是经过web方式,过程略):

openstack network create  --provider-physical-network physnet1 \      //“physnet1”这个名称须要参考文件/etc/kolla/neutron-server/ml2_conf.ini中的 “flat_networks = physnet1”
    --provider-network-type flat public1      //网络名称能够本身定义
openstack subnet create --no-dhcp \
    --allocation-pool 192.168.1.100,192.168.1.200 --network public1 \   //网络池能够本身定义
    --subnet-range 192.168.1.0/24 --gateway 192.168.1.1 public1-subnet   //子网范围、网关、子网名称能够本身定义

    这里最关键的就是建立flat网络的时候,不要加--external参数,以及“physnet1”这个名称须要参考文件/etc/kolla/neutron-server/ml2_conf.ini中的 “flat_networks = physnet1” ,在web管理界面上面配置这个参数的时候也一样须要找到这个flat_networks 名称,不少人在这里就迷茫了,都卡在这个地方。

    至于--external参数,若是有这个参数,那么建立的flat网络不能为虚拟机直接链接,只能跟openstack内部的路由器链接,因此不能加这个参数。

    四、完成测试镜像cirros的下载和上传、默认安全组的建立、秘钥的生成等等初始化操做:

    IMAGE_URL=http://download.cirros-cloud.net/0.3.4/    
    IMAGE=cirros-0.3.4-x86_64-disk.img
    IMAGE_NAME=cirros
    if ! [ -f "${IMAGE}" ]; then
        curl -L -o ./${IMAGE} ${IMAGE_URL}/${IMAGE}
    fi
    echo Creating glance image.
    openstack image create --disk-format qcow2 --container-format bare --public \
        --file ./${IMAGE} ${IMAGE_NAME}
    # Get admin user and tenant IDs
    ADMIN_USER_ID=$(openstack user list | awk '/ admin / {print $2}')
    ADMIN_PROJECT_ID=$(openstack project list | awk '/ admin / {print $2}')
    ADMIN_SEC_GROUP=$(openstack security group list --project ${ADMIN_PROJECT_ID} | awk '/ default / {print $2}')
    # Sec Group Config
    openstack security group rule create --ingress --ethertype IPv4 \
        --protocol icmp ${ADMIN_SEC_GROUP} 
    openstack security group rule create --ingress --ethertype IPv4 \
        --protocol tcp --dst-port 22 ${ADMIN_SEC_GROUP}
    # Open heat-cfn so it can run on a different host
    openstack security group rule create --ingress --ethertype IPv4 \
        --protocol tcp --dst-port 8000 ${ADMIN_SEC_GROUP}
    openstack security group rule create --ingress --ethertype IPv4 \
        --protocol tcp --dst-port 8080 ${ADMIN_SEC_GROUP}
    if [ ! -f ~/.ssh/id_rsa.pub ]; then
        echo Generating ssh key.
        ssh-keygen -t rsa -f ~/.ssh/id_rsa
    fi
    if [ -r ~/.ssh/id_rsa.pub ]; then
        echo Configuring nova public key and quotas.
        openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
    fi

    你们能够看到,其实上面都是从init-runonce里面摘取出来的,能够直接复制粘贴到命令窗口执行。

    

    五、最后就是验证测试了,最简单的验证方法就是,在web管理界面上建立实例,选择测试镜像cirros,在选择网络这一块的时候,直接选择flat网络public1,这时候系统会自动分配一个flat地址,好比192.168.1.110 (上面的子网自动分配地址池是192.168.1.100-192.168.1.200),生成以后直接测试看看虚拟机是否是可以与192.168.1.0/24网络互访。现实状况下面,更多的是会使用静态分配IP的方式,过程以下:

    1)进入web管理界面,管理员->网络->public1->端口->建立端口 ,输入“名称”好比cirros-1,选择“指定IP或子网”为“固定的IP地址”,输入“固定的IP地址”好比192.168.1.101,点击“建立端口”;

    2)进入web管理界面,项目->实例->建立实例 ,输入“实例名称”好比cirros1,镜像选择cirros,“实例类型”选择tiny,“网络”跳过“网络接口”选择上面生成的“cirros-1”,“安全组”选择default,“秘钥对”选择mykey,点击“建立实例”;

    3)等cirros1实例生成完成以后,进入web管理界面,项目->实例,点击cirros1虚拟机->控制台,登陆cirros1虚拟机,执行命令:

    ifconfig eth0 192.168.1.101/24

    登陆进在192.168.1.0/24网段的主机对192.168.1.101镜像ping和ssh测试成功:

    ping 192.168.1.101
    ssh cirros@192.168.1.101   //密码  cubswin:)
相关文章
相关标签/搜索