Назад | Перейти на главную страницу

Icinga PKI Агент-Спутник-Мастер

Согласно документации на 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 (который не был задокументирован в руководстве). Я мог бы создать такой. Но правильно ли это?