无法在devstack节点外部访问DevStack实例

时间:2019-11-12 15:41:14

标签: openstack devstack openstack-neutron floating-ip

在官方documentation之后,我正在尝试在虚拟机上的Devstack操作系统上部署Ubuntu 18.04 Server。 devstack节点只有一个网卡(ens160)通过以下CIDR 10.20.30.40/24连接到网络。我需要在该网络上公开访问我的实例(从10.20.30.240到10.20.30.250)。因此,下面的官方浮动IP documentation再次形成了这个local.conf文件:

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

PUBLIC_INTERFACE=ens160
HOST_IP=10.20.30.40
FLOATING_RANGE=10.20.30.40/24
PUBLIC_NETWORK_GATEWAY=10.20.30.1
Q_FLOATING_ALLOCATION_POOL=start=10.20.30.240,end=10.20.30.250

这将导致形成具有全局IP地址br-ex和辅助IP地址10.20.30.40的{​​{1}}(网关已在网络上;不是10.20.30.1参数谈论网络上的真实网关?)

现在,在成功部署之后,禁用PUBLIC_NETWORK_GATEWAY(根据this),创建具有用于ping和ssh的适当安全组的cirros实例,并附加一个浮动IP,仅可以在我的devstack节点上而不是整个网络上访问我的实例!同样从cirros实例内部,我无法访问外部世界(即使我可以从devstack节点访问外部世界)

然后,观看this视频,我像这样修改了ufw文件:

local.conf

成功完成部署和实例设置后,我仍然只能在devstack节点上访问实例,而不能从外部访问!但是好消息是我可以从cirros实例内部访问外界。

任何帮助将不胜感激!


更新

在第二种配置中,在ping实例浮动IP时检查[[local|localrc]] ADMIN_PASSWORD=secret DATABASE_PASSWORD=$ADMIN_PASSWORD RABBIT_PASSWORD=$ADMIN_PASSWORD SERVICE_PASSWORD=$ADMIN_PASSWORD FLAT_INTERFACE=ens160 HOST_IP=10.20.30.40 FLOATING_RANGE=10.20.30.240/28 上的数据包,我观察到实例的浮动IP的tcpdump广播数据包从网络到达devstack节点路由器;但是不会生成who-has答复,因此ICMP数据包不会路由到devstack节点和实例。

因此,我用一些技巧创建了响应,然后一切正常。但这当然不是解决方案,我认为devstack应该可以直接使用,而无需进行任何调整,这可能是因为devstack的配置错误。

1 个答案:

答案 0 :(得分:2)

经过5天的测试,研究和演讲,我发现了这一点:Openstack VM is not accessible on LAN

.checkLabel { display: block; } .checkLabel input, .checkLabel span { display: inline-block; vertical-align: middle; } 节点上输入以下命令:

<?php

    $listingId = $_POST['listingId'];

    $upload_path = 'public_html/_/hostname.com/stash/images/';

    $upload_url = 'https://www.hostname.com/stash/images/';

    //response array
    $response = array();


    if($_SERVER['REQUEST_METHOD']=='POST'){

        //checking the required parameters from the request
        if(isset($_POST['name']) and isset($_FILES['image']['name'])){

            //getting name from the request
            $name = $_POST['name'];

            //getting file info from the request
            $fileinfo = pathinfo($_FILES['image']['name']);

            //getting the file extension
            $extension = $fileinfo['extension'];

            //file url to store in the database
            $file_url = $upload_url . $listingId . '.' . $extension;

            //file path to upload in the server
            $file_path = $upload_path . $listingId . '.'. $extension;

            //trying to save the file in the directory
            try{
                //saving the file
                move_uploaded_file($_FILES['image']['tmp_name'],$file_path);
            $response['message'] = "idk if this worked";
            //if some error occurred
            }catch(Exception $e){
                $response['error']=true;
                $response['message']=$e->getMessage();
            }
            echo json_encode($response);

        }else{
            $response['error']=true;
            $response['message']='Please choose a file';
        }
    }
?>

就可以了!

干杯!