Alertmnager:集群侦听地址和广告地址之间的区别

Alertmnager: Difference between cluster listen address and advertise address

我在两台不同的主机上有 alertmanager 运行 作为 docker 容器,两者都应该是 运行 作为集群。两台机器都在同一个 vpc 内,并使用私有 ip 地址进行通信。

我想知道 --cluster.listen-address 和 --cluster.advertise-address 之间的区别。
如果我错了,请纠正我,指定 cluster.listen-address=:9094 意味着 alertmanager 将在端口 9094 上的所有接口上侦听集群连接。因此,不同主机上的所有其他 alertmanager 节点都可以在端口 9094 连接到此 alertmanager 的 ip 地址通过设置 cluster.peer=<ip>:9094.
但是,我不明白 cluster.advertise-address.

有什么用

documentation 没有给出关于广播和监听地址用例的太多信息。

The chosen port in the cluster.listen-address flag is the port that needs to be specified in the cluster.peer flag of the other peers.
The cluster.advertise-address flag is required if the instance doesn't have an IP address that is part of RFC 6980 with a default route.

谁能帮我知道两者的区别?

在集群系统中,每个节点都需要能够访问所有其他节点。但是,一个节点可以有多个身份,特别是在使用某种形式的网络地址转换 (NAT) 时。例如,在 Docker 的特定上下文中,容器具有 container-private IP 地址,但在 Docker 之外通常通过其主机的 IP 地址或 DNS 名称和已发布的端口访问。

监听地址绑定地址指定进程在哪些网络接口上接受入站连接。在 Docker 中,这几乎总是必须是特殊的“所有接口”IPv4 地址 0.0.0.0 或其等效的 IPv6 地址 ::,并使用服务的标准 TCP 端口。 Alertmanager 默认值 0.0.0.0:9094 在这里是正确的。 (如果是 127.0.0.1 则无法从其容器外部访问该进程。某些软件会枚举可用接口并分别绑定到每个接口,这也可以。)

通告地址告诉集群如何连接回节点。如果整个系统在 Docker 中 运行,这可能是 Docker-internal DNS 名称;在 Kubernetes 中,服务名称;或者在 multi-host 设置中,主机的名称和发布的端口。同样,尤其是在 Docker 的情况下,服务器可能正在侦听端口 9094,但是 docker run -p 选项可能会选择一个不同的外部可见端口;广告地址配置是集群其余部分了解此地址的唯一方式。

peers 是集群中其他节点的 initial 集合,但它们可以来来去去,一旦你连接到集群后,新节点通常可以发现所有其他当前成员。

在multi-hostDocker环境下,应该使用默认监听地址;您应该将广告地址设置为您的 主机的 IP 地址和发布的端口;并且您应该列出尽可能多的初始已知同行。对于第一个节点,您无法列出任何对等节点,因为第二个节点尚未 运行。