在kubernetes上通过Nginx Ingress中的服务公开容器中的基本路径

时间:2020-11-02 12:02:20

标签: docker nginx kubernetes kubernetes-ingress nginx-ingress

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

app.UsePathBase("/app1");

因此,该应用程序将在基本路径上运行。例如,如果应用程序在localhost:5000上运行,则 app1 将可在' localhost:5000 / 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 ”中的基本路径。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,现在可以在/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