在OVH的Openstack上使用Terraform创建专用网络

时间:2017-09-26 10:19:45

标签: openstack terraform ovh

我正在尝试使用Terraform在OVH的公共云上部署一些Openstack实例。关键是(目前)在两个网络上有两个实例。每个实例都应该有一个外部IP地址(这不是问题)和私有网络上的内部IP地址(这会给我带来麻烦)。

我的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地址。但是:

root@instance-1:~# 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子网的路由。

1 个答案:

答案 0 :(得分:2)

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

编辑:几周后,我最终得到了以下代码:

小心复制/粘贴,我的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 }, ] }

SELECT t1.C1, t2.C2
FROM yourTable t1
INNER JOIN yourTable t2
ORDER BY t1.C1, t2.C2;

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

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