问题:
我试图在Ubuntu20.04LTS上配置一个完全容器化的ZabbixVersion6.0监控系统,使用的是Zabbix的Docker找到的这里。
我用来引发Zabbix服务器和Zabbix代理的命令是:
docker-compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml --profile all up -d
虽然代理处于中断状态并显示“红色”状态,但当我将其‘IP地址’从 127.0.0.1 更改为 172.16.239.6
(默认IP Docker-组合分配给它)时,Zabbix服务器现在可以成功地连接和监视。然而,:Zabbix无法连接到远程主机上的任何其他Dockerized代理,这些代理是通过docker run
命令引发的:
docker run --add-host=zabbix-server:172.16.238.3 -p 10050:10050 -d --privileged --name DockerHost3-zabbix-agent -e ZBX_SERVER_HOST="zabbix-server" -e ZBX_PASSIVE_ALLOW="true" zabbix/zabbix-agent:ubuntu-6.0-latest
注意到:我查看了其他Stack组来发布这个问题,但是Stackoverflow似乎是这些Docker/Zabbix问题的转到组,有超过30个这样的问题。
故障排除:
比较分析:
代理配置:
使用以下命令对与Zabbix服务器相同主机上的工作(“绿色”)代理与显示“红色”状态( Zabbix服务器不可接触)的不同主机上的代理进行比较分析,结果表明配置具有奇偶性。
docker exec -u root -it (ID of agent container returned from "docker ps") bash
然后执行:
grep -Ev ^'(#|$)' /etc/zabbix/zabbix_agentd.conf
港口:
在“红色”代理上显示的正确端口与运行在与Zabbix Server相同的主机上的“绿色”代理上打开的端口显示在命令的输出上:
ss -luntu
注意事项:此命令是从主机发出的,而不是代理的Docker容器。
消防队:
使用以下命令检查来自主机(而不是容器)的iptables
规则并没有显示任何值得关注的内容:
iptables -nvx -L --line-numbers
但为了排除防火墙问题,我还是允许iptables
中的所有内容都位于Zabbix服务器上的前表中,并允许代理处于用于测试的“红色”状态。
我还允许在MikroTik GW路由器上将Zabbix连接到运行Zabbix代理的不同物理主机上。
路由:
Zabbix服务器可以平移远程代理接口,以证明存在到代理的路由。
AppArmor:
我还阻止了AppArmor,将其排除为因果关系:
sudo systemctl stop apparmor
sudo systemctl status apparmor
摘要:
因此,一切都是开放的,Zabbix服务器可以路由到代理,而"red“代理的配置与居住在Zabbix服务器本身的同一主机上的”绿色“代理的配置具有奇偶性。
我已经成功地在生产环境中安装了非容器Zabbix,所以我对Zabbix很熟悉。
为什么容器化的Zabbix服务器不能连接到不同主机上的容器化Zabbix代理?
发布于 2022-03-28 13:00:15
简短答覆:
Zabbix配置没有什么问题;这是一个由Docker引发的问题。
docker logs <hostname of Zabbix server>
透露,在Zabbix服务器上似乎出现了NAT‘’ing,而且确实有。
Docker正在修改运行Zabbix Server容器的主机上的iptables NAT表,导致Zabbix Server的源地址显示为物理主机本身的IP,而不是Docker-组合分配的172.16.238.3 IP地址。
因此,代理没有期望这个地址,并拒绝了连接。我对Dockerized的经验是,它们大多擅长修改IP表以创建正确的连接,但在这种情况下却不是这样;-)。
我现在通过在主机(非容器)上执行以下命令来检查NAT表:
iptables -t nat -nvx -L --line-numbers
这表明,Docker是,呃,“有用的”和NAT‘’ing Zabbix服务器的流量
我根据违规规则号删除了这些违规规则:
iptables -t nat -D <chain> <rule #>
在此之后,Zabbix服务器的IP地址被正确地呈现给现在接受连接的代理,它们的状态变成了“绿色”。
如果执行以下操作,则该问题是可重复的:
docker-compose -f docker-compose -f docker-compose_v3_ubuntu_pgsql_latest.yaml down
然后运行up
命令,再次引发容器,您将看到它还原到运行Zabbix容器的主机的NAT表中的违规iptables
规则,破坏了与代理的连接。
较长的答覆:
以下是标识和解决Zabbix服务器NAT‘’ing主机IP外流量问题所需的步骤:
确定Zabbix服务器容器的主机是否正在NAT‘’ing:
我们需要查看Zabbix的容器的IP是如何呈现给代理的,因此我们必须获得Zabbix 代理的容器ID来检查它的‘日志:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2fcf38d601f zabbix/zabbix-agent:ubuntu-6.0-latest "/usr/bin/tini -- /u…" 5 hours ago Up 5 hours 0.0.0.0:10050->10050/tcp, :::10050->10050/tcp DockerHost3-zabbix-agent
接下来,向docker logs
命令提供代理的容器ID:
docker logs b2fcf38d601f
然后检查日志输出中被拒绝的IP地址,以确定它是而不是,Zabbix的IP:
81:20220328:000320.589 failed to accept an incoming connection: connection from "NAT'ed IP" rejected, allowed hosts: "zabbix-server"
您可以看到此错误的事实证明,不存在路由或连接问题:连接正在通过,它只是被应用程序拒绝,而不是防火墙。
如果纳宁被证实了,继续下一步
在Zabbix服务器主机上:
补救发生在Zabbix Server的主机本身,而不是代理。这很好,因为我们可以在一个地方解决问题,而不是很多地方。
在运行Zabbix容器的主机上执行以下命令:
iptables -t nat -nvx -L --line-numbers
命令输出:
Chain POSTROUTING (policy ACCEPT 88551 packets, 6025269 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 MASQUERADE all -- * !br-abeaa5aad213 192.168.24.128/28 0.0.0.0/0
2 73786 4427208 MASQUERADE all -- * !br-05094e8a67c0 172.16.238.0/24 0.0.0.0/0
Chain DOCKER (2 references)
num pkts bytes target prot opt in out source destination
1 0 0 RETURN all -- br-abeaa5aad213 * 0.0.0.0/0 0.0.0.0/0
2 95 5700 RETURN all -- br-05094e8a67c0 * 0.0.0.0/0 0.0.0.0/0
我们可以看到,对于"POSTROUTING“和"DOCKER”链,计数器都在递增--这两个规则都在它们各自的链中。这些规则显然是匹配的,并具有效力。
删除Zabbix服务器容器的主机上的违规规则,即NATing它对代理的流量:
sudo iptables -t nat -D POSTROUTING 2
sudo iptables -t nat -D DOCKER 2
稍等片刻,代理就会变成“绿色”--假设没有其他配置或防火墙问题。如果代理在应用修复后保持“红色”,那么请执行我在“问题”部分中记录的故障排除步骤。
结论:
我已经测试并重新启动了Zabbix服务器容器,没有重新创建已删除的规则。但是,请再次注意,docker-compose down
和docker-compose up
后面的将重新创建已删除的规则并破坏代理的连接。
希望这能拯救其他人浪费的周期。我是一个Linux和网络工程师,这伤害了我的头,所以如果你不是网络专家,这几乎是不可能解决的。
https://stackoverflow.com/questions/71647841
复制相似问题