我正在使用 Azure AKS 插件进行 HTTP 应用程序路由,如 here 中所述。我使用 Terraform 部署了它,它通常可以工作:
resource "kubernetes_ingress" "ingress" {
metadata {
name = "nurse-ingress"
namespace = kubernetes_namespace.nurse.metadata[0].name
annotations = {
"kubernetes.io/ingress.class" = "addon-http-application-routing"
"nginx.ingress.kubernetes.io/rewrite-target" = "/$1"
}
}
wait_for_load_balancer = true
spec {
backend {
service_name = "nurse-service"
service_port = 80
}
rule {
host = "nurseapp.${azurerm_kubernetes_cluster.main.addon_profile[0].http_application_routing[0].http_application_routing_zone_name}"
http {
path {
backend {
service_name = kubernetes_service.app.metadata[0].name
service_port = 80
}
path = "/app/(.*)"
}
path {
backend {
service_name = kubernetes_service.nurse.metadata[0].name
service_port = 80
}
path = "/nurse/(.*)"
}
}
}
}
}
但是,它仅适用于默认后端(即path=/)。当我在/nurse 或/app 上调用 URL 时,它不起作用,因为重写目标 /$1
似乎没有被考虑在内。我只会收到 404 - 因为护士服务本身确实期望调用/foo 而不是/nurse/foo
这是否可以开始配置,如果可以,知道我的错误在哪里吗?
最佳答案
以下内容将重写路径,以便对 /sample/suffix
的请求将被重写为 /suffix
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
nginx.ingress.kubernetes.io/rewrite-target: $2
spec:
rules:
- host: sample.YOUR-ID.westeurope.aksapp.io
http:
paths:
- path: /sample/
pathType: Prefix
backend:
service:
name: sample
port:
number: 80
关于azure - AKS - 将插件 HTTP 应用程序路由与 nginx 重写规则结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64535744/