Size: a a a

2020 January 31

AG

Andrey Gumilev in terraform_ru
Yurii Abramkin
node_selector = {
   "beta.kubernetes.io/os" = "linux"
}


именно так заработало

node_selector {
   "beta.kubernetes.io/os" = "linux"
}

так ругалось

спасибо!
нет различий )
источник

KT

Kirill Temnov in terraform_ru
Всем привет!
Я с нубскими вопросами, надеюсь подскажете.
Контекст:

Разворачиваю terraform в Google Cloud.

Есть 2 деплоймента у каждого по сервису (kubernetes_service, type=LoadBalancer). Трафик через них ходит по 80 порту и это работает как надо.


Хочу сделать теперь чтобы трафик был по 443 порту (если нужны детали: Cloudflare -> Google Cloud, сертификат сделал в Cloudflare).
Сделал ingress и привязал к нему для начала 1 сервис и сертификат. Терраформ корректно отрабатывает, но я не могу понять по какому IP заходить в ingress.

Вот конфиг ingress:

resource "kubernetes_secret" "example_tls" {
 type = "kubernetes.io/tls"

 metadata {
   name = "example-tls"
 }

 data = {
   "tls.crt" = file("./tls/example.crt")
   "tls.key" = file("./tls/example.key")

 }
}


resource "kubernetes_ingress" "admin_ingress" {
 metadata {
   name = "admin-ingress"
 }

 spec {
   backend {
     service_name = "admin-ui"
     service_port = 80

   }

   tls {
     hosts       = ["*.example.com"]
     secret_name = "example-tls"
   }
 }
}


вопросы:
1. Как получить IP для ingress?
2. Нужно ли перед ingress ставить load balancer чтобы он проксировал трафик?
3. Если да, то какой это ресурс? пробовал google_compute_forwarding_rule, безуспешно:(
4. Возможно вообще всё не так делаю, тогда как правильно?
источник

AR

Alexey Remizov in terraform_ru
Kirill Temnov
Всем привет!
Я с нубскими вопросами, надеюсь подскажете.
Контекст:

Разворачиваю terraform в Google Cloud.

Есть 2 деплоймента у каждого по сервису (kubernetes_service, type=LoadBalancer). Трафик через них ходит по 80 порту и это работает как надо.


Хочу сделать теперь чтобы трафик был по 443 порту (если нужны детали: Cloudflare -> Google Cloud, сертификат сделал в Cloudflare).
Сделал ingress и привязал к нему для начала 1 сервис и сертификат. Терраформ корректно отрабатывает, но я не могу понять по какому IP заходить в ingress.

Вот конфиг ingress:

resource "kubernetes_secret" "example_tls" {
 type = "kubernetes.io/tls"

 metadata {
   name = "example-tls"
 }

 data = {
   "tls.crt" = file("./tls/example.crt")
   "tls.key" = file("./tls/example.key")

 }
}


resource "kubernetes_ingress" "admin_ingress" {
 metadata {
   name = "admin-ingress"
 }

 spec {
   backend {
     service_name = "admin-ui"
     service_port = 80

   }

   tls {
     hosts       = ["*.example.com"]
     secret_name = "example-tls"
   }
 }
}


вопросы:
1. Как получить IP для ingress?
2. Нужно ли перед ingress ставить load balancer чтобы он проксировал трафик?
3. Если да, то какой это ресурс? пробовал google_compute_forwarding_rule, безуспешно:(
4. Возможно вообще всё не так делаю, тогда как правильно?
источник

KT

Kirill Temnov in terraform_ru
спасибо, посмотрю. Нашел отличия в своём конфиге с этим доком.
источник

KT

Kirill Temnov in terraform_ru
ошибка была в {kubernetes_service, type=LoadBalancer} надо {kubernetes_service, type=NodePort}
так запустилось
источник

IB

Igor Bronovskyi in terraform_ru
Все привет.
Что не так с tflint?
Failed to check `aws_db_instance_invalid_type` rule. An error occurred:

Error: Failed to eval an expression in rds.tf:86; Invalid index: The given key does not identify an element in this collection value.
источник

IB

Igor Bronovskyi in terraform_ru
что тут не так?
источник

IB

Igor Bronovskyi in terraform_ru
terraform validate показываєт, что все норм.
источник

IB

Igor Bronovskyi in terraform_ru
для hardware надо было задать дефолтное значение
источник

A

Andor in terraform_ru
а ты 100% уверен что  ты хочешь из массива по индексу/ключу из переменной получать значение?
источник

AK

Aleksandr Kostiuk in terraform_ru
ребят, подскажите пожалуйста по организации
пришел на новый проект, первая задача - поднять прод среду для приложения

в текущем виде:
репа с терраформ кодом, в репе приложения tfvars и state
У меня 2 варианта:
1. делать как ранее делал по принципу модулей (https://github.com/antonbabenko/terraform-best-practices/tree/master/examples/medium-terraform) и переделать текущую реализацию?
2. делать воркспейсы и тянуть откуда-то tfvars (откуда, ведь ветка stage будет мержаться в prod, а tfvars разные)

Буду благодарен за любой совет)
источник

DZ

Dmytro Zavalkin in terraform_ru
Workspace точно не стоит, если с нуля то я бы ещё посмотрел на terragrunt
источник

AK

Aleksandr Kostiuk in terraform_ru
Думал о нём, просто ранее не использовал еще
источник

N

Nikolai in terraform_ru
привет всем
resource "openstack_blockstorage_volume_v2" "rke_node_root_volume_workernode" {
 count = local.cluster.workernodes.count

 name        = "rke-node-volume-workernodes-${count.index}"
 size        = local.cluster.etcd.volume_size
 snapshot_id = data.openstack_blockstorage_snapshot_v2.rke_nodes_base-snap.id
}

resource "openstack_compute_instance_v2" "rke_node_etcd" {
 for_each = "${join(",", openstack_blockstorage_volume_v2.rke_node_root_volume_etcd.*.id)}"

 name        = "${local.rke_cluster_name}-etcd-${each.key}"
....


ну и получаю вот такое:
Error: Invalid for_each argument
 on main.tf line 34, in resource "openstack_compute_instance_v2" "rke_node_etcd":
 34:   for_each = "${join(",", openstack_blockstorage_volume_v2.rke_node_root_volume_etcd.*.id)}"
The "for_each" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the for_each depends on.

может знает как такое обойти?
источник

A

Andor in terraform_ru
непонятно что ты такое делаешь
источник

A

Andor in terraform_ru
зачем у тебя там join() ? оно же сделает 1 строку из списка?
источник

A

Andor in terraform_ru
ну и кавычек многовато
источник

N

Nikolai in terraform_ru
хм вот с join хороший момент
источник

A

Andor in terraform_ru
если у тебя 1-к-1 волюмы и инстансы, то может проще их одинаково итерировать?
источник

N

Nikolai in terraform_ru
вообщи идея создать volume и потом их атачить к каждой новой VM по айдишнику
источник