Kubernetes 中 Elastic Search 集群的通信加密、认证和清理

简介:

外加版本较旧,处于“能用”的状态而已。

而近期的版本中这一情况发生了变化,原来的elasticsearch中新增了一个子目录:

production_cluster,README.md中的介绍是:

A more robust example that follows Elasticsearch best-practices of separating nodes concern is also available.

这个听起来就厉害了,关键字:robuts,best-practice。

顺藤摸瓜找到了作者的 github 地址:https://github.com/pires/

这一集群的特点是:

  1. ES 集群分为 Master/Client/Data 三组,各司其职,各自可以设置自己的资源使用,参数配置等。
  2. 提供了 StatefulSet 形式的数据节点,便于数据持久化的支持。
  3. 采用 Curator 的 CronJob,用于数据的清理。
  4. 自定义的 Elastic Search 镜像。

这一些功能自然是极好的,然而因为 X-Pack 的授权问题,使得两个重要的功能: https 通信和认证落了空,还好发现了一个替代方案:Search Guard,
简单说来,这一方案提供了免费的认证和 https 通信方案,并且提供了更多的商业支持特性。具体能力范围可以参看官网,下面基于 Pries 的 ES 5.6.3 版本,来把假设在 Kubernetes 集群上的 ES 集群进行加固。

环境准备

镜像的构建

Search Guard 的安装分为插件安装、初始化和集群设置三个步骤,Pries 镜像中推荐的插件安装方式仅能完成第一步骤,因此这里做一些定制,将前两个步骤在镜像中直接完成。

这里我们使用 Pries 镜像为基础:

Dockerfile

FROM quay.io/pires/docker-elasticsearch-kubernetes:5.6.3
COPY prepare.sh /tmp
RUN sh /tmp/prepare.sh

prepare.sh

#!/bin/shset -xeexport NODE_NAME="MASTER" # 占位符# 插件安装bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.6.3-16# 初始化chmod a+x plugins/search-guard-5/tools/install_demo_configuration.sh
plugins/search-guard-5/tools/install_demo_configuration.sh -y# 清理不必要的配置sed -i 's/network.host.*0$//' config/elasticsearch.yml
sed -i 's/cluster.name.*demo$//' config/elasticsearch.yml

运行 ES 集群

运行集群之前,注意三处需要修改:

  • 镜像名称。
  • 环境变量加入:
- name: "NETWORK_HOST"
 value: "_eth0_"
  • 因为 Search Guard 的加入,Client 的可用检测是失效的,因此需要删除。
kubectl apply -f es-discovery-svc.yaml
kubectl apply -f es-svc.yaml
kubectl apply -f es-master.yaml
kubectl apply -f es-client.yaml
kubectl apply -f es-data.yaml

集群启动之后会处于不可用状态,需要进行 Search guard 设置,使用 kubectl 命令进入任意一个 Master 节点的 Shell,编辑如下文件:

#!/bin/bash/elasticsearch/plugins/search-guard-5/tools/sgadmin.sh \ -cd /elasticsearch/plugins/search-guard-5/sgconfig \
-ks /elasticsearch/config/kirk.jks -arc \
-ts /elasticsearch/config/truststore.jks -nhnv -icl \
-h 172.200.62.7
  • -icl 参数用于禁止证书 CN 的检查。
  • -h 指定该 Pod 的地址。
  • -arc 接受状态为 RED 的集群操作。

这样就完成了 ES 集群的初始化设置,并且开始运行。
这时我们如果访问其服务,例如:https://node.port:9200,如果弹出安全警告,在选择不检查证书之后,会弹出验证窗口,输入预置的:admin/admin 就能看到正常的 API 页面了。

Fluentd

因为我们的 Fluentd 需要访问 https 协议的有认证要求的 ES 集群,所以这里使用 ConfigMap 的方式,为 Fluentd 加载修改好的配置文件。

首先使用 docker cp 命令,或者直接从源码中获取 fluent.conf 和 kubernetes.conf 两个文件。

在 fluent.conf 的 es 配置中加入 ssl_verify false 一行。

–from-file 开关将上文中的两个配置文件加入 ConfigMap。

修改 DaemonSet 的源码:

