使用 Terraform 部署 Kubernetes Ingress
deploy kubernetes ingress with terraform
我正在尝试使用 terraform 部署 kubernetes ingress。
如此处所述 link 和我自己的变体:
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 部署 kubernetes ingress 的想法。
这里的问题是 YML 中的示例使用了正确的 API 版本,即 networking.k8s.io/v1
,因此它可以工作,因为您的 K8s 版本可能高于 1.19。自该版本以来可用,Ingress 所属的 extensions/v1beta1
在 1.22 中被弃用,取而代之的是 networking.k8s.io/v1
,您可以阅读 here。在这种情况下,您当前的 Terraform 代码正在为 Ingress 使用旧的 K8s API 版本。您可以在文档菜单的 left-hand 一侧看到:
如果您进一步查看文档,您将看到 networking/v1
和 resource section kubernetes_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
}
}
}
}
}
}
}
}
我正在尝试使用 terraform 部署 kubernetes ingress。 如此处所述 link 和我自己的变体:
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 部署 kubernetes ingress 的想法。
这里的问题是 YML 中的示例使用了正确的 API 版本,即 networking.k8s.io/v1
,因此它可以工作,因为您的 K8s 版本可能高于 1.19。自该版本以来可用,Ingress 所属的 extensions/v1beta1
在 1.22 中被弃用,取而代之的是 networking.k8s.io/v1
,您可以阅读 here。在这种情况下,您当前的 Terraform 代码正在为 Ingress 使用旧的 K8s API 版本。您可以在文档菜单的 left-hand 一侧看到:
如果您进一步查看文档,您将看到 networking/v1
和 resource section kubernetes_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
}
}
}
}
}
}
}
}