如何解决kubernetes nginx ingress 如何在没有特定配置的情况下选择合适的 pod 来平衡?
架构
- 我在 Google Kubernetes Engine (GKE) 的多节点集群中有一个命名空间,我们称之为
project-namespace
- 在
project-namespace
中有一个前端应用程序(已复制)和一些后端应用程序(每个应用程序也已复制)- 前端:
fe1
->fe1-r1
、fe1-r2
、fe1-r3
- 后端 1:
be1
->be1-r1
、be1-r2
、be1-r3
- 后端 2:
be2
->be2-r1
、be2-r2
、be2-r3
- 后端N:
...
- 前端:
-
be1
是一个例外,它需要从外部访问,所以我通过谷歌云默认负载均衡器公开它:-
GKE-BL-be1
->be1-r1
、be1-r2
、be1-r3
-
- 所有其他应用程序,包括
fe1
都由ClusterIP
服务支持
目标
我通过 Nginx 入口而不是 GKE 默认入口公开了 fe1
我做了什么
- 我在 nginx-ingress 的“入门”文档中下载了这个操作符文件:
curl https://raw.githubusercontent.com/kubernetes/ingress-Nginx/controller-v0.43.0/deploy/static/provider/cloud/deploy.yaml \
> ingress.yaml
- 我替换了操作员使用的命名空间
sed -i 's/namespace: ingress-Nginx/namespace: project-namespace/g'
- 我部署了操作员文件
kubectl apply -f ingress.yaml
发生了什么
从浏览器中,我可以使用 Nginx 入口的外部 ip 访问 fe1
,并且从 fe1
pod 日志中我看到请求实际上是由这些 pod 提供的。
我将 fe1
pod 的副本缩小到 0 个副本,但没有人再响应我的浏览器请求。
所以实际上目标已经实现,但我无法控制它,我没有在 Nginx 入口中配置任何东西,我只使用了操作员文件。
此外,gui 仅通过 ClusterIP
公开,并且我没有在 Nginx 入口和 fe1
ClusterIP
之间配置任何代理规则。
为什么会这样? 我缺少哪个配置?
编辑:
经过一些故障排除后,我发现在“入口”部分我已经部署了一个指向 gui pod 的 GKE 入口,问题是 Nginx 入口服务采用与 GKE 入口相同的 IP 地址,所以实际上我的浏览器正在向旧入口发送请求。 现在我的疑问是:新的 Nginx 入口控制器怎么可能使用 GKE 旧控制器的相同 ip?
解决方法
为了在 Google Kubernetes Engine 上部署 NGINX Ingress Controller,您可能会发现以下 link 很有用。请记住这一点:
默认配置监视来自所有命名空间的 Ingress 对象。要更改此行为,请使用标志 --watch-namespace
将范围限制为特定命名空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。