【发布时间】: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