Kubernetes重写目标路径以追加匹配路径
我正在使用OSSKubernetes重写目标路径以追加匹配路径,kubernetes,kubernetes-helm,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Helm,Kubernetes Ingress,Nginx Ingress,我正在使用OSSingress nginxingress控制器,并试图创建一个重写目标规则,以便在匹配字符串之前附加一个路径字符串 如果我想用正则表达式创建一个与/matched/path匹配的重写规则,并将其重写为/prefix/matched/path,我该怎么做呢 我尝试过以下方法,但效果不佳,我只是对入口定义的语法感到困惑: metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.
ingress nginx
ingress控制器,并试图创建一个重写目标规则,以便在匹配字符串之前附加一个路径字符串
如果我想用正则表达式创建一个与/matched/path
匹配的重写规则,并将其重写为/prefix/matched/path
,我该怎么做呢
我尝试过以下方法,但效果不佳,我只是对入口定义的语法感到困惑:
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- path: /(/prefix/)(/|$)(/matched/path)(.*)
backend:
serviceName: webapp1
如果我想用匹配的正则表达式创建重写规则
/matched/path
并将其重写为/prefix/matched/path
,怎么可能
我能做到吗
为了实现这一点,您必须将/前缀
添加到重写目标
中。
下面是一个使用k8s v1.18的入口语法的工作示例:
apiVersion:networking.k8s.io/v1beta1
种类:入口
元数据:
名称:示例-ingress-v118
注释:
nginx.ingres.kubernetes.io/rewrite-target:/prefix/$1
规格:
规则:
http:
路径:
-路径:/(匹配/路径/?*)
后端:
服务名称:测试
服务端口:80
由于新入口的语法在1.19中发生了变化(请参阅和结尾的一些小信息),我还举了一个例子:
apiVersion:networking.k8s.io/v1
种类:入口
元数据:
名称:示例-ingress-v119
注释:
nginx.ingres.kubernetes.io/rewrite-target:/prefix/$1
规格:
规则:
-http:
路径:
-路径:/(匹配/路径/?*)
路径类型:前缀
后端:
服务:
名称:测试
端口:
电话:80
以下是http echo server的测试:
➜ ~ curl 172.17.0.4/matched/path
{
"path": "/prefix/matched/path",
"headers": {
"host": "172.17.0.4",
"x-request-id": "011585443ebc6adcf913db1c506abbe6",
"x-real-ip": "172.17.0.1",
"x-forwarded-for": "172.17.0.1",
"x-forwarded-host": "172.17.0.4",
"x-forwarded-port": "80",
"x-forwarded-proto": "http",
"x-scheme": "http",
"user-agent": "curl/7.52.1",
"accept": "*/*"
},
此规则还将忽略请求末尾的/
:
➜ ~ curl 172.17.0.4/matched/path/
{
"path": "/prefix/matched/path/",
"headers": {
"host": "172.17.0.4",
"x-request-id": "0575e9022d814ba07457395f78dbe0fb",
"x-real-ip": "172.17.0.1",
"x-forwarded-for": "172.17.0.1",
"x-forwarded-host": "172.17.0.4",
"x-forwarded-port": "80",
"x-forwarded-proto": "http",
"x-scheme": "http",
"user-agent": "curl/7.52.1",
"accept": "*/*"
},
值得一提的是,新入口语法中的一些显著差异/变化:
->spec.backend
spec.defaultBackend
->serviceName
service.name
->servicePort
(用于字符串值)service.port.name
->servicePort
(对于数值)service.port.number
在v1中不再具有默认值;“精确”、“前缀”或 必须在其他入口API更新中指定“特定于实现”pathType
- 后端现在可以是资源或服务后端
不再需要是有效的正则表达式(#89778, @cmluciano)[SIG API机械、应用程序、CLI、网络和测试]path
/matched/path
并将其重写为/prefix/matched/path
,怎么可能
我能做到吗
为了实现这一点,您必须将/前缀
添加到重写目标
中。
下面是一个使用k8s v1.18的入口语法的工作示例:
apiVersion:networking.k8s.io/v1beta1
种类:入口
元数据:
名称:示例-ingress-v118
注释:
nginx.ingres.kubernetes.io/rewrite-target:/prefix/$1
规格:
规则:
http:
路径:
-路径:/(匹配/路径/?*)
后端:
服务名称:测试
服务端口:80
由于新入口的语法在1.19中发生了变化(请参阅和结尾的一些小信息),我还举了一个例子:
apiVersion:networking.k8s.io/v1
种类:入口
元数据:
名称:示例-ingress-v119
注释:
nginx.ingres.kubernetes.io/rewrite-target:/prefix/$1
规格:
规则:
-http:
路径:
-路径:/(匹配/路径/?*)
路径类型:前缀
后端:
服务:
名称:测试
端口:
电话:80
以下是http echo server的测试:
➜ ~ curl 172.17.0.4/matched/path
{
"path": "/prefix/matched/path",
"headers": {
"host": "172.17.0.4",
"x-request-id": "011585443ebc6adcf913db1c506abbe6",
"x-real-ip": "172.17.0.1",
"x-forwarded-for": "172.17.0.1",
"x-forwarded-host": "172.17.0.4",
"x-forwarded-port": "80",
"x-forwarded-proto": "http",
"x-scheme": "http",
"user-agent": "curl/7.52.1",
"accept": "*/*"
},
此规则还将忽略请求末尾的/
:
➜ ~ curl 172.17.0.4/matched/path/
{
"path": "/prefix/matched/path/",
"headers": {
"host": "172.17.0.4",
"x-request-id": "0575e9022d814ba07457395f78dbe0fb",
"x-real-ip": "172.17.0.1",
"x-forwarded-for": "172.17.0.1",
"x-forwarded-host": "172.17.0.4",
"x-forwarded-port": "80",
"x-forwarded-proto": "http",
"x-scheme": "http",
"user-agent": "curl/7.52.1",
"accept": "*/*"
},
值得一提的是,新入口语法中的一些显著差异/变化:
->spec.backend
spec.defaultBackend
->serviceName
service.name
->servicePort
(用于字符串值)service.port.name
->servicePort
(对于数值)service.port.number
在v1中不再具有默认值;“精确”、“前缀”或 必须在其他入口API更新中指定“特定于实现”pathType
- 后端现在可以是资源或服务后端
不再需要是有效的正则表达式(#89778, @cmluciano)[SIG API机械、应用程序、CLI、网络和测试]path