Docker 通过kubernetes上nginx入口中的服务公开容器中的basepath

Docker 通过kubernetes上nginx入口中的服务公开容器中的basepath,docker,nginx,kubernetes,kubernetes-ingress,nginx-ingress,Docker,Nginx,Kubernetes,Kubernetes Ingress,Nginx Ingress,我的ASP.NET核心web应用程序在启动时使用basepath app.UsePathBase("/app1"); 因此,应用程序将在basepath上运行。例如,如果应用程序在localhost:5000上运行,则可以在“localhost:5000/app1”上访问app1” 因此,在nginx入口或任何入口中,我们可以通过服务向kubernetes集群外部公开整个容器 我的kubernetes部署YAML文件如下所示 apiVersion: apps/v1 kind

我的ASP.NET核心web应用程序在启动时使用basepath

app.UsePathBase("/app1");
因此,应用程序将在basepath上运行。例如,如果应用程序在localhost:5000上运行,则可以在“localhost:5000/app1”上访问app1

因此,在nginx入口或任何入口中,我们可以通过服务向kubernetes集群外部公开整个容器

我的kubernetes部署YAML文件如下所示

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app1-deployment
spec:
  selector:
    matchLabels:
      app: app1
  replicas: 1
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
      - name: app1-container
        image: app1:latest
        ports:
        - containerPort: 5001
---
apiVersion: v1
kind: Service
metadata:
  name: app1-service
  labels:
    app: app1
spec:
  type: NodePort
  ports:
  - name: app1-port
    port: 5001
    targetPort: 5001
    protocol: TCP
  selector:
    app: app1
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app1-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      - path: /app1(/|$)(.*)
        backend:
          serviceName: server-service
          servicePort: 5001
上述入口将在“localhost/app1”URL中公开整个容器。因此,应用程序将在“/app1”虚拟路径上运行。但是可以在“localhost/app1/app1上访问app1应用程序


因此,我想知道是否有任何方法可以在ingress中将“localhost/app1”请求路由到basepath in container application”localhost:5001/app1

如果我理解正确,现在可以在
/app1/app1
上访问该应用程序,您希望它可以在
/app1
上访问

为此,请不要使用“重写”:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: app1-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - http:
      paths:
      - path: /app1
        backend:
          serviceName: server-service
          servicePort: 5001

你试过不使用重写吗?