为应用程序 运行 context-root 编写入口规则

write ingress rule for application running with context-root

我在 k8s 中部署了一个 Web 应用及其相应的后端服务。它们通过服务公开如下:

  1. Web 应用程序 -> http://1.2.3.4:8080/webapp/login
  2. 后端 -> http://5.6.7.8:8081/backend-service/login

我已经为这些服务配置了入口资源,但事实证明 NGINX 入口控制器在重写 url 时跳过了上下文根部分,这使得我的服务在通过入口部署时不可用。下面是我的入口资源:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  namespace: default
  name: gateway-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/use-regex: true
spec:
  rules:
    - http:
        paths:
          - path: /webapp/*
            backend:
              serviceName: webapp-service
              servicePort: 8080
          - path: /backend-service/*
            backend:
              serviceName: backend-service
              servicePort: 8081


**Output of : kubectl describe ingress gateway-ingress**

Name:             gateway-ingress
Namespace:        default
Address:          test.elb.us-east-2.amazonaws.com
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host  Path  Backends
  ----  ----  --------
  *     
        /webapp/*                 webapp-service:8080 (1.2.3.4:8080)
        /backend-service/*        backend-service:8081 (5.6.7.8:8081)

因此,当我使用 http://test.elb.us-east-2.amazonaws.com/webapp/login 访问我的应用程序时,我收到 404 not found。如何正确配置入口资源?

应用程序上下文删除是由 rewrite-target 注释引起的。如果不需要,请将其删除。