加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

网络 – 透明代理到Docker网络意味着TCP被破坏

发布时间:2020-12-13 21:16:52 所属栏目:Nginx 来源:网络整理
导读:我的日志记录设置是一个Docker主机,为syslog公开了UDP 514. nginx容器的端口已发布,因此当您将日志发送到10.1.1.100时(如下图所示),它首先命中nginx,其配置为Logstash容器的透明负载平衡是: user root;events {worker_connections 32768;}stream { upstream

我的日志记录设置是一个Docker主机,为syslog公开了UDP 514. nginx容器的端口已发布,因此当您将日志发送到10.1.1.100时(如下图所示),它首先命中nginx,其配置为Logstash容器的透明负载平衡是:

user root;
events {worker_connections 32768;}
stream {
 upstream logstash_servers {
  server logstash-collector-01:514;
  server logstash-collector-02:514;
  server logstash-collector-03:514;
 }
 listen 514 udp;
 proxy_pass logstash_servers;
 proxy_bind $remote_addr transparent;
 }
}

Docker_network

这很好用.但是,TCP 514(或任何TCP,就此而言)没有.即使我添加正确的侦听器和配置,我相信TCP握手没有完成,因为nginx执行透明的负载平衡,其proxy_bind传递,例如,10.1.1.5作为源IP,例如172.18.0.4(Logstash实例).然后该实例尝试完成握手,但10.1.1.5(以及沿途的任何路由器)不知道如何路由到172.18.0.0/16的Docker网络.

这里有解决方案能够使用TCP进行日志记录吗?

最佳答案
听起来nginx可能不是这里工作的最佳工具 – 无论是haproxy(如果你想要简单的TCP / UDP负载平衡),还是rsyslog(如果你想要一些稍微更多的应用程序感知)似乎更合适,并且会实现与nginx目前相同的功能.

查看您的设置,您甚至可以在514上有一个前端logstash监听器,它可以转发到另一个logstash实例进行实际处理.
由于logstash不是AFAIK执行负载平衡,您可以根据您放置的某些标记/类型来“路由”事件.

检查https://www.nginx.com/resources/admin-guide/tcp-load-balancing/,为了同时拥有TCP和UDP,您需要以下内容:

stream {
    upstream logstash_servers {
        server logstash-collector-01:514;
        server logstash-collector-02:514;
        server logstash-collector-03:514;
    }
    server {
        listen 514;
        ...
    }
    server {
        listen 514 udp;
        ...
    }
}

我不清楚在UDP服务器块中使用logstash_servers是否会导致nginx对它们说UDP或TCP,因此您可能需要使它们都可用.

我有点怀疑在连接到logstash后端时使用’错误’IP作为源的nginx节点问题 – 通常,你的nginx前端将使用’正确’的IP来做这件事,在你的情况下,将意味着在172.18 / 16内的地址.
这类似于在反向代理localhost时如何使用nginx:在这种情况下,nginx将使用源IP为127.0.0.1(或:: 1)与localhost应用程序通信,而不是nginx看到请求来自的IP .

还有一个事实,你似乎说这一切都适用于UDP – 这往往会说路由不是一个问题,但你的TCP设置可能是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读