我的ASP.NET Core Web应用程序在启动时使用基本路径,例如,

app.UsePathBase("/app1");
因此,该应用程序将在基本路径上运行。例如,如果应用程序在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”虚拟路径上运行。但是 app1 应用程序将可在“ localhost / app1 / app1 ”上访问。
所以我想知道是否有任何方法可以在入口中将“ localhost / app1 ”请求路由到容器应用程序“ 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

关于docker - 在kubernetes上通过Nginx Ingress中的服务公开容器中的基本路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64645240/

10-09 21:34