[英]deploy kubernetes ingress with terraform
我正在嘗試使用 terraform 部署 kube.netes ingress。如此處所述鏈接和我自己的變體:
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 apply -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
需要一些關於如何使用 terraform 部署 kube.netes ingress 的想法。
這里的問題是 YML 中的示例使用的是正確的 API 版本,即networking.k8s.io/v1
,因此它可以工作,因為您的 K8s 版本可能高於 1.19。 它從那個版本開始可用,Ingress 所屬的extensions/v1beta1
在 1.22 中被棄用,取而代之的是networking.k8s.io/v1
,你可以在這里閱讀。 在這種情況下,您當前的 Terraform 代碼正在為 Ingress 使用舊的 K8s API 版本。 您可以在文檔菜單的左側看到:
如果您進一步查看文檔,您將看到networking/v1
和資源部分kube.netes_ingress_v1
。 將 Terraform 中的代碼更改為使用來自networking.k8s.io/v1
的 Ingress,它變為:
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
}
}
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.