- 我的应用程序在版本 X 的命名空间 A 中运行,我可以通过在同一命名空间 A 中运行的 nginx 入口控制器访问应用程序端点。
- 我在命名空间 B 中使用版本 Y 启动相同的应用程序堆栈,并创建指向与在命名空间 A 中运行的控制器相同的 kubernetes.io/ingress.class 的入口规则。
- 另外,我启用了权重为 50% 的金丝雀注释。当我尝试通过入口访问应用程序端点时,请求将根据指定的权重分布在命名空间 A 中运行的版本 X 和命名空间 B 中运行的版本 Y
- 现在,我将金丝雀权重更改为 100,并看到所有流量都流向命名空间 B 中的版本 Y。
- 以上都符合我的预期
但是,现在我从命名空间 A 中删除了应用程序 pod,但保持不变
- a) 在命名空间 A 中运行的服务(为其定义了入口规则)
- b) 在命名空间 A 中运行的 Nginx 控制器中的入口规则
- c) 命名空间 B 的所有 pod 都使用各自的服务和 100% 的入口规则运行
- 当我现在尝试访问应用程序端点时,它只是失败了。我知道命名空间 A 中没有活动端点(因为 pod 已被删除)但 svc 在命名空间 A 中仍然可用,并且 B 中的入口规则启用了权重 100% 的金丝雀,我期望流量将被路由到命名空间中的 pod B ,但这并没有发生。
我比较了在命名空间 A 中删除 pod 前后 nginx 控制器的配置(100% 金丝雀入口规则完好无损),使用
kubectl exec <nginx-controller-pod-name> -n <namespace> -- curl localhost:10246/configuration/backends
kubectl exec <nginx-controller-pod-name> -n <namespace> -- cat nginx.conf
删除命名空间 A 中的 pod 前后的 o/p 没有区别
笔记:
- Nginx入口镜像:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.2
- Kubernetes 版本:1.12.7
这是预期的行为吗?我无法找到导致这种行为的原因。