tomcat - Kubernetes Ingress 配置重写问题

标签 tomcat kubernetes kubernetes-ingress nginx-ingress amazon-eks

我正在创建一个配置来在 AWS 上的 Kubernetes 集群中托管一些应用程序。我有两个不同的应用程序,具有单独的服务/pod/选择器,但我暂时想通过一个入口公开它们。

所以我创建了以下入口 Controller

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 没有任何问题,但是当我尝试浏览应用程序(使用 Tomcat 应用程序服务器的 Java 应用程序)时,我总是收到以下页面

Tomcat

这是经典的旧 Tomcat 欢迎页面,但每个请求总是返回 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 Controller 的版本,那么原因可能是最近对其进行了更改。现在它使用正则表达式重写规则,也许你的重写目标总是被重写为“/”。我认为这些更改是在一月份的 0.22 版中引入的。

您的入口新的正确语法是:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
      - path: /foo(.*)
        backend:
          serviceName: foo
          servicePort: 8080
      - path: /bar(.*)
        backend:
          serviceName: bar
          servicePort: 8080 

关于tomcat - Kubernetes Ingress 配置重写问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55630746/

相关文章:

java - 在 tomcat 上部署时,logback-spring.xml 不起作用

Spring boot + gradle + tomcat Hello World 应用程序不工作

java - 谷歌云平台 : cannot access Pubsub from Container Engine

nginx - 如何在裸机上使用 hostNetwork 安装 nginx-ingress?

java - 在 Spring.io 中获取 Tomcat StandardContext

java - 是否可以在 Web 应用程序中运行 cron 作业?

kubernetes - kubernetes 如何保证kube proxy 和kubelet 的可靠性?

kubernetes - 如何在 EKS 中通过 api networking.k8s.io/v1 使用 ALB Ingress

kubernetes - 入口路由api前缀问题

kubernetes - Kubernetes AWS EKS无法加载资源:net::ERR_NAME_NOT_RESOLVED