簡體   English   中英

通過 Kubernetes 上的 nginx 入口中的服務公開容器中的基本路徑

[英]Expose basepath in container through service in nginx ingress on kubernetes

我的 ASP.NET Core Web 應用程序在啟動時使用 basepath,例如,

app.UsePathBase("/app1");

所以應用程序將在 basepath 上運行。 例如,如果應用程序在 localhost:5000 上運行,那么app1將可以在“ localhost:5000/app1 ”上訪問。

所以在 nginx ingress 或任何 ingress 中,我們可以通過 service 將整個容器暴露給 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 ' ingress 中的 basepath。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM