2017-09-26 125 views
1

我试图在使用Terraform的OVH公共云上部署Openstack实例。重点是(现在)在两个网络上有两个实例。每个实例都应该有一个外部IP地址(这不是问题)和专用网络上的内部IP地址(这会给我带来麻烦)。使用Terraform在OVH的Openstack上创建专用网络

我terraform文件是:

resource "openstack_compute_keypair_v2" "keypair" { 
    provider = "openstack.ovh" 
    name  = "jpin" 
    public_key = "${file("~/.ssh/id_rsa.pub")}" 
    region  = "GRA3" 
} 

resource "openstack_networking_network_v2" "network_1" { 
    provider  = "openstack.ovh" 
    name   = "network_1" 
    admin_state_up = "true" 
    region   = "GRA3" 
} 

resource "openstack_networking_subnet_v2" "subnet_1" { 
    provider = "openstack.ovh" 
    name  = "subnet_1" 
    network_id = "${openstack_networking_network_v2.network_1.id}" 
    cidr  = "192.168.199.0/24" 
    ip_version = 4 
    region  = "GRA3" 
    enable_dhcp = true 
} 

resource "openstack_networking_port_v2" "port_1" { 
    provider  = "openstack.ovh" 
    name   = "port_1" 
    network_id  = "${openstack_networking_network_v2.network_1.id}" 
    admin_state_up = "true" 
    region   = "GRA3" 

    fixed_ip { 
    "subnet_id" = "${openstack_networking_subnet_v2.subnet_1.id}" 
    } 
} 

resource "openstack_networking_port_v2" "port_2" { 
    provider  = "openstack.ovh" 
    name   = "port_2" 
    network_id  = "${openstack_networking_network_v2.network_1.id}" 
    admin_state_up = "true" 
    region   = "GRA3" 

    fixed_ip { 
    "subnet_id" = "${openstack_networking_subnet_v2.subnet_1.id}" 
    } 
} 

resource "openstack_compute_instance_v2" "instance_1" { 
    provider  = "openstack.ovh" 
    name   = "instance_1" 
    security_groups = ["default"] 
    region   = "GRA3" 
    key_pair  = "${openstack_compute_keypair_v2.keypair.name}" 
    flavor_name  = "s1-2" 
    image_name  = "Debian 8 - Docker" 

    network = [ 
    { 
     name = "Ext-Net" 
    }, 
    { 
     port = "${openstack_networking_port_v2.port_1.id}" 
    }, 
    ] 
} 

resource "openstack_compute_instance_v2" "instance_2" { 
    provider  = "openstack.ovh" 
    name   = "instance_2" 
    security_groups = ["default"] 
    region   = "GRA3" 
    key_pair  = "${openstack_compute_keypair_v2.keypair.name}" 
    flavor_name  = "s1-2" 
    image_name  = "Debian 8 - Docker" 

    network { 
    port = "${openstack_networking_port_v2.port_2.id}" 
    } 
} 

{ 
    name = "Ext-Net" 
}, 

部分允许我到实例连接到外面的世界。我的两个实例应该在192.168.199.0/24网络中有IP地址,但它们不是。他们没有IP地址,也没有路由通讯到这个网络。但我知道,他们有相应的IP地址:

enter image description here

在那个截图,instance_1很好地连接到外部(如预期)。 instance_1和instance_2都有一个私有IP地址。但是:

[email protected]:~# ip a 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
    link/ether fa:16:3e:b1:7c:ae brd ff:ff:ff:ff:ff:ff 
    inet 145.239.XXX.YY/32 brd 145.239.XXX.YY scope global eth0 
     valid_lft forever preferred_lft forever 

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 
    link/ether fa:16:3e:6a:87:8e brd ff:ff:ff:ff:ff:ff 

eth1没有该IP地址(192.168.199.2或.3)。没有路由到192.168.199.0/24子网。

+0

对我来说同样的问题 – Derp

+0

您应该提交一个新的问题与您的terraform代码,以便我们为您提供帮助。我会研究它 –

+0

实际上OVH文章中的一个例子不起作用https://docs.ovh.com/gb/en/public-cloud/how-to-use-terraform/,专用网络的IP地址没有在界面上分配(就像你在你的问题中描述的那样)。也许这就是为什么在OVH的github上有一个特殊的网络模块ovh/publiccloud-network/ovh' – Derp

回答

1

几天后,一切正常。尽管提供者的支持在说什么,但它似乎是一个错误:我没有改变任何东西,它的工作人员突然间无处可逃。

编辑:几周后,我结束了下面的代码:

慎用复制/粘贴,我compute_instance是在一个模块中,因此,所有这些var

resource "ovh_publiccloud_private_network" "network" { 
    provider = "ovh.ovh" 
    project_id = "${var.tenant_id}" 
    name  = "Private Network" 
    regions = "${values(var.regions)}" 
} 

resource "ovh_publiccloud_private_network_subnet" "subnet" { 
    provider = "ovh.ovh" 
    project_id = "${var.tenant_id}" 
    network_id = "${element(ovh_publiccloud_private_network.network.*.id, count.index)}" 

    start = FIRST_PRIVATE_IP 
    end  = LAST_PRIVATE_IP 
    network = PRIVATE_SUBNET 

    count  = "${length(var.regions)}" 
    region  = "${element(values(var.regions), count.index)}" 
} 

resource "openstack_compute_instance_v2" "compute_instance" { 
    provider   = "openstack.ovh" 
    region    = "${var.region_id}" 
    key_pair   = "${var.keypair}" 
    flavor_name   = "${var.instance_flavor}" 
    image_name   = "${var.instance_image}" 

    network = [ 
    { 
     name = "Ext-Net" 
    }, 
    { 
     name  = "${var.private_network}" 
     fixed_ip_v4 = MY_PRIVATE_IP 
    }, 
    ] 
} 

我不再使用端口了。停止使用端口的选择与该问题无关。

自Debian 9以来,实例可能会尝试将专用接口配置为接口以访问Internet。哪个不行。

+0

我刚刚使用了你的代码片段并替换了变量。我的第三个界面甚至是“DOWN”,并没有分配IP地址。 – Derp

+1

检查DHCP设置。您可能必须在专用网络上禁用它并手动分配IP地址才能进行调试。再次评论不是针对新问题的,请打开一个新的问题,如果需要,请将链接粘贴到此处 –