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

问题描述

建筑学

客观的

我暴露了fe1通过 nginx 入口而不是 GKE 默认入口

我做了什么

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

发生了什么

从浏览器我可以fe1使用 nginx 入口的外部 ip 访问,并且从fe1pod 日志中我看到这些请求实际上是由这些 pod 提供的。我将 Pod 缩小到 0 个副本,fe1并且没有人再响应我的浏览器请求。

所以实际上目标已经实现,但我无法控制它,我没有在 nginx 入口中配置任何东西,我只使用了操作员文件。此外,gui 仅通过暴露ClusterIP,我没有在 nginx 入口和fe1 ClusterIP.

为什么这行得通?我缺少哪个配置?

编辑:

经过一些故障排除后,我发现在“入口”部分我已经部署了一个指向 gui pod 的 GKE 入口,问题是 nginx 入口服务与 GKE 入口使用相同的 IP 地址,所以实际上我的浏览器正在发送请求到旧入口。现在我的疑问是:新的 nginx 入口控制器怎么可能采用与 GKE 旧控制器相同的 ip?

标签: nginxkubernetesgoogle-kubernetes-engineload-balancingkubernetes-ingress

解决方案


为了在 Google Kubernetes Engine 上部署 NGINX 入口控制器,您可能会发现以下链接很有用。请记住这一点:

默认配置监视来自所有命名空间的 Ingress 对象。要更改此行为,请使用标志--watch-namespace将范围限制为特定命名空间。


推荐阅读