如何配置gce来路由路径(在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: /$2
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入口控制器来实现同样的目的。现在,我想好了如何在";/*":

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配置一样(,但我找不到与rewrite-target等效的gce控制器。知道怎么做吗?

如果我理解您想要实现的目标,那么您不能使用GCE Ingress来实现,您需要强制执行Nginx Ingress

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

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

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

然而,正如我从你的评论中所理解的:

我只想复制我为Nginx Ingress描述的行为,它允许我使用重写目标功能通过"/kibana"访问我的应用程序。

Rewrite行为是特定的,不能在GCE Ingress上复制。自2018年以来,有人请求向GCE Ingress添加rewrite功能,但它仍然开放。你可以在这里找到更多关于它的详细信息。

您可以在本指南中找到两个Ingress之间的一些差异。

您可能使用了不同的NGINX入口控制器,因此注释无法按预期工作。你可以在这里找到差异的解释。

另外,这个关闭的GitHub问题似乎与您的问题非常相似,所以希望您可以尝试使用上面提到的解决方案。

相关内容

  • 没有找到相关文章

最新更新