【发布时间】:2021-01-08 18:20:28
【问题描述】:
我有以下工作正常的 kubernetes 入口配置(nginx 入口控制器)。
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: test01-api-ingress
namespace: test01
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: test01-new-api-1
servicePort: 80
path: /test01/api1
- backend:
serviceName: test01-new-api-2
servicePort: 80
path: /test01/api2
以上创建如下配置(大部分省略)
location ~* "^/test01/api2\/?(?<baseuri>.*)" {
set $namespace "test01";
set $ingress_name "test01-api-ingress";
set $service_name "test01-new-api-2";
set $service_port "80";
set $location_path "/test01/api2";
rewrite "(?i)/test01/api2/(.*)" /$1 break;
rewrite "(?i)/test01/api2$" / break;
proxy_pass http://upstream_balancer;
proxy_redirect off;
}
location ~* "^/test01/api1\/?(?<baseuri>.*)" {
set $namespace "test01";
set $ingress_name "test01-api-ingress";
set $service_name "test01-new-api-1";
set $service_port "80";
set $location_path "/test01/api1";
rewrite "(?i)/test01/api1/(.*)" /$1 break;
rewrite "(?i)/test01/api1$" / break;
proxy_pass http://upstream_balancer;
proxy_redirect off;
}
对于 nginx 入口控制器的升级,以下配置应该更改(不知何故)。但是当我应用它时,入口配置:
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite "(?i)/test01/api1/(.*)" /$1 break;
rewrite "(?i)/test01/api1$" / break;
rewrite "(?i)/test01/ap21/(.*)" /$1 break;
rewrite "(?i)/test01/ap21$" / break;
name: test01-api-ingress
namespace: test01
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: test01-new-api-1
servicePort: 80
path: /test01/api1
- backend:
serviceName: test01-new-api-2
servicePort: 80
path: /test01/api2
我收到以下内容,但无法正常工作,因为它在两个位置都添加了 api1/api2。
location ~* "^/test01/api2" {
set $namespace "test01";
set $ingress_name "test01-api-ingress";
set $service_name "test01-new-api-2";
set $service_port "80";
set $location_path "/test01/api2";
rewrite "(?i)/test01/api1/(.*)" /$1 break;
rewrite "(?i)/test01/api1$" / break;
rewrite "(?i)/test01/ap21/(.*)" /$1 break;
rewrite "(?i)/test01/ap21$" / break;
proxy_pass http://upstream_balancer;
proxy_redirect off;
}
location ~* "^/test01/api1" {
set $namespace "test01";
set $ingress_name "test01-api-ingress";
set $service_name "test01-new-api-1";
set $service_port "80";
set $location_path "/test01/api1";
rewrite "(?i)/test01/api1/(.*)" /$1 break;
rewrite "(?i)/test01/api1$" / break;
rewrite "(?i)/test01/ap21/(.*)" /$1 break;
rewrite "(?i)/test01/ap21$" / break;
proxy_pass http://upstream_balancer;
proxy_redirect off;
}
关于配置应该如何的任何想法?如何将其拆分为相关位置? 谢谢。
【问题讨论】:
-
你好。要将您的
configuration-snippets放在特定位置,您可以根据使用的annotations拆分Ingress资源。我将跟进如何实现这一目标的答案。
标签: kubernetes kubernetes-ingress nginx-ingress