Kibana本身是一个Web界面,但是出于安全和机密的考虑,我们肯定不会让互联网上所有的人都能随便看到Kibana里的内容,但是X-pack目前又不支持6.2以上的版本,于是我们可以使用Nginx的密码功能来保护Kibana的网页:要访问Kibana时需要先输入密码,正确就登陆到Kibana,如果错误就是403。
Kibana是容器安装的,安装过程可以去查看:https://rorschachchan.github.io/2019/01/21/%E5%B0%86kafka%E5%8A%A0%E5%85%A5%E5%88%B0Elk%E9%9B%86%E7%BE%A4/
事前准备
Nginx也是容器安装,docker pull nginx
拉取最新的nginx镜像,在下载的时候呢我们也别对着屏幕干巴巴的等。由于在nginx配置转发的时候,需要知道Kibana的容器IP,这是因为Kibana和正在下载的Nginx是两个不同的容器,Nginx是需要跨容器访问的。
默认的官方Kibana镜像登录是非root的,这种虽然安全,但是不能config也不能yum,于是我们首先要使用root账号登录进去,语句是:
1
2
3docker exec -it --user root kibana容器ID /bin/bash
yum update -y
yum install -y net-tools #下载ifconfig
使用ifconfig和netstat查看容器的IP和工作端口:
可以确认Kibana的IP是172.17.0.4
,端口是5601。这时候我们就可以写一个kibana.conf
,让nginx容器用这个配置文件达到跳转的目的!
kibana.conf
全文如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19upstream kibana_server {
server 172.17.0.3:5601 weight=1 max_fails=3 fail_timeout=60; #这里写的就是kibana的容器IP和端口,如果是多台kibana想要按权重访问,就写weight
}
server {
listen *:33664; #nginx容器自己的端口
server_name _;
auth_basic "Restricted Access"; # 验证
auth_basic_user_file /etc/nginx/conf.d/htpasswd.users; # 验证文件
location / {
proxy_pass http://kibana_server; #这个地方就是upstream
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
把这个文件保存在/mnt/nginx
目录里。
配置nginx密码
nginx要创建验证文件授权,需要先安装httpd-tools
工具:
1
2
3yum install -y httpd-tools
htpasswd -bc /mnt/nginx/htpasswd.users kibana password123 # 创建验证文件
Adding password for user admin
这时我们就创建了一个/mnt/nginx/htpasswd.users
,里面的用户是kibana,密码是password123。这个密码在文件里是加密的,用cat命令无法正常查看到的。
启动nginx容器
此时nginx镜像应该下载完毕了,那么就直接启动镜像,启动语句是:
1
docker run --hostname Kngx -p 80:33664 --name Knginx -v /mnt/nginx/:/etc/nginx/conf.d/ -d nginx
简单说一下这个命令:这个容器名叫Knginx,hostname是Kngx,做了宿主机80端口到此容器33664端口的转发,将宿主机的/mnt/nginx/
挂载到容器里的/etc/nginx/conf.d/
,同时直接启动nginx。
启动成功之后,我们看到刚刚建立的htpasswd.users
和kibana.conf
都已经成功被Knginx容器配置上,然后打开浏览器,看看效果:
这样就达到了密码访问页面的效果,如果想加IP白名单呢,也可以直接在kibana.conf
里补充相关配置,修改完毕之后,重启Knginx容器即可。
参考资料
https://www.hugeserver.com/kb/how-secure-kibana-nginx-centos/