Nginx Ingress 在所有自定义命名空间中寻找服务

Nginx Ingress Looking for Service in all Custom Namespaces

我有三个命名空间 dev、test 和 staging。 test 和 staging 中没有 pods。在开发中,我有 nginx、ingress 和前端服务。对于所有对 nginx 的请求,它都被转发到前端服务。

但问题是开发中的 nginx 也在尝试在测试和暂存命名空间中查找前端服务。它在 3 个名称空间之间进行循环。所以有时页面正在加载,有时是 503 错误。

这里是入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: frontend-ingress
  namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: frontend
          servicePort: 80

这里是 nginx 的日志:

I0327 07:54:50.867120       1 command.go:76] change in configuration detected. Reloading...
W0327 07:54:50.867339       1 controller.go:841] service test/frontend does not have any active endpoints
W0327 07:54:50.867370       1 controller.go:841] service staging/frontend does not have any active endpoints
W0327 07:54:50.868198       1 controller.go:777] upstream test-frontend-80 does not have any active endpoints. Using default backend
W0327 07:54:50.868219       1 controller.go:777] upstream staging-frontend-80 does not have any active endpoints. Using default backend

部署 nginx pod 时指定 --force-namespace-isolation=true 参数。并将图像更新为 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0

我想详细说明@Narayan-Prusty 的回答。

我必须添加 --force-namespace-isolation=true 并将图像设置为 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0,但还必须添加 --watch-namespace=$(POD_NAMESPACE)