Согласно документации на https://icinga.com/docs/icinga2/latest/doc/06-distributed-monitoring/, все узлы в Icinga Monitoring должны иметь один CA, который находится на главном узле. Но я думаю, что здесь что-то упущено, потому что агент обычно разговаривает только со спутником, а не с мастером, поэтому TLS не может быть правильным.
У меня есть главный узел, несколько спутников и агентов за этими спутниками. У мастера есть CA. Спутники и большинство из> 20 агентов работают нормально. Я использую Ansible для управления всей установкой и настройкой, поэтому конфигурация аналогична всем агентам. Кроме того, мастер - это док-контейнер, но здесь это не проблема. Проблема возникает только у одного агента на одном спутнике. Может это проблема первой настройки (без спутников). Я удалил всю информацию PKI об агенте и начал снова.
Я сделал следующее:
agent> icinga2 pki save-cert \
--key agent.key --cert agent.crt \
--trustedcert master.crt \
--host ${masterhost} --port ${masterport}
На мастере создал тикет
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 (который не был задокументирован в руководстве). Я мог бы создать такой. Но правильно ли это?