Nginx 入口给出 404 找不到任何入口资源



Nginx控制器在本地的任何入口资源设置中都抛出404错误。

nginx-入口控制器设置是根据以下文档中详述的步骤进行的,入口控制器在本地设置中作为节点端口服务公开

https://github.com/nginxinc/kubernetes-ingress/blob/master/docs/installation.md#5-access-the-live-activity-monitoring-dashboard--stub_status-page

以下示例入口资源用于测试入口 香蕉亚姆

kind: Pod
apiVersion: v1
metadata:
name: banana-app
namespace: nginx-ingress
labels:
app: banana
spec:
containers:
- name: banana-app
image: hashicorp/http-echo
args:
- "-text=banana"
---
kind: Service
apiVersion: v1
metadata:
name: banana-service
namespace: nginx-ingress
spec:
selector:
app: banana
ports:
- port: 5678 

苹果亚姆

kind: Pod
apiVersion: v1
metadata:
name: apple-app
namespace: nginx-ingress
labels:
app: apple
spec:
containers:
- name: apple-app
image: hashicorp/http-echo
args:
- "-text=apple"
---
kind: Service
apiVersion: v1
metadata:
name: apple-service
namespace: nginx-ingress
spec:
selector:
app: apple
ports:
- port: 5678 # 

ingressfile.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
namespace: nginx-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /apple
backend:
serviceName: apple-service
servicePort: 5678
- path: /banana
backend:
serviceName: banana-service
servicePort: 5678

以下是服务列表

NAMESPACE       NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
nginx-ingress   apple-service          ClusterIP   10.111.230.109   <none>        5678/TCP                     95m
nginx-ingress   banana-service         ClusterIP   10.102.139.127   <none>        5678/TCP                     95m
nginx-ingress   nginx-ingress          NodePort    10.97.65.187     <none>        80:30207/TCP,443:31031/TCP   6d23h
[root@kube01 ingress]# kubectl get ing
NAME              HOSTS              ADDRESS   PORTS     AGE
example-ingress   *                            80        131m
[root@kube01 ingress]# kubectl describe ing example-ingress
Name:             example-ingress
Namespace:        default
Address:
Default backend:  default-http-backend:80 (<none>)
Rules:
Host  Path  Backends
----  ----  --------
*
/apple    apple-service:5678 (10.244.2.7:5678)
/banana   banana-service:5678 (10.244.1.11:5678)
Annotations:
ingress.kubernetes.io/rewrite-target:  /
Events:                                  <none>

如果我直接按如下方式卷曲 pod,它按预期工作

[root@kube01 ingress]# curl http://10.244.2.7:5678/apple
apple
[root@kube01 ingress]# curl http://10.244.1.11:5678/banana
banana
[root@kube01 ingress]#

但是,如果我尝试通过 Nodeport 入口控制器访问它,我总是找不到,如下所示

[root@kube01 ingress]# curl http://xx.xx.xx.193:30207/apple
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.2</center>
</body>
</html>
[root@kube01 ingress]# curl http://xx.xx.xx.193:30207/banana
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.2</center>
</body>
</html>
[root@kube01 ingress]#

卷曲 http://xx.xx.xx.193:30207/apple 卷曲 http://xx.xx.xx.193:30207/banana 上述语句在从外部或从浏览器访问时应分别显示苹果和香蕉

更新:我进入运行入口控制器的 pod 并检查了其配置文件,发现入口资源未应用于控制器。我尝试重新启动容器,但没有运气。我还尝试重新应用入口资源,但 pod 中的配置文件没有更改。进入控制器的所有内容都抛出 404,如配置文件中的位置标记。感谢有关资源未应用于控制器的原因的任何帮助

root@nginx-ingress-685d7964cd-djvgf:/etc/nginx# cat nginx.conf
user  nginx;
worker_processes  auto;
daemon off;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;
events {
worker_connections  1024;
}
http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;
keepalive_timeout 65s;
keepalive_requests 100;
#gzip  on;
server_names_hash_max_size 512;

variables_hash_bucket_size 256;
variables_hash_max_size 1024;
map $http_upgrade $connection_upgrade {
default upgrade;
''      close;
}


server {
listen 80 default_server;
listen 443 ssl default_server;
ssl_certificate /etc/nginx/secrets/default;
ssl_certificate_key /etc/nginx/secrets/default;
server_name _;
server_tokens "on";
access_log off;

location / {
return 404;
}
}
# stub_status
server {
listen 8080;
allow 127.0.0.1;
deny all;
location /stub_status {
stub_status;
}
}
include /etc/nginx/config-version.conf;
include /etc/nginx/conf.d/*.conf;
server {
listen unix:/var/run/nginx-502-server.sock;
access_log off;
location / {
return 502;
}
}
}
stream {
log_format  stream-main  '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
access_log  /var/log/nginx/stream-access.log  stream-main;

}
root@nginx-ingress-685d7964cd-djvgf:/etc/nginx#

我有几条评论(我注意到的(:

1,您的入口在默认命名空间中工作:

Namespace:        default
instead of nginx-ingress namespace

2,在您的kubectl describe ing example-ingress中没有注释,例如:

kubernetes.io/ingress.class:  nginx

3,我遇到了同样的问题,我无法访问该服务,但是当您使用ssl-redirect: "false"选项更改入口控制器的配置映射时,它将起作用。然后,它将在入口资源内没有spec.rules.host parameter的情况下工作。

希望这个帮助

我在我的情况下修复了它。

我的入口看起来像这样(ingress.yaml(:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
namespace: sample
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80

我为路径添加了一个通配符,如下所示:

- path: /*

并重新应用了此入口资源:kubectl apply -f ingress.yaml

然后它奏效了!

相关内容

  • 没有找到相关文章

最新更新