gke nginx ingress创建额外的负载均衡器

时间:2019-01-26 18:55:54

标签: nginx kubernetes kubernetes-ingress google-kubernetes-engine 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作为入口的一切东西。

下面的屏幕截图以红色分别显示了我们的qa和prod env的两个意外的LB和蓝色的两个nginx入口LB。

gcplb

kubectl get services的输出

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服务视图的屏幕截图

ingress

这是预期的吗?

我是否错过任何配置以防止创建此额外的负载均衡器?

2 个答案:

答案 0 :(得分:1)

在GCP GKE上,默认情况下启用了gcp入口控制器,并且即使指定了.class,也将始终在任何入口定义中导致新的LB。

https://github.com/kubernetes/ingress-nginx/issues/3703

因此,要解决此问题,我们应该按照https://github.com/kubernetes/ingress-gce/blob/master/docs/faq/gce.md#how-do-i-disable-the-gce-ingress-controller

的说明从集群中删除gcp入口控制器

答案 1 :(得分:0)

在GKE集群上创建部署时,有两种方法可以公开它:

  1. 使用类型为LoadBalancer的服务并将其公开-这将 创建一个TCP负载均衡器
  2. 将服务创建为NodePort或集群 IP并将其公开为Ingress-这将创建HTTP负载平衡器

如果您可以在Load Balancer中看到它们两者,则意味着您可能已经创建了服务类型LoadBalancer,然后将其公开为Ingress。您正在打开要通过服务和Ingress从两个不同IP访问的相同部署。要确认此尝试,请执行以下操作:

$ kubectl get ingress
$ kubectl get svc

从这2个命令中您将获得2 ip,它们都将向您显示同一页面。

更好的配置方法是拥有服务类型NodePort,并将该服务公开为入口。这特别有用,因为您可以使用同一入口公开更多服务。

通过这种方式,您可以节省暴露的IP数量(并通过不使用多个负载均衡器节省资金)。