如何配置 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
之间的一些差异。
我有一个 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
之间的一些差异。