我在docker桌面下运行kubernetes v1.16。我已经使用helm安装了nginx-ingress控制器v1.7.9。我已经更新了我的hosts文件,使其具有以下条目hedgehog-service
我有一个名为hedgehog-service
的后端服务。
以下入口定义正确地将请求转发到后端。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ml-zoo-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: application.local
http:
paths:
- path: /hedgehog/
backend:
serviceName: hedgehog-service
servicePort: 80
curl application.local/hedgehog
按预期工作并命中后端服务。
然而,为了正确使用后端服务,我需要重写目标,删除url前缀/hedgehog
。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ml-zoo-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: application.local
http:
paths:
- path: /hedgehog(/|$)(.*)
backend:
serviceName: hedgehog-service
servicePort: 80
如此处所示:https://kubernetes.github.io/ingress-nginx/examples/rewrite/#rewrite-target
现在,当I curl application.local/hedgehog/test
时,入口控制器不与后端通信,但根据日志,尝试打开文件
2020/06/23 12:46:48 [error] 708#708: *792 open() "/etc/nginx/html/hedgehog/test" failed (2: No such file or directory), client: 192.168.65.3, server: application.local, request: "GET /hedgehog/test HTTP/1.1", host: "application.local"
192.168.65.3 - - [23/Jun/2020:12:46:48 +0000] "GET /hedgehog/test HTTP/1.1" 404 153 "-" "curl/7.65.3" "-"
下面是etc/nginx/conf.d/default-ml-zoo-ingress
的内容
# configuration for default/ml-zoo-ingress
upstream default-ml-zoo-ingress-application.local-hedgehog-service-80 {
zone default-ml-zoo-ingress-application.local-hedgehog-service-80 256k;
random two least_conn;
server 10.1.0.48:80 max_fails=1 fail_timeout=10s max_conns=0;
}
server {
listen 80;
server_tokens on;
server_name application.local;
location /hedgehog(/|$)(.*) {
proxy_http_version 1.1;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
client_max_body_size 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering on;
proxy_pass http://default-ml-zoo-ingress-application.local-hedgehog-service-80;
}
}
有人知道为什么我的URL没有被重写,请求没有被传递到后端服务吗?
提前感谢!
1条答案
按热度按时间3pvhb19x1#
好吧,在玩了几个小时之后,一旦我写好了这个问题,我的下一个谷歌就找到了答案。
我使用helm安装了nginx,并使用了下面的存储库
stable/nginx-ingress
。但是,根据这个问题,https://github.com/kubernetes/ingress-nginx/issues/5756实际上是一个遗留存储库。我卸载了我的控制器,并将存储库改为ingress-nginx
而且一切似乎都在按预期工作。仍然不确定为什么之前的控制器安装失败,但我可以回去工作:)
编辑:为了帮助其他人,可能会结束在这里-事后我想知道,如果重新安装只是意味着我删除并重新创建了我的入口,这可能已经解决了原来的问题。换句话说,确保您尝试重新创建入口之前,重新安装入口控制器与 Helm 。