![如何在不使用 CLI 向导的情况下设置 Icinga2 远程客户端?](https://linux22.com/image/646975/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%20CLI%20%E5%90%91%E5%AF%BC%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%AE%BE%E7%BD%AE%20Icinga2%20%E8%BF%9C%E7%A8%8B%E5%AE%A2%E6%88%B7%E7%AB%AF%EF%BC%9F.png)
我想通过 Puppet 设置 Icinga2 远程客户端,但整个页面官方文档谈论使用他们的惊人的CLI 向导,需要手动运行。
有什么解决方法吗?也许我应该回到 Nagios?
答案1
我遇到了同样的问题。这是我从 icinga2 节点向导代码中提取逻辑后使用的。
您需要的变量:
$pki_dir - /etc/icinga2/pki in the default installation
$fqdn - fully host+domain name of the client.
$icinga2_master - resolvable fqdn of the master
$icinga2_master_port - the port the master is connectable on.
$ticket - generated on the master via 'icinga2 pki ticket --cn $fqdn'
代码:
mkdir icinga:icinga 0700 $pki_dir
icinga2 pki new-cert --cn $fqdn --key $pki_dir/$fqdn.key --cert $pki_dir/$fqdn.crt
icinga2 pki save-cert --key $pki_dir/$fqdn.key --cert $pki_dir/$fqdn.crt --trustedcert $pki_dir/trusted-master.crt --host $icinga2_master
icinga2 pki request --host $icinga2_master --port $icinga2_master_port --ticket $ticket --key $pki_dir/$fqdn.key --cert $pki_dir/$fqdn.crt --trustedcert $pki_dir/trusted-master.crt --ca $pki_dir/ca.key
icinga2 node setup --ticket $ticket --endpoint $icinga2_master --zone $fqdn --master_host $icinga2_master --trustedcert $pki_dir/trusted-master.crt
systemctl restart icinga2 # or however you restart your icinga
答案2
就像 TryTryAgain 写的一样。最新的文档描述了两种不同的方法。 自上而下的远程命令执行和自上而下的配置同步
这种方法的不同之处在于远程命令执行将触发来自 master 的所有命令,同时配置同步/etc/icinga2/zones.d
将同步位于子节点(卫星以及客户端)的所有配置文件,并直接在端点上触发命令执行。
我更喜欢使用自上而下的配置同步因为即使主机与子机失去连接,客户端也会运行检查。
您必须API
在所有节点上启用该功能。
# /etc/icinga2/features-enabled/api.conf
object ApiListener "api" {
cert_path = "/etc/ssl/{{ hostname }}.pem"
key_path = "/etc/ssl/{{ hostname }}-key.pem"
ca_path = "/etc/ssl/rootca.pem"
// only on satelites and clients
accept_config = true
}
现在创建一个区域文件并将其复制到所有节点
# /etc/icinga2/zones.conf
// global zone used for zone overlapping configs
object Zone "global" {
global = true
}
// endpoints
object Endpoint "fqdn1.of.host" {
host = "fqdn1.of.host"
}
object Endpoint "fqdn2.of.host" {
host = "fqdn2.of.host"
}
// for each endpoint one zone
object Zone "fqdn1.of.host" {
endpoints = [ "fqdn1.of.host" ]
}
object Zone "fqdn2.of.host" {
endpoints = [ "fqdn2.of.host" ]
parent = "fqdn1.of.host"
}
最佳做法是使用节点的 fqdn 作为端点名称以及区域名称。
记住:将其复制zones.conf
到所有节点。
下一步是/etc/icinga2/zones.d/
在每个主机自己的 hosts.conf 区域目录内定义所有服务、模板和组。
# /etc/icinga2/zones.d/global/templates.conf
template Host "generic-host" {
max_check_attempts = 3
check_interval = 1m
retry_interval = 30s
check_command = "hostalive"
}
# /etc/icinga2/zones.d/fqdn1.of.host/hosts.conf
// this is the master
object Host "fqdn1.of.host" {
import "generic-host"
address = "fqdn1.of.host"
}
# /etc/icinga2/zones.d/fqdn2.of.host/hosts.conf
// this is a satelite/client
object Host "fqdn2.of.host" {
import "generic-host"
address = "fqdn2.of.host"
}
我的方法是防止使用里面的配置,/etc/icinga2/conf.d
因为我添加了所有通用的(和全局使用的)内容/etc/icinga2/zones.d/global
和主机特定的东西/etc/icinga2/zones.d/fqdnX.of.host
最后但同样重要的是,你必须删除 conf.d 的 include 语句
# /etc/icinga2/icinga2.conf
[...]
// include_recursive "conf.d"
就是这样。此设置需要手动或使用您选择的配置管理来管理您的证书。它不会生成证书,也不会使用 icinga pki。只要有特定的工具,我就不明白为什么要使用特定工具的 pki。