如何使用 GKE 上的入口映射不匹配的路由

How to map unmatched routes with ingress on GKE

我正在尝试通过将 ingress 对象与我们的 GKE 集群一起使用,在 GCP 上自动配置负载均衡器。

我有三个 GKE 部署,每个部署都可以在端口 8080 上使用具有唯一节点端口的服务。

使用 ingress-fanout.yaml 时,它会创建 4 个后端服务,而不是 yaml 中指定的 3 个。第 4 个服务默认为所有不匹配的路由。我假设第 4 个服务是因为我们不匹配 yaml 中未映射的路由。

如何将不匹配的路由映射到其中一项服务?这可能吗?

这里是ingress-fanout.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fanout-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "our-static-ip"
    ingress.gcp.kubernetes.io/pre-shared-cert: "our-ssl-cert"
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  rules:
  - host: our-website.com
    http:
      paths:
      - path: /*
        backend:
          serviceName: li-frontend
          servicePort: 8080
      - path: /backend/*
        backend:
          serviceName: li-django
          servicePort: 8080
      - path: /notifications/*
        backend:
          serviceName: li-notifications
          servicePort: 8080

更新:我去掉了很多原来的问题,缩小了问题的范围。当运行状况检查开始成功时,旧问题就解决了。

首先,"backends"与您指定的"paths"没有任何关系。 "backends" GCP 控制台上指向您的 GKE 节点池。

Ingress 支持添加默认后端。您可以尝试只搜索 "ingress default backend"。您可以在此处找到相关文档:https://kubernetes.io/docs/concepts/services-networking/ingress/#single-service-ingress

基本上这样做会在没有其他匹配项时设置默认后端:

spec:
  backend:
    serviceName: testsvc
    servicePort: 80
rules:
  [...your stuff here...]