侧边栏壁纸
博主头像
惬意小蜗牛博主等级

海内存知己,天涯若比邻!

  • 累计撰写 54 篇文章
  • 累计创建 143 个标签
  • 累计收到 57 条评论

目 录CONTENT

文章目录

Kubernetes 开启 Elasticsearch RBAC(XPACK)

惬意小蜗牛
2021-07-19 / 0 评论 / 0 点赞 / 1,730 阅读 / 1,111 字 / 正在检测是否收录...

从elastic 6.8和7.1开始,xpack里的安全功能,现在已经在基础版里免费了。这篇文章记录了,如何在k8s集群中,部署的es,开启security模块,以及fluentd和kibana的接入配置。当然如果你用的是开源版,可以参考我前面的博客,部署基础版。xpack的其他功能还是有收费的,各个版本的具体情况,可以参考官网链接。请注意,本文提供的是停服升级的方法。

官方docker部署方案的问题

官方文档中,有如何在docker中配置tls的文档,这个 文档 我个人感觉还是不够自动化,后期如果扩节点,应该还是需要人工介入,也缺少其他组件的接入配置。因此本文利用k8s的secret来分发密钥。本文还参考了es官方如何在集群中配置tls的文档

部署过程

生成私钥和证书

首先创建一个docker容器用于执行es命令。执行密钥生成以后,通过docker cp把密钥取出来。

docker run -d --name gen_cert  xxxxxx/elasticsearch/elasticsearch:7.6.2  sleep 3600

docker exec  gen_cert  /usr/share/elasticsearch/bin/elasticsearch-certutil cert -out /elastic-certificates.p12 -pass ""

docker cp gen_cert:/elastic-certificates.p12 ./

验证

openssl pkcs12 -nocerts -nodes -in  ./elastic-certificates.p12 -info

清理

docker stop gen_cert

docker rm gen_cert
配置elastic节点

将生成的密钥,存成k8s的的secret

kubectl -n logging create secret generic es-keystore --from-file=./elastic-certificates.p12

将密钥挂载到pod中,并修改es配置,开启tls

 volumeMounts:
         - name: es-persistent-storage
           mountPath: /data
+        - mountPath: /usr/share/elasticsearch/config/elastic-certificates.p12
+          name: keystore
+          readOnly: true
+          subPath: elastic-certificates.p12
         #- name: jvm-options-volume
         #  mountPath: /usr/share/elasticsearch/config/jvm.options
         #  subPath: jvm.options
@@ -90,20 +94,26 @@ spec:
               containerName: elasticsearch-logging
               resource: limits.cpu
         - name: "xpack.security.enabled"
-          value: "false"
+          value: "true"
+        - name: xpack.security.transport.ssl.enabled
+          value: "true"
+        - name: xpack.security.transport.ssl.verification_mode
+          value: "certificate"
+        - name: xpack.security.transport.ssl.keystore.path
+          value: "/usr/share/elasticsearch/config/elastic-certificates.p12"
+        - name: xpack.security.transport.ssl.truststore.path
+          value: "/usr/share/elasticsearch/config/elastic-certificates.p12"
         - name: "xpack.ml.enabled"
           value: "false"
         - name: "xpack.monitoring.collection.enabled"
           value: "true"
         - name: "xpack.license.self_generated.type"
           value: "basic"
+      volumes:
+      - name: keystore
+        secret:
+          secretName: es-keystore
+          defaultMode: 0444

然后用kubectl apply生效

配置内部应用的密码

等待es启动完毕,index都green以后,直接用一下命令生成内置用户的密码

kubectl -n logging exec -ti es-master-0 bin/elasticsearch-setup-passwords auto

屏幕输出类似下面,记得把输出结果保存了

Changed password for user apm_system
PASSWORD apm_system = *****

Changed password for user kibana
PASSWORD kibana = *****

Changed password for user logstash_system
PASSWORD logstash_system = *****

Changed password for user beats_system
PASSWORD beats_system = *****

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = *****

Changed password for user elastic
PASSWORD elastic = *****

配置kibana

在kabana的yaml配置中,设置相关的环境变量,以设置用户名和密码,其中密码内容来自上一部的输出

spec:
         requests:
             cpu: 100m
         env:
           - name: ELASTICSEARCH_HOSTS
             value: http://es-master:9200
           - name: XPACK_SECURITY_ENABLED
-            value: "false"
+            value: "true"
+          - name: ELASTICSEARCH_PASSWORD
+            value: ******
+          - name: ELASTICSEARCH_USERNAME
+            value: kibana
           - name: XPACK_ML_ENABLED
             value: "false"
           - name: XPACK_MONITORING_ENABLED

配置fluentd

创建fluentd角色和用户

kibana启动成功后,打开网页,会看到有登录界面了。输入之前生成的elastic和其密码。
进入主页后,点左下角的management,再点role,创建角色
角色创建的时候,除了logstash前缀的index以外,还需要cluster moniter的权限

创建fluentd的用户,选刚刚创建的角色,输入密码即可

配置config修改

修改fluentd配置的configmap,其中加入刚刚创建的用户名和密码

@id elasticsearch
@type elasticsearch
@log_level info
type_name fluentd
include_tag_key true
host es-master
user k8sfluentd
password 12345678+

修改configmap后,需要重启才能生效,直接把pod都干掉就行了

kubectl -n logging delete pods -l k8s-app=fluentd-es

注意点

在配置es的时候有一个大坑。就是pkcs的密钥,位置必须放在usr/share/elasticsearch/config/ ,否则会莫名的报,permission denied。 改owner,改mode都没卵用。

本文完全来源于 “片总的博客【k8s上的elastic开启rbac】” ,此处只为个人学习记录,方便后续自己翻阅,如有冒犯博主,还请告知,谢谢。

0

评论区