是否可以在没有默认后端的情况下创建 GKE Ingress?

noa*_*amt 4 google-cloud-platform google-kubernetes-engine kubernetes-ingress

Ingress文档指出:

没有规则的 Ingress 将所有流量发送到单个默认后端。默认后端通常是 Ingress 控制器的配置选项,并且未在您的 Ingress 资源中指定。

如果没有主机或路径与 Ingress 对象中的 HTTP 请求匹配,则流量将路由到您的默认后端。

我管理的所有 GKE Ingress 对象都指向特定后端,例如:

spec:
  rules:
    - host: my.host.com
      http:
        paths:
          - path: /*
            backend:
              serviceName: the service
              servicePort: 1337
Run Code Online (Sandbox Code Playgroud)

是否可以在没有默认后端的情况下创建这些 Ingress 对象?如果是这样,会产生什么后果?

Nic*_*ick 6

是否可以在没有默认后端的情况下创建这些 Ingress 对象?如果是这样,会产生什么后果?

简短的回答是:,如果没有“默认后端”作为最后的手段,你就无法创建 Ingress。默认后端是 kubernetes 默认行为的一部分。

此线程中解释了该行为。

Ingress 定义中没有匹配后端的所有请求都将转发到“默认后端”(“请求 - 响应”逻辑,无孤立请求)。

我们可以从以下内容看出:cluster/addons/cluster-loadbalancing/glbc/default-svc-controller.yaml

说:

    # Any image is permissible as long as:
    # 1. It serves a 404 page at /
    # 2. It serves 200 on a /healthz endpoint
    image: k8s.gcr.io/ingress-gce-404-server-with-metrics-amd64:v1.6.0
Run Code Online (Sandbox Code Playgroud)

这就是为什么您可以为部署放置自己的自定义映像kube-system/l7-default-backend

您可以在以下位置找到更多详细信息:

  • 集群/gce/manifests/glbc.manifest
  • 集群/addons/cluster-loadbalancing/glbc/default-svc.yaml

文件。

希望这些信息能够帮助您了解为什么会有 adefault backend以及它是如何工作的。