nginx - gke nginx ingress 创建额外的负载均衡器
问题描述
我有一组服务,我想作为入口负载均衡器公开。我选择 nginx 作为入口是因为能够强制 http 到 https 重定向。
具有类似的入口配置
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-https
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: true
nginx.ingress.kubernetes.io/force-ssl-redirect: true
nginx.org/ssl-services: "api,spa"
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- api.some.com
- www.some.com
secretName: secret
rules:
- host: api.some.com
http:
paths:
- path: /
backend:
serviceName: api
servicePort: 8080
- host: www.some.com
http:
paths:
- path: /
backend:
serviceName: spa
servicePort: 8081
gke 创建了 nginx 入口负载均衡器,但也创建了另一个带有后端的负载均衡器,以及如果没有选择 nginx 而选择 gcp 作为入口的所有内容。
下面的屏幕截图以红色显示了两个意外的 LB,蓝色显示了两个 nginx 入口 LB,分别用于我们的 qa 和 prod env。
kubectl 的输出获取服务
xyz@cloudshell:~ (xyz)$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
api NodePort 1.2.3.4 <none> 8080:32332/TCP,4433:31866/TCP 10d
nginx-ingress-controller LoadBalancer 1.2.6.9 12.13.14.15 80:32321/TCP,443:32514/TCP 2d
nginx-ingress-default-backend ClusterIP 1.2.7.10 <none> 80/TCP 2d
spa NodePort 1.2.8.11 <none> 8082:31847/TCP,4435:31116/TCP 6d
来自 gcp gke services 入口的屏幕截图,包含错误信息
这是预期的吗?
我是否错过了任何配置来阻止创建这个额外的负载均衡器?
解决方案
在 GCP GKE 上,gcp 入口控制器默认启用,并且将始终在任何入口定义中导致新的 LB,即使指定了 .class。
https://github.com/kubernetes/ingress-nginx/issues/3703
因此,要修复它,我们应该从集群中删除 gcp 入口控制器,如https://github.com/kubernetes/ingress-gce/blob/master/docs/faq/gce.md#how-do-i-disable中所述-gce 入口控制器
推荐阅读
- javascript - 如何创建特定于角色的表情符号
- c++ - 为什么这个程序占用太多内存?
- api - 如何在 Flutter 中使用 Future 和 Uri.Https 构造函数进行 API 调用
- android - 硬件键在 Flutter 上显示屏幕键盘
- git - 如何重命名在其子目录中有子模块的 git 文件夹
- javascript - 使用 Webpack 动态导入命名导出时是否会发生树抖动?
- sqlbase - LONG VARCHAR - 从表读取到前面 (C#) 然后将值插入/更新到表
- javascript - 'app-element' 不是 Angular 中的已知元素
- r - R 中的 qnorm(0.05)
- mysql - MYSQL:排除同一天内重复的扫描日志