微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

kubernetes nginx ingress 如何在没有特定配置的情况下选择合适的 pod 来平衡?

如何解决kubernetes nginx ingress 如何在没有特定配置的情况下选择合适的 pod 来平衡?

架构

  • 我在 Google Kubernetes Engine (GKE) 的多节点集群中有一个命名空间,我们称之为 project-namespace
  • project-namespace 中有一个前端应用程序(已复制)和一些后端应用程序(每个应用程序也已复制)
    • 前端:fe1 -> fe1-r1fe1-r2fe1-r3
    • 后端 1:be1 -> be1-r1be1-r2be1-r3
    • 后端 2:be2 -> be2-r1be2-r2be2-r3
    • 后端N:...
  • be1一个例外,它需要从外部访问,所以我通过谷歌云负载均衡器公开它:
    • GKE-BL-be1 -> be1-r1be1-r2be1-r3
  • 所有其他应用程序,包括 fe1 都由 ClusterIP 服务支持

目标

我通过 Nginx 入口而不是 GKE 认入口公开了 fe1

我做了什么

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 入口负载均衡器,使集群外部的端口 80 和 443 可用,而我的其他应用程序 pod 没有使用 k8s 标签

发生了什么

从浏览器中,我可以使用 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 举报,一经查实,本站将立刻删除。