Развернуть kubernetes ingress с помощью terraform

Я пытаюсь развернуть kubernetes ingress с помощью terraform. Как описано здесь связь и мой собственный вариант:

resource "kubernetes_ingress" "node" {
  metadata {
    name = "node"
  }
  spec {
    ingress_class_name = "nginx"
    rule {
      host = "backend.io"
      http {
        path {
          path = "/"
          backend {
            service_name = kubernetes_service.node.metadata.0.name
            service_port = 3000
          }
        }
      }
    }
  }
}

ошибка:

╷
│ Error: Failed to create Ingress 'default/node' because: the server could not find the requested resource (post ingresses.extensions)
│ 
│   with kubernetes_ingress.node,
│   on node.tf line 86, in resource "kubernetes_ingress" "node":
│   86: resource "kubernetes_ingress" "node" {
│ 
╵

оно работает:

kubectl применить -f file_below.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: node
spec:
  ingressClassName: nginx
  rules:
  - host: backend.io
    http:
      paths:
      - path: /
        pathType: ImplementationSpecific
        backend:
            service:
              name: node
              port:
               number: 3000

Нужны некоторые идеи о том, как развернуть kubernetes ingress с помощью terraform.

Определили ли вы блок провайдера в коде terraform, и если да, можете ли вы также добавить это к вопросу?

Marko E 16.03.2022 21:15
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема здесь в том, что пример в YML использует правильную версию API, то есть networking.k8s.io/v1, поэтому он работает, поскольку у вас, вероятно, есть версия K8s выше 1.19. Он доступен с той версии, extensions/v1beta1, частью которой был Ingress, устарел в пользу networking.k8s.io/v1 в 1.22, как вы можете прочитать здесь. В этом случае ваш текущий код Terraform использует старую версию K8s API для Ingress. Вы можете увидеть это в левой части меню документации:

extensionsv1beta1

Если вы посмотрите дальше в документации, вы увидите networking/v1 и в раздел ресурсовkubernetes_ingress_v1. Изменив код, который у вас есть в Terraform, чтобы использовать Ingress из networking.k8s.io/v1, он становится:

resource "kubernetes_ingress_v1" "node" {
  metadata {
    name = "node"
  }

  spec {
    ingress_class_name = "nginx"
    rule {
      host = "backend.io"
      http {
        path {
          path = "/*"
          path_type = "ImplementationSpecific"
          backend {
            service {
              name = kubernetes_service.node.metadata.0.name
              port {
                number = 3000
              }
            }
          }
        }
      }
    }
  }
}

Другие вопросы по теме