如何配置 gce 路由路径(Nginx 中的 rewrite-target)

How to configure gce to route paths (rewrite-target in Nginx)

我有一个 Kibana,它以前 运行 位于使用此入口配置的 NGINX 入口控制器后面:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: es-kibana-ing
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: HTTPS
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /kibana(/|$)(.*)
            pathType: Prefix
            backend:
              serviceName: es-kibana-svc
              servicePort: 443
  tls: 
    - hosts:
      - example.com
      secretName: example-tls

使用此配置,您必须转到 www.example.com/kibana 才能访问 kibana。 从那时起我们迁移到 GCP,现在我正在尝试使用 GCE 入口控制器实现相同的目标。现在我想出了如何在路径“/*”上提供kibana:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: es-kibana-ing
  annotations:
    kubernetes.io/ingress.class: gce
    kubernetes.io/ingress.global-static-ip-name: kibana-static-ip
    networking.gke.io/managed-certificates: managed-cert
spec:
  rules:
    - host: "example.com"
      http:
        paths:
          - path: /*
            pathType: ImplementationSpecific
            backend:
              service:
                name: es-kibana-svc
                port:
                  number: 443

相反,我想在 /kibana 上提供 Kibana(与之前的 Nginx 配置一样),但我找不到 gce 控制器的 rewrite-target 等价物。知道如何做到这一点吗?

您似乎使用了不同的 NGINX 入口控制器,因此注释无法按预期工作。您可能会找到差异的解释 here.

此外 this closed GitHub issue 似乎与您的非常相似,因此希望您可以尝试使用此处提到的解决方案。

如果我明白你想要实现什么,你不能使用 GCE Ingress 来做到这一点,你需要强制执行 Nginx Ingress

Rewrite Nginx Ingress 的行为无法被 GCE Ingress 复制。正如我在评论部分提到的,Nginx Ingress 包含的功能比 GCE Ingress 多得多,例如 rewrite/capture groups 或服务类型要求(GCE 中的 NodePort,GCE 中的 ClusterIP 或 NodePort) Nginx).

使用 GCE Ingress 可以实现一些静态路径规则,例如 this example。类似的东西:

  rules:
    - http:
        paths:
        - path: /hello
          backend:
            serviceName: hello-svc
            servicePort: 8080
        - path: /hello-v2
          backend:
            serviceName: hello-v2-svc
            servicePort: 8080
        - path: /kibana
          backend:
            serviceName: kibana
            servicePort: 443
        - path: /randomsvc
          backend:
            serviceName: randomsvc
            servicePort: 8080

但是,根据您的评论我了解到:

I just want to replicate the behavior that I described for Nginx Ingress, that was allowing me to access my application through '/kibana' using the rewrite-target feature.

Rewrite 行为是特定的,无法在 GCE Ingress 上复制。自 2018 年以来,有人请求将 rewrite 功能添加到 GCE Ingress,但它仍然是开放的。有关它的更多详细信息,您可以找到 here.

您可以在 this guide 中找到两者 Ingress 之间的一些差异。