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

Posted

技术标签:

【中文标题】在 OVH 的 Openstack 上使用 Terraform 创建专用网络【英文标题】:Private network creation with Terraform on OVH's Openstack 【发布时间】:2018-03-07 12:26:54 【问题描述】:

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

我的地形文件是:

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"
,

part 允许我将实例连接到外部世界。我的两个实例应该在 192.168.199.0/24 网络中有 IP 地址,但它们没有。他们没有 IP 地址,也没有路由来与此网络进行通信。但我知道他们有合适的 IP 地址:

在该屏幕截图中,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 子网的路由。

【问题讨论】:

对我来说同样的问题 您应该使用您的 terraform 代码提交一个新问题,以便我们为您提供帮助。我会调查的 实际上,OVH 文章中的一个示例不起作用docs.ovh.com/gb/en/public-cloud/how-to-use-terraform,未在接口上分配专用网络的 IP(就像您在问题中描述的那样)。可能这就是为什么OVH的github上有一个特殊的网络模块ovh/publiccloud-network/ovh 【参考方案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 的接口。这是行不通的。

【讨论】:

我刚刚使用了你的 sn-p 并替换了变量。我的第三个接口甚至是 DOWN 并且没有分配 IP 地址。 检查 DHCP 设置。您可能必须在专用网络上禁用它并手动分配 IP 地址才能进行调试。再一次,cmets 不适合新问题,请打开一个新问题,如果需要,请在此处粘贴链接

以上是关于在 OVH 的 Openstack 上使用 Terraform 创建专用网络的主要内容,如果未能解决你的问题,请参考以下文章

OVH 的 OpenStack Swift 的雾配置

OVH - 执行 cron

如何在 ovh 主机上使用 docker-compose

在OVH上更改版本php

在 ovh 共享服务器上丢失与 Symfony 2.8 的会话

在共享 OVH 服务器上部署 Node.js socket.io 项目