Nginx Ingress Controller无法转发GRPC请求:服务无活跃端点
问题:Nginx Ingress Controller跨命名空间服务访问异常
背景与问题现象
- Nginx Ingress Controller部署在独立命名空间,各业务Ingress部署在对应业务命名空间,通过
nginxingress class关联该控制器 - 按照机制,控制器应根据Ingress所在命名空间确定目标服务的命名空间,但当前此逻辑失效,Ingress Controller日志报错:
Service "development/users-api" does not have any active Endpoint.
已验证内容
- 后端Pod之间的服务通信正常
- 在Ingress Controller所在命名空间内,使用跨命名空间服务完整标识(如
curl users-api.<namespace>.svc.cluster.local)可成功访问目标服务 - 但Ingress Controller无法通过服务的自然名称(不带命名空间后缀)访问跨命名空间的服务
我的Ingress配置(基于Terraform)
resource kubernetes_ingress_v1 "api-ingress" { metadata { name = "drop-apis-ingress" namespace = terraform.workspace annotations = { "nginx.ingress.kubernetes.io/ssl-redirect" = true "nginx.ingress.kubernetes.io/backend-protocol" = "GRPC" "nginx.ingress.kubernetes.io/use-regex" = true "cert-manager.io/cluster-issuer" = "letsencrypt-${terraform.workspace}" "nginx.ingress.kubernetes.io/server-snippet": "grpc_read_timeout 3600s; grpc_send_timeout 3600s;" } } spec { tls { hosts = ["${terraform.workspace}.backend.domain.io"] secret_name = "letsencrypt-tls-${terraform.workspace}" } ingress_class_name = "nginx" rule { host = "${terraform.workspace}.backend.domain.io" http { dynamic path { for_each = local.apis content { // grpc service prefix path = "/app.protobuf.shared.${title(path.key)}" path_type = "Prefix" backend { service { name = "${path.key}-api" port { number = 8080 } } } } } } } } }
补充说明
- 后端Service基于Helm模板部署,已通过curl验证其功能正常
请问是否遗漏了某些配置?
内容的提问来源于stack exchange,提问作者raphael.oester
相关产品推荐
相关产品推荐

