入口控制器和Google kubernetes

时间:2019-10-14 07:33:46

标签: kubernetes google-cloud-platform google-kubernetes-engine

我已经在Google Cloud的Kubernetes集群中创建了一个入口资源。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gordion
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.global-static-ip-name: gordion-ingress
    networking.gke.io/managed-certificates: gordion-certificate,gordion-certificate-backend
spec:
  rules:
  - host: backend.gordion.io
    http:
      paths:
      - path: /
        backend:
          serviceName: backend
          servicePort: 80

一切正常。但是,我还没有创建任何ingress-controllerthe official docs state必须拥有它。

  

您必须具有一个入口控制器才能满足入口。只要   创建Ingress资源无效。

那么,如果我的路由确实有效,那么我的入口控制器在哪里?如何查看其配置?

3 个答案:

答案 0 :(得分:2)

在GKE中,如果未指定kubernetes.io/ingress.class: nginx批注,则默认情况下将使用GCE L7负载平衡器控制器(GLBC)(实际上等效于设置kubernetes.io/ingress.class: gce)。该控制器将自动配置,并将依赖GCP的全局HTTP负载平衡器。

您可以在GLBC GitHub's pagein this How-To article上找到有关此主题的更多信息。

答案 1 :(得分:1)

是的,如果您为它提供NodePort服务和后面的服务,它的入口将像这样工作……但是您只能创建一个LoadBalancer服务并获得相同的结果。

如果您没有任何入口控制器,那么您的某些配置就不好了,因为您正在引用某些nginx入口控制器配置(重写)。

入口控制器的目的是为群集内的多个应用程序平衡HTTP流量,这意味着,您只能为多个域/路径创建一个提供程序(此处为GCP)LB。这样一来,您就可以进行一些操作,而不必为每个应用程序都创建多个公共IP和LB资源。

在您提到的前提条件中发布的文档中,提供了可用解决方案的列表,例如nginx-ingress控制器,traefik。...

如何使用它们:

  • 首先像您一样创建一个入口,删除nginx重写并将*放入主机(例如,这是默认的conf)
  • 控制器启动后,对于每个需要访问互联网的应用,请使用您的特定于入口的注释创建一个入口。

答案 2 :(得分:1)

在Google Kubernetes Engine(GKE)中,当您创建Ingress对象时,内置的GKE Ingress控制器将负责创建符合您的Ingress及其服务的适当的HTTP(S)负载均衡器。有关更多信息,请查看此Google Cloud Document,有关“使用Ingress进行HTTP(S)负载平衡”。