我部署了一个名为“web-server-service”的测试服务。它连接到一个容器,当它工作时,它只在屏幕上显示一条消息(如浏览器等):“It works!". Purley作为连通性测试。
Ingress控制器= Nginx。所有这些都在AWS中运行。
我已经设置了一个入口控制器并创建了一个入口资源
apiVersion: v1
kind: Namespace
metadata:
name: web
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-server
namespace: web
spec:
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: httpd
image: httpd:2.4.48-alpine3.14
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: web-server-service
namespace: web
spec:
selector:
app: web
ports:
- protocol: TCP
port: 5000
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-server-ingress
namespace: web
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: nginx
rules:
- host: somehost.com
http:
paths:
- path: / #this works
pathType: Prefix
backend:
service:
name: web-server-service
port:
number: 5000
- path: /test #this does not work. returns 404
pathType: Prefix
backend:
service:
name: web-server-service
port:
number: 5000
我遇到的问题是,只要我将路径保持为“/”,那么当我通过浏览器、curl等进行连接时,它就可以工作。但一旦我实际添加了一个不同的路径(如“/test”),它就会发送回404。这几乎就像它在执行poxy_pass时将该路径添加到proxy_path url的末尾,使其无法找到正确的目的地。
我希望它像一个代理一样将请求发送到一个服务。在这种情况下,它是同一个服务,但最终将是不同的服务正在运行。
使用Rewrite:
我知道有一些重写功能,但我无法让它工作。它仍然返回相同的404。这是我尝试的ingress配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-server-ingress
namespace: web
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: somehost.com
http:
paths:
- path: / #this works
pathType: Prefix
backend:
service:
name: web-server-service
port:
number: 5000
- path: /test(/|$)(.*) #this still does not work. returns 404
pathType: Prefix
backend:
service:
name: web-server-service
port:
number: 5000
也许我的重写是不正确的。
我实际上只是希望它将请求沿着给服务,而不是在传递时添加任何路径。我希望“/”和“/test”的路径都能够显示“It works!”消息。
有谁知道我做错了什么吗?谢谢
1条答案
按热度按时间5lwkijsr1#
调试步骤:
1.检查您的入口控制器pod日志,看看它实际上是在后台发出的请求,由于你得到404。
详细介绍了w.r.t. Ingress,以获得重写目标功能沿着用例
在这个入口定义中,
(.*)
捕获的任何字符都将被分配给占位符$2
,然后将其用作rewrite-target注解中的参数。例如,上述入口定义将导致以下重写:
来源:https://github.com/kubernetes/ingress-nginx/tree/main/docs/examples/rewrite