Py学习  »  NGINX

gke nginx入口创建附加负载平衡器

bitgandtter • 6 年前 • 1960 次点击  

我有一组要作为入口负载均衡器公开的服务。我选择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。

gcplb

kubectl get服务的输出

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

这是预期的吗?

我是否错过了阻止为创建此额外负载平衡器的任何配置?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30758
文章 [ 2 ]  |  最新文章 6 年前
Ivan
Reply   •   1 楼
Ivan    6 年前

当您在GKE集群上创建部署时,有两种可能公开它:

  1. 使用带有类型LoadBalancer的服务并公开它-这将 创建TCP负载平衡器
  2. 将服务创建为节点报表或群集 IP并将其作为 Ingress -这将创建HTTP负载平衡器

如果您可以在负载平衡器中看到这两个类型,这意味着您可能已经创建了一个服务类型的负载平衡器,然后将其公开为入口。您正在打开同一个部署,通过服务和入口从两个不同的IP进行访问。要确认此操作,请尝试:

$ kubectl get ingress
$ kubectl get svc

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

更好的配置方法是使用服务类型 NodePort ,并将该服务作为入口公开。这尤其有用,因为您可以使用相同的入口来公开更多的服务。

这样可以节省暴露的IP数量(并且不使用多个负载均衡器来节省资金)。

bitgandtter
Reply   •   2 楼
bitgandtter    6 年前

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

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-the-gce-ingress-controller