根据文件https://icinga.com/docs/icinga2/latest/doc/06-distributed-monitoring/,Icinga 监控中的所有节点都需要一个位于主节点上的 CA。但我认为,我在这里错过了一些东西,因为代理通常只与卫星通信,而不与主节点通信,因此 TLS 可能不正确。
我有一个主节点、多个卫星节点和位于卫星节点后面的代理节点。主节点有一个 CA。卫星节点和 20 多个代理节点中的大多数都运行良好。我使用 Ansible 来管理所有安装和配置 - 因此配置与所有代理节点类似。此外,主节点是一个 docker 容器 - 但这不是问题。只有一个卫星节点上的单个代理节点有问题。也许这是第一次设置(没有卫星节点)的问题。我删除了代理节点上的所有 PKI 信息并重新启动。
我做了以下事情:
agent> icinga2 pki save-cert \
--key agent.key --cert agent.crt \
--trustedcert master.crt \
--host ${masterhost} --port ${masterport}
我在 master 上创建了一张票
master> icinga2 icinga2 pki ticket --cn ${agent}
所以我拿到了代理票。
然后我申请了证书。
agent> icinga2 pki request \
--host ${masterhost} --port ${masterport} \
--ticket ${agentticket} \
--key agent.key --cert agent.crt \
--trustedcert master.crt --ca /etc/icinga2/pki/ca.key
现在我认为,代理应该与主服务器通信。但它不应该与主服务器通信,而应该与卫星通信。
区域配置为:
/* Agent /etc/icinga2/zones.conf */
/* Define Monitoring Master Endpoint */
object Endpoint "satellite1.network" {
host = "ip"
port = "5665"
}
/* Define Monitoring Master Zone */
object Zone "satellite1.network" {
endpoints = [ "satellite1.network" ]
}
/* Define Monitoring Agent Endpoint (this host) */
object Endpoint NodeName {
host = NodeName
}
/* Define Monitoring Agent Zone */
object Zone ZoneName {
endpoints = [ NodeName ]
parent = "satellite1.network"
}
因此,代理不知道主服务器,它只与卫星主机通信。因此 - 卫星上会发生必须发生的事情。它忽略了代理,因为它不知道证书。
satellite> tail /var/log/icinga2/icinga2.log
...
... warning/ApiListener: Certificate validation failed for endpoint 'agent': code 18: self signed certificate
...
因此,我执行上述操作不是针对主服务器,而是针对卫星服务器(将主服务器替换为卫星主机)。但这会导致卫星服务器需要自己的 CA(手册中没有记录)。我可以创建一个。但这正确吗?