Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes重写目标路径以追加匹配路径_Kubernetes_Kubernetes Helm_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

Kubernetes重写目标路径以追加匹配路径

Kubernetes重写目标路径以追加匹配路径,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.

我正在使用OSS
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
    (对于数值)
    pathType
    在v1中不再具有默认值;“精确”、“前缀”或 必须在其他入口API更新中指定“特定于实现”
  • 后端现在可以是资源或服务后端
  • path
    不再需要是有效的正则表达式(#89778, @cmluciano)[SIG API机械、应用程序、CLI、网络和测试]
如果我想用匹配的正则表达式创建重写规则
/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
    (对于数值)
    pathType
    在v1中不再具有默认值;“精确”、“前缀”或 必须在其他入口API更新中指定“特定于实现”
  • 后端现在可以是资源或服务后端
  • path
    不再需要是有效的正则表达式(#89778, @cmluciano)[SIG API机械、应用程序、CLI、网络和测试]