... # 接入配置 - name: FLUENT_ELASTICSEARCH_SCHEME
 value: "https" - name: FLUENT_ELASTICSEARCH_USER
 value: "admin" - name: FLUENT_ELASTICSEARCH_PASSWORD
 value: "admin" ... # 配置文件

volumeMounts: ... - name: etc
 mountPath: /fluentd/etc
terminationGracePeriodSeconds: 30
volumes: ... - name: etc
configMap:
 name: fluentd-config

这样,Fluentd 就能成功连接 es 并发送日志了。

Kibana

和 Fluentd 的情况类似,也需要创建他的配置文件,并在 kibana.yml 原有内容基础上增加几行:

elasticsearch.username: "admin"
elasticsearch.password: "admin"
elasticsearch.ssl.verificationMode: none

另外在他的 Deployment 描述中,需要将 ES 集群接口地址改为 https 协议。

启用后,打开 Kibana 页面,就会弹出认证要求。

Curator

编辑 es-curator-config.yml,修改:

use_ssl: True
ssl_no_validate: True
http_auth: admin:admin

然后创建 ConfigMap 和 Cronjob 对象即可。

补充

  • sgadmin 及其配置有着相当丰富的功能,例如用户和角色的管理等。
  • 证书也是可以使用合法证书进行替代的,不一定需要使用自这个过程中生成的自签名证书。
相关文章
|
20天前
|
Kubernetes 微服务 容器
Aspire项目发布到远程k8s集群
Aspire项目发布到远程k8s集群
367 2
Aspire项目发布到远程k8s集群
|
8天前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
185 3
|
21天前
|
安全 数据安全/隐私保护 Python
【计算巢】端到端加密通信:保障即时通讯的安全性
【5月更文挑战第31天】端到端加密通信确保了信息在传输过程中的安全,防止他人窥探和篡改。只有通信双方能解密消息,类似使用只有两人才能打开的锁。通过一个简单的Python加密代码示例展示了加密原理。理解并掌握端到端加密对于保护个人及企业信息安全至关重要。在信息时代,注重隐私和安全,利用加密技术保障通信安全。
|
10天前
|
Kubernetes 数据处理 调度
天呐!部署 Kubernetes 模式的 Havenask 集群太震撼了!
【6月更文挑战第11天】Kubernetes 与 Havenask 集群结合,打造高效智能的数据处理解决方案。Kubernetes 如指挥家精准调度资源,Havenask 快速响应查询,简化复杂任务,优化资源管理。通过搭建 Kubernetes 环境并配置 Havenask,实现高可扩展性和容错性,保障服务连续性。开发者因此能专注业务逻辑,享受自动化基础设施管理带来的便利。这项创新技术组合引领未来,开启数据处理新篇章。拥抱技术新时代!
|
10天前
|
Kubernetes 前端开发 Serverless
Serverless 应用引擎产品使用合集之如何调用Kubernetes集群内服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
21天前
|
运维 Kubernetes 调度
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
|
21天前
|
Kubernetes 微服务 容器
Aspire项目发布到win11本地k8s集群
Aspire项目发布到win11本地k8s集群
202 0
Aspire项目发布到win11本地k8s集群
|
22天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与维护最佳实践
【5月更文挑战第30天】 在现代云计算环境中,容器编排工具如Kubernetes已成为部署和管理微服务的关键。随着其日益广泛的应用,对集群进行有效的监控和维护显得尤为重要。本文将深入探讨Kubernetes集群监控的策略,并分享维护的最佳实践,以确保系统的稳定性和性能优化。我们将从监控工具的选择、关键指标的跟踪到故障排除流程等方面进行详细阐述,并提供实用的操作建议。
|
1天前
|
运维 Kubernetes 监控
备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?
备战双 11!蚂蚁金服万级规模 K8s 集群管理系统如何设计?
|
22天前
|
运维 Prometheus 监控
Kubernetes 集群的监控与维护策略
【5月更文挑战第30天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes成为确保服务高效运行的关键。本文聚焦于Kubernetes集群的监控和维护,首先探讨了监控系统的重要性及其对集群健康的影响,随后详细介绍了一套综合监控策略,包括节点性能监控、应用服务质量跟踪以及日志管理等方面。此外,文章还提出了一系列实用的集群维护技巧和最佳实践,旨在帮助运维人员预防故障发生,快速定位问题,并确保集群长期稳定运行。