在k8s集群上使用proxy_pass进行nginx和节点部署时出现随机/间歇性502网关错误

问题描述

我当前的配置如下

裸金属簇。 SELINUX状态为关闭

  1. Nginx部署
  2. nodejs部署

我正在通过ngnix服务提供静态内容,并通过节点服务提供动态内容。下面是我的Nginx配置。

worker_processes  4;

#error_log  logs/error.log  info;
error_log  /dev/stdout  info;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush      on;

    #keepalive_timeout  0;
    #keepalive_timeout  5;

    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  /dev/stdout  main;


    server {
        listen       1080;
        server_name  localhost $hostname;

        root  /usr/share/Nginx/static/;
    
        # static content
        location ~ some-regex {
            alias /usr/share/Nginx/static/;
            
            # handle cors see 'Nginx-Cookbook' for production quality
            add_header 'Access-Control-Allow-Origin' '*';
        }

        # forward request to node-service
        location / {
             client_max_body_size 128M;
             proxy_buffer_size 256k;
             proxy_buffers 4 512k;
             proxy_busy_buffers_size 512k;
             proxy_http_version 1.1;
            #  proxy_set_header Connection "";
            #  proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection keep-alive;
             proxy_set_header Host $http_host;
             proxy_cache_bypass $http_upgrade;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #  proxy_socket_keepalive on;
             proxy_pass http://nodeserver:3000;
        }
    }

    include servers/*;
}

在我的入口中,我正在使用Nginx服务。我能够几次将请求正确转发到节点服务并获得正确的响应,但是大约50%的请求失败时会出现502错误的网关错误,并且我在Nginx pod日志中看到此错误

[错误] 20#20:* 187 connect()失败(111:连接被拒绝) 连接到上游,客户端:10.44.0.2,服务器:localhost,请求: 上游的“ GET / path HTTP / 1.1”: “ http:// node-service-clusterip:3000 / path”,主机: “ my-Nginx-node.example.com”

我已经尝试过Nginx文档中的多个指令,但无济于事。任何帮助将不胜感激

解决方法

我的kubernetes标签选择器出现错误。我在多个部署中使用了相同的选择器,这导致了路由问题。