2017-09-26 6 views
1

Je tente de déployer certaines instances d'Openstack sur le Cloud public d'OVH en utilisant Terraform. Le point est (pour l'instant) d'avoir deux instances sur deux réseaux. Chaque instance doit avoir une adresse IP externe (ce qui n'est pas un problème) et une adresse IP interne sur un réseau privé (ce qui me cause des problèmes).Création de réseau privé avec Terraform sur Openstack d'OVH

Mon fichier terraform est:

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

Le

{ 
    name = "Ext-Net" 
}, 
partie

me permet de connecter l'instance au monde extérieur. Mes deux instances doivent avoir des adresses IP dans le réseau 192.168.199.0/24, mais ce n'est pas le cas. Ils n'ont pas d'adresses IP ni de routes à communiquer sur ce réseau. Mais je sais qu'ils ont les adresses IP appropriées:

enter image description here

Sur cette capture d'écran, Instance_1 est bien relié à l'extérieur (comme prévu). instance_1 et instance_2 ont toutes les deux une adresse IP privée. Mais:

[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 n'a pas cette adresse IP (192.168.199.2 ou .3). Et il n'y a pas de route vers le sous-réseau 192.168.199.0/24.

+0

Même problème pour moi – Derp

+0

Vous devriez soumettre une nouvelle question avec votre code terraform afin de nous permettre de vous aider. Je vais regarder dans –

+0

En fait, un exemple de l'article sur OVH ne fonctionne pas https://docs.ovh.com/gb/en/public-cloud/how-to-use-terraform/, les IP de réseau privé font ne pas être assigné sur l'interface (comme vous l'avez décrit dans votre question). Et c'est probablement la raison pour laquelle il y a un module spécial pour le réseau sur le github d'OVH 'ovh/publiccloud-network/ovh' – Derp

Répondre

1

Après quelques jours, tout a fonctionné. Malgré ce que le soutien du fournisseur dit, cela semble être un bogue: je n'ai rien changé et le travailleur est soudainement sorti de nulle part.

EDIT: Après quelques semaines, j'ai fini avec le code suivant:

Attention avec copier/coller, mon compute_instance est dans un module, donc tous ceux 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 
    }, 
    ] 
} 

I n'utilise plus le port. Le choix d'arrêter d'utiliser le port n'est pas lié à ce problème.

Depuis Debian 9, l'instance peut essayer de configurer l'interface privée en tant qu'interface pour accéder à Internet. Ce qui ne marchera pas.

+0

Je viens d'utiliser votre extrait et les variables remplacées. Ma 3ème interface est même 'DOWN' et n'a pas d'adresse IP assignée. – Derp

+1

Vérifiez les paramètres DHCP. Vous devrez peut-être le désactiver sur le réseau privé et attribuer l'adresse IP manuellement afin de déboguer. Encore une fois les commentaires ne sont pas pour de nouvelles questions, s'il vous plaît en ouvrir une nouvelle, et collez le lien ici si vous voulez –