我有一个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问题似乎与您的问题非常相似,所以希望您可以尝试使用上面提到的解决方案。