我需要多个后端为空的规则的原因是,我正在为集群创建一个入口,这样我就可以设置它们的通配符TLS证书。对于实际的后端,我将有单独的微服务模块来创建部署、服务和入口,并在那里定义实际的后端。
以前backend = {}
在resource kubernetes_ingress
:上工作
resource "kubernetes_ingress_v1" "my-ingress-resource" {
annotations = {
"kubernetes.io/ingress.class" = "nginx"
"kubernetes.io/tls-acme" = "true"
"cert-manager.io/cluster-issuer" = <cert-manager cluster issuer name>
}
spec {
tls {
hosts = ["*.example.com", "*.api.example.com"]
secret_name = <secret which cert-manager will store certificate data in>
}
rule {
host = "*.example.com"
http {
path {
backend = {} // <-------------
path = "/"
}
}
}
rule {
host = "*.api.example.com"
http {
path {
backend = {} // <-------------
path = "/"
}
}
}
}
}
但现在,由于我的云提供商强制使用1.22 Kubernetes,这会弃用*v1beta1.Ingress
,我不得不使用kubernetes_ingress_v1
,这对空的后端感到不高兴:
Error: Failed to create Ingress 'XXX' because: Ingress.extensions "XXX" is invalid: [spec.rules[0].http.paths[0].backend: Invalid value: "": resource or service backend is required]
有人知道我如何在kubernetes_ingress_v1
下提供一个空的后端吗?或者为了只为通配符TLS证书创建入口,有更好的方法吗?
在kubectl应用期间,ingress没有检查服务,所以我只将其更改为:
backend {
service {
name = "dummysvc-oktofail"
port {
number = 80
}
}
}
然而,在nginx控制器日志中,您会看到一些错误,表示未找到dummysvc-oktofail
的端点,但这是无害的。
只是想补充一点,我的配置可能不受欢迎,因为我在直接暴露于外部流量的守护进程集上的nginx入口控制器上。这是为了节省成本,因为这是一个最有趣的项目,我不想为负载均衡器花费额外的成本,因为它可能很贵。