[英]What exactly does nginx.ingress.kubernetes.io/rewrite-target: /$1 mean in minikube annotation?
[英]Using nginx.ingress.kubernetes.io/rewrite-target gives “default backend - 404”
我有一个在 kubernetes 中运行的应用程序,我可以从我的浏览器访问集群外部:
http://myapp.internal/myapp/content
使用以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
app.kubernetes.io/instance: myapp
app.kubernetes.io/name: myapp
name: myapp
namespace: samples
spec:
rules:
- host: myapp.internal
http:
paths:
- backend:
serviceName: myapp
servicePort: 8080
path: /myapp/content
status:
loadBalancer:
ingress:
- {}
现在我想访问它:
相反,但没有修改我的应用程序(目前这不是一个选项)。
基于:
https://kubernetes.github.io/ingress-nginx/examples/rewrite/
看来我可以这样做:
nginx.ingress.kubernetes.io/rewrite-target: /myapp/content
所以我更新了我的入口,看起来像这样:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /myapp/content
labels:
app.kubernetes.io/instance: myapp
app.kubernetes.io/name: myapp
name: myapp
namespace: samples
spec:
rules:
- host: myapp.internal
http:
paths:
- backend:
serviceName: myapp
servicePort: 8080
path: /content
status:
loadBalancer:
ingress:
- {}
我现在假设当我输入时:
在我的浏览器中,上面的rewrite-target
规则然后将其转换为:
http://myapp.internal//myapp/content
它实际上是这样做的。 但我没有看到我的内容,而是得到:
default backend - 404
基本上我需要这个例子的反面:
https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite
所以原始示例说:
rewrite.bar.com/something/new rewrites to rewrite.bar.com/new
我需要的地方:
rewrite.bar.com/new rewrites to rewrite.bar.com/something/new
我错过了什么?
实际上你不需要设置nginx.ingress.kubernetes.io/rewrite-target: /myapp/content
。 了解流程,通过路径/myapp/content
您正在访问myapp
服务,因此您应该只替换路径(因为您想重定向路径) path: /content
,它会正常工作。 现在,如果您点击/content
路径,那么它将 go 到相同的服务(名为myapp
),就像之前的/myapp/content
一样。
yaml 应该是这样的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
app.kubernetes.io/instance: myapp
app.kubernetes.io/name: myapp
name: myapp
namespace: samples
spec:
rules:
- host: myapp.internal
http:
paths:
- backend:
serviceName: myapp
servicePort: 8080
path: /content
status:
loadBalancer:
ingress:
实际上您的问题并不清楚,您想点击http://myapp.internal/content并重定向到http://myapp.internal/myapp/content吗? If it is what you are looking then it's not possible by changing ingress, because your ingresd will match till http://myapp.internal and rest of the part /content will go to your service backed pod, now if in your service backed pod你有 myapp/content 那么你如何发送内容来获得它呢?
您可以做的一件事是:运行一个 pod,您需要在其中使用/content
路径运行另一个应用程序,它只会重定向到myapp/content
pod,这两个 pod 都可以由myapp
服务支持
我想你会奏效的。 重写目标是指应重定向流量的 URL。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/app-root: /myapp/content
labels:
app.kubernetes.io/instance: myapp
app.kubernetes.io/name: myapp
name: myapp
namespace: samples
spec:
rules:
- host: myapp.internal
http:
paths:
- backend:
serviceName: myapp
servicePort: 8080
path: /content
status:
loadBalancer:
ingress:
- {}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.