我最近在GKE中设置了一个nginx入口,但该入口无法以某种方式正确地重写目标容器中要解析的微型应用程序(laravel流明)的路径。这些应用程序具有一个称为“测试”的功能,该功能将为“ alpha”和“ beta”打印“ testing one”和“ testing two”。该功能应该可以通过http://<base_url>/public/testing
访问。
入口yaml中定义了两个路径,/alpha/*
和/beta/*
都指向两个服务lumen-alpha-svc
和lumen-beta-svc
。我没有此入口的任何域,因此我未定义入口的“主机”,并且入口仍应可通过GKE为入口提供的外部IP地址进行访问。
我通过访问两个入口路径的http://<external-ip-address>/alpha/public/testing/
测试了入口,并且收到HTTP错误404,但是这件事仍然让我感到困惑。因此,我建立了一个名为path-check-svc
的新服务,并在入口处添加了指向该服务的新路径/check/*
。然后该服务指向一个将打印URL路径的nodejs程序。我通过访问http://<external-ip-address>/check/something/
测试了路径,而nodejs返回了URL路径/check/something/
。这让我更加困惑。由于入口路径是使用/check/*
定义的,以将其重定向到path-check-svc,所以这不会使程序的路径仅捕获到/something/
吗?这使我意识到这是导致流明应用程序中出现http错误404的原因,因为它无法解决http://<external-ip-address>/alpha/public/testing/
,因为流明应用程序不知道/alpha/
是什么。
那么我应该如何定义入口,以便可以将url路径重写为应用程序可以捕获的有效url路径。谢谢。
这是kubernetes的yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: lumen-alpha
labels:
app: lumen-alpha
spec:
selector:
matchLabels:
app: lumen-alpha
template:
metadata:
labels:
app: lumen-alpha
spec:
containers:
- image: husnurrsyafni/lumen-test-alpha:php
name: lumen-test-alpha
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: lumen-beta
labels:
app: lumen-beta
spec:
selector:
matchLabels:
app: lumen-beta
template:
metadata:
labels:
app: lumen-beta
spec:
containers:
- image: husnurrsyafni/lumen-test-beta:php
name: lumen-test-beta
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: lumen-alpha-svc
spec:
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: lumen-alpha
---
apiVersion: v1
kind: Service
metadata:
name: lumen-beta-svc
spec:
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: lumen-beta
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: lumen-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /alpha/*
backend:
serviceName: lumen-alpha-svc
servicePort: 80
- path: /beta/*
backend:
serviceName: lumen-beta-svc
servicePort: 80
答案 0 :(得分:0)
如果要进行nginx.ingress.kubernetes.io/rewrite-target
注释,则需要创建自己的 nginx ingress controller,它是service。
或使用头盔(最好):
helm install stable/nginx-ingress
GKE提供的入口控制器不支持rewrite-target