Kubernetes Ingress 配置重写问题
Kubernetes Ingress configuration rewrite problem
我正在创建一个配置来在 AWS 上的 Kubernetes 集群中托管一些应用程序。我有两个不同的应用程序,有单独的 service/pod/selector 但我想暂时通过一个入口公开它们。
所以我创建了以下入口控制器
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /foo
backend:
serviceName: foo
servicePort: 8080
- path: /bar
backend:
serviceName: bar
servicePort: 8080
并且入口从 AWS 获取 ELB 没有任何问题,但是当我尝试浏览应用程序时(Java 应用程序使用 Tomcat 应用程序服务器)我总是收到以下页面
这是经典的旧 Tomcat 欢迎页面,但每个请求总是 returns index.html(未加载 css/img)并且如果我尝试使用正确的上下文我收到此页面的应用程序路径。
如果我使用服务 (LoadBalancer) 公开应用程序,我可以在没有这些问题的情况下使用它,所以我认为入口配置有问题。
有什么想法吗?
更新
如果我像这样使用单一路径的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: foo
servicePort: 8080
使用 INGRESSHOST url 我可以看到带有 img/css 的 Tomcat 主页,如果我浏览到 INGRESSHOST/APPCONTEXT 我可以毫无问题地使用该应用程序
如果您最近更改了 nginx-ingress 控制器的版本,那么原因可能是最近对其进行了更改。现在它使用正则表达式重写规则,也许你的重写目标总是被重写为“/”。我认为这些更改是在一月份的 0.22 版本中引入的。
您的入口新的正确语法是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /foo(.*)
backend:
serviceName: foo
servicePort: 8080
- path: /bar(.*)
backend:
serviceName: bar
servicePort: 8080
我正在创建一个配置来在 AWS 上的 Kubernetes 集群中托管一些应用程序。我有两个不同的应用程序,有单独的 service/pod/selector 但我想暂时通过一个入口公开它们。
所以我创建了以下入口控制器
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /foo
backend:
serviceName: foo
servicePort: 8080
- path: /bar
backend:
serviceName: bar
servicePort: 8080
并且入口从 AWS 获取 ELB 没有任何问题,但是当我尝试浏览应用程序时(Java 应用程序使用 Tomcat 应用程序服务器)我总是收到以下页面
这是经典的旧 Tomcat 欢迎页面,但每个请求总是 returns index.html(未加载 css/img)并且如果我尝试使用正确的上下文我收到此页面的应用程序路径。
如果我使用服务 (LoadBalancer) 公开应用程序,我可以在没有这些问题的情况下使用它,所以我认为入口配置有问题。
有什么想法吗?
更新
如果我像这样使用单一路径的入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: foo
servicePort: 8080
使用 INGRESSHOST url 我可以看到带有 img/css 的 Tomcat 主页,如果我浏览到 INGRESSHOST/APPCONTEXT 我可以毫无问题地使用该应用程序
如果您最近更改了 nginx-ingress 控制器的版本,那么原因可能是最近对其进行了更改。现在它使用正则表达式重写规则,也许你的重写目标总是被重写为“/”。我认为这些更改是在一月份的 0.22 版本中引入的。
您的入口新的正确语法是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /foo(.*)
backend:
serviceName: foo
servicePort: 8080
- path: /bar(.*)
backend:
serviceName: bar
servicePort: 8080