Я пытаюсь развернуть 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.
Проблема здесь в том, что пример в YML использует правильную версию API, то есть networking.k8s.io/v1
, поэтому он работает, поскольку у вас, вероятно, есть версия K8s выше 1.19. Он доступен с той версии, extensions/v1beta1
, частью которой был Ingress, устарел в пользу networking.k8s.io/v1
в 1.22, как вы можете прочитать здесь. В этом случае ваш текущий код Terraform использует старую версию K8s API для Ingress. Вы можете увидеть это в левой части меню документации:
Если вы посмотрите дальше в документации, вы увидите 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
}
}
}
}
}
}
}
}
Определили ли вы блок провайдера в коде terraform, и если да, можете ли вы также добавить это к вопросу?