【问题标题】:Kubernetes Ingress to Pod pathing question (Nginx Ingress)Kubernetes Ingress to Pod 路径问题(Nginx Ingress)
【发布时间】:2021-07-07 04:48:39
【问题描述】:

我是 Kubernetes 的新手,我正在尝试弄清楚如何让同一容器映像的多个 pod 在我的集群中的不同路径上运行。我在下面粘贴了我的 k8s 清单。在这种情况下,我的应用程序(网站)正在侦听根路径。但是,当 Ingress 匹配它并将其转发到我的 Pod 时,它正在请求 /app 路径,该路径返回 404,因为我的应用程序再次在根目录 (/) 进行侦听。我可以让应用程序收听/app,但它需要重建该图像并限制我在集群内的不同路径上运行完全相同的图像的能力。例如,我希望在/app2 上运行相同网站,而无需仅为该路径重建特殊图像。

我觉得答案与nginx.ingress.kubernetes.io/rewrite-target annotation 有关,但我尝试了它的各种排列,但我无法弄清楚。我觉得这是我想念的简单的东西。

这是我的部署清单:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: application
spec:
  replicas: 1
  selector:
    matchLabels:
      app: application
  template:
    metadata:
      labels:
        app: application
    spec:
      containers:
        - name: application
          image: foo-app:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 80
              name: "http"

这是我的服务清单:

apiVersion: v1
kind: Service
metadata:
  name: application-service
spec:
  selector:
    app: application
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort

最后,这是我的入口资源:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: application-service-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.org/mergeable-ingress-type: "minion"
spec:
  rules:
    - host: some-random.elb.us-west-2.amazonaws.com
      http:
        paths:
          - backend:
              serviceName: application-service
              servicePort: 80
            path: /app

【问题讨论】:

  • 您尝试在不同路径上提供服务的应用程序是 Web 应用程序吗?如果答案是肯定的,那么根据网页的构建方式,在与预期不同的路径上提供服务可能不是一个好主意。我的意思是,如果 index.html 例如引用具有绝对路径的 css 或 js 文件,它将不起作用。

标签: kubernetes url-rewriting nginx-ingress


【解决方案1】:

试试这个

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /app/$1
    kubernetes.io/ingress.class: nginx
  name: application-service-ingress
spec:
  rules:
  - host: some-random.elb.us-west-2.amazonaws.com
    http:
      paths:
      - path: /(.*)
        backend:
          serviceName: service-1
          servicePort: 80

【讨论】:

    猜你喜欢
    • 2021-05-15
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 2020-12-12
    相关资源
    最近更新 更多