opentelekomcloud / terraform-provider-opentelekomcloud

Terraform OpenTelekomCloud provider

Home Page:https://registry.terraform.io/providers/opentelekomcloud/opentelekomcloud/latest

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ELB V3 ip_target_enable / host unreachable

anton-sidelnikov opened this issue · comments

I created a landing-vpc and a DLB (ELB V3) inside a class A subnet (10.0.0.0).
There is a peering to the working-vpc with a class C subnet.
Also the routes in both directions are established.
The DLB (ELB V3) should connect to an ECS inside the working-vpc.
For this we need the TF parameter: ip_target_enable = true as documented.
And yes, the DLB (ELB V3) gets created with the correct backend server as IP entry correctly.
Everything looks quite good. But it is just not working. I can not access the ECS from the DLB (ELB V3).

When I deploy the DLB (ELB V3) without parameter ip_target_enable and without backend server and then enable IP as backend by hand and add backend server by hand... it's just working perfectly.
So it seems that there is a difference somewhere inside ip_target_enable which is not visible inside the GUI.

Here's working solution:

resource "opentelekomcloud_ecs_instance_v1" "name" {
  name     = "server_backend_test"
  image_id = var.image_id
  flavor   = var.flavor_name
  vpc_id   = opentelekomcloud_vpc_v1.working_vpc.id

  nics {
    network_id = opentelekomcloud_vpc_subnet_v1.working_subnet.network_id
  }

  availability_zone = "eu-de-01"
  key_name          = var.keypair_name
}

resource "opentelekomcloud_lb_loadbalancer_v3" "loadbalancer_1" {
  name        = "loadbalancer_landing_vpc"
  router_id   = opentelekomcloud_vpc_v1.landing_vpc.id
  network_ids = [opentelekomcloud_vpc_subnet_v1.landing_subnet.network_id]

  availability_zones = ["eu-de-01"]
  ip_target_enable = true

  public_ip {
    id = opentelekomcloud_networking_floatingip_v2.fip_1.id
  }
}

resource "opentelekomcloud_lb_listener_v3" "listener_1" {
  protocol        = "HTTP"
  protocol_port   = 8080
  loadbalancer_id = opentelekomcloud_lb_loadbalancer_v3.loadbalancer_1.id
  default_pool_id = opentelekomcloud_lb_pool_v3.pool.id
}

resource "opentelekomcloud_lb_pool_v3" "pool" {
  name            = "pool_1"
  loadbalancer_id = opentelekomcloud_lb_loadbalancer_v3.loadbalancer_1.id
  lb_algorithm    = "ROUND_ROBIN"
  protocol        = "HTTP"

  session_persistence {
    type                = "HTTP_COOKIE"
    persistence_timeout = "30"
  }
}

resource "opentelekomcloud_lb_member_v3" "member" {
  name          = "member-1"
  pool_id       = opentelekomcloud_lb_pool_v3.pool.id
  address       = opentelekomcloud_ecs_instance_v1.name.nics[0].ip_address
  protocol_port = 8080
}

resource "opentelekomcloud_networking_floatingip_v2" "fip_1" {}

resource "opentelekomcloud_vpc_v1" "landing_vpc" {
  name = "landing_vpc"
  cidr = "10.5.0.0/16"
}

resource "opentelekomcloud_vpc_subnet_v1" "landing_subnet" {
  name              = "landing_subnet"
  cidr              = "10.5.0.0/16"
  gateway_ip        = "10.5.0.1"
  vpc_id            = opentelekomcloud_vpc_v1.landing_vpc.id
  availability_zone = "eu-de-01"
}


resource "opentelekomcloud_vpc_v1" "working_vpc" {
  name = "working_vpc"
  cidr = "192.168.0.0/16"
}

resource "opentelekomcloud_vpc_subnet_v1" "working_subnet" {
  name              = "working_subnet"
  cidr              = "192.168.0.0/16"
  gateway_ip        = "192.168.0.1"
  vpc_id            = opentelekomcloud_vpc_v1.working_vpc.id
  availability_zone = "eu-de-02"
}

resource "opentelekomcloud_vpc_peering_connection_v2" "peering_1" {
  name        = "opentelekomcloud_peering_1"
  vpc_id      = opentelekomcloud_vpc_v1.landing_vpc.id
  peer_vpc_id = opentelekomcloud_vpc_v1.working_vpc.id
}

resource "opentelekomcloud_vpc_route_table_v1" "table_2" {
  name        = "peering-table-forward"
  vpc_id      = opentelekomcloud_vpc_v1.working_vpc.id
  subnets = [opentelekomcloud_vpc_subnet_v1.working_subnet.id]

  route {
    destination = "10.5.0.0/16"
    type        = "peering"
    nexthop     = opentelekomcloud_vpc_peering_connection_v2.peering_1.id
    description = "peering rule 2"
  }
}

resource "opentelekomcloud_vpc_route_table_v1" "table_1" {
  name        = "peering-table-backward"
  vpc_id      = opentelekomcloud_vpc_v1.landing_vpc.id
  subnets = [opentelekomcloud_vpc_subnet_v1.landing_subnet.id]

  route {
    destination = "192.168.0.0/16"
    type        = "peering"
    nexthop     = opentelekomcloud_vpc_peering_connection_v2.peering_1.id
    description = "peering rule"
  }
}

If you want to use config with old route table resources please change 2 opentelekomcloud_vpc_route_table_v1 resources to the next ones:

resource "opentelekomcloud_vpc_route_v2" "vpc_route_2" {
  type        = "peering"
  nexthop     = opentelekomcloud_vpc_peering_connection_v2.peering_1.id
  destination = "10.5.0.0/16"
  vpc_id      = opentelekomcloud_vpc_v1.working_vpc.id
}

resource "opentelekomcloud_vpc_route_v2" "vpc_route_1" {
  type        = "peering"
  nexthop     = opentelekomcloud_vpc_peering_connection_v2.peering_1.id
  destination = "192.168.0.0/16"
  vpc_id      = opentelekomcloud_vpc_v1.landing_vpc.id
}