Rancher2.6 Monitoring Grafana对接LDAP

Rancher Monitoring 介绍

在 Rancher 管理平台上,我们可以很顺利的在任何我们支持管理的 Kubernetes 集群上去启用 Rancher Monitoring 来为我们提供监控告警的功能。Rancher Monitoring 默认使用 Prometheus 来为我们提供相关系统和应用服务的监控,并通过 Grafana 的仪表盘可视化工具进行数据统计监控展示。

思考

默认情况下,Rancher没有对访问的 Grafana 的用户进行太多的限制,我们可以使用 Anonymous 用户来查看 Rancher 部署的任何默认仪表盘展示界面。但更多情况下,我们需要通过 Grafana 来制定自定义的仪表盘,此时 Anonymous 用户的 ReadOnly 权限就无法满足我们的需求,但是登录 admin 用户又会对我们 Grafana 造成一定安全隐患。此时我们就需要这么一套用户管理系统来管理 Grafana 的用户,对访问的用户进行一定权限的限制与管控。

虽然我们可以使用 Grafana 自带的用户管理列表来对访问的用户进行一定的权限管理,但是这需要我们额外维护一套用户列表。那么可不可以直接对接企业内部的LDAP系统从而减少我们维护用户的成本呢?

答案是肯定的。Rancher2.5 版本开始,监控架构进行了调整,允许用户自定义更多相关组件的配置。本文将介绍如何在 Rancher2.6 上,如何在通过配置 Rancher Monitoring 来进行 Grafana 对接 LDAP 认证。

先决条件

  • Rancher:2.6.4

  • k8s:1.20.11

  • monitoring:100.1.2+up19.0.3

  • OpenLDAP:1.5.0

详细操作

Grafana对接LDAP

编辑Monitoring Yaml配置LDAP

  1. 访问Rancher explorer UI,进入Apps & Marketplace,选择Monitoring,在配置选项中选择Edit YAML:

rancher-1

  1. 开启LDAP认证配置

grafana.grafana.ini层级下新增如下auth.ldap配置信息开启LDAP:

1
2
3
4
5
6
grafana:
grafana.ini:
auth.ldap:
allow_sign_up: true
config_file: /etc/grafana/ldap.toml
enabled: true

rancher-2

  1. grafana层级下,添加LDAP认证参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
grafana:
ldap:
config: |
[[servers]]
host = "test.zerchin.xyz"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = true
bind_dn = "cn=admin,dc=rancherldap,dc=com"
bind_password = 'Rancher123'
search_filter = "(cn=%s)"
search_base_dns = ["cn=group,ou=rancher,dc=rancherldap,dc=com"]
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email = "email"
enabled: true

参数说明

host:LDAP服务器地址(IP/Domain,指定多个地址空格分隔)。

port:LDAP端口,默认是389,如果use_ssl=true则是636。

use_ssl:是否使用加密TLS连接。

start_tls:STARTTLS是一种明文通信协议的扩展,能够让明文的通信连线直接成为加密连线(使用SSL/TLS加密),而不需要使用另一个特别的端口来进行加密通信。

ssl_skip_verify:是否跳过SSL证书验证。

bind_dn:LDAP服务账户用户名。

bind_password:密码(如果密码包含#,则需要用三个括号引起来,例如:”””#password;”””)。

search_filter:用户查询过滤字段,例如"(cn=%s)""(sAMAccountName=%s)""(uid=%s)"

search_base_dns:用户搜索起点。

  1. 配置好之后启动监控。

等待监控启动成功后,打开Grafana UI界面,默认账号密码为:admin/prom-operator

grafana-1

LDAP验证

登录之后,左侧进入Server Admin - LDAP,在LDAP Connection下可以看到连接的主机。

在Test user mapping下,搜索存在的LDAP用户,可以查到用户信息。

grafana-2

并且可以使用LDAP用户登录访问Grafana UI界面。

grafana-3

Grafana基于SSL对接LDAP

上述方法对接了LDAP的389端口,我们可以使用此端口进行LDAP连接。

但是该端口是非安全和未加密的连接,容易造成安全问题,暴露用户相关信息,一般建议389端口仅用在内网或者测试环境。

对于安全要求比较高的环境下,我们可以使用LDAP另一个SSL加密端口来对接LDAP服务:636端口。

创建证书secret

cattle-monitoring-system命名空间下,新建一个名叫certs的secret,其中ca.pem写入CA证书,tls.crt写入LDAP服务器证书,tls.key写入LDAP服务器证书秘钥。

secret-1

也可以通过命令行导入相关证书:

1
kubectl create secret generic certs -n cattle-monitoring-system --from-file=ca.pem --from-file=tls.crt --from-file=tls.key

LDAP SSL认证配置

编辑Monitoring yaml配置

  1. grafana层级下,添加extraSecretMounts挂载secret证书:
1
2
3
4
5
6
7
grafana:
extraSecretMounts:
- defaultMode: 440
mountPath: /opt/certs
name: certs
readOnly: true
secretName: certs
  1. LDAP开启SSL认证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
grafana:
ldap:
config: |
[[servers]]
host = "test.zerchin.xyz"
port = 636
use_ssl = true
start_tls = false
ssl_skip_verify = false
root_ca_cert = "/opt/certs/ca.pem"
client_cert = "/opt/certs/tls.crt"
client_key = "/opt/certs/tls.key"
bind_dn = "cn=admin,dc=rancherldap,dc=com"
bind_password = 'Rancher123'
search_filter = "(cn=%s)"
search_base_dns = ["cn=group,ou=rancher,dc=rancherldap,dc=com"]
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email = "email"
enabled: true
  • port设置为636 SSL加密端口
  • use_ssl设置为true,ssl_skip_verify设置为false,开启SSL认证
  • root_ca_certclient_certclient_key配置证书路径
  1. 配置好之后启动监控。

LDAP SSL验证

登录Grafana,左侧进入Server Admin - LDAP,在LDAP Connection下可以看到,已经连上了636 SSL加密端口。

并且在Test user mapping下,搜索存在的LDAP用户,可以查到用户信息。

grafana-ssl-1

尝试用LDAP用户登录,可以正常登录查看数据。

grafana-ssl-2

总结

通过上述的配置,我们可以很顺利的对接企业内部的LDAP作为 Grafana 用户管理系统,从而使得我们能够直接利用现有的用户进行统一的用户管理和权限认证。当然我们也可以去对接其他的用户管理系统,例如 okta、saml、github、basic等等,我们可以根据具体的需求参考 Grafana 官方文档进行配置即可。

Grafana配置参考:https://grafana.com/docs/grafana/next/setup-grafana/configure-security/configure-authentication/ldap/