如何在不使用CLI向导的情况下设置Icinga2远程客户端?


11

我想通过Puppet设置Icinga2远程客户端,但是官方文档的整个页面都讨论了如何使用其出色的 CLI向导,该向导需要手动运行。

任何解决方法?也许我应该回到纳吉斯?


链接到的文档仅参考Windows的GUI设置。这是您要问的吗?
基思2014年

1
docs.icinga.org/icinga2/latest/doc/module/icinga2/chapter / ... ...最新文档中有专门针对此问题的部分。
TryTryAgain

Answers:


16

我遇到过同样的问题。从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

1

就像TryTryAgain写道。最新的文档描述了两种不同的方式。 自上而下的远程命令执行自上而下的配置同步

这种方法的区别在于,远程命令执行将触发来自主节点的所有命令,而配置同步将同步位于/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的任何原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.