在Kubernetes中部署一个单节点Elasticsearch
Elasticsearch 有自己的高可用集群机制,不建议再用 k8s 管理 适用于临时使用一下、或者测试使用 数据存储问题为了测试使用,我也没有用 pvc 来管理数据,而是选择了 hostpath,那么为了重启也可以正常访问数据,需要将 es 固定在一个节点上。 这里我使用 nodeSelector 指定了一个标签来选择节点。 问题日志停留在:Created elasticsearch keystore in /usr/share/elasticsearch/config/elasticsearch.keystore然后自动重启 到主机的 /data/elasticsearch 目录查看,是空的 这种情况是没有权限写入,用 pvc 没有这个问题,直接挂载 hostpath 就会有权限问题,因为 es 这个容器不是使用 root 运行的进程,而是用的 uid:1000 这个用户来运行的。 解决方法是:使用 init container 来修复目录权限 ,init container 太适合来做这个事情了 这样就解决了权限问题: 部署 kibana
使用openssl制作自签名双向认证(mTLS)证书
可以直接使用我制作好的工具,支持自签名 HTTPS 证书和双向认证证书,纯 shell 脚本,支持 Docker 使用,一键生成证书:https://github.com/iuxt/my_cert 双向认证用途是什么: 双向认证就是客户端需要携带证书来请求服务器,证书校验通过了才会正常返回。比如说我有个网站只有自己访问,就可以配置双向认证,自己电脑安装一下证书就可以访问,还可以通过吊销证书的方式来禁止对应的人访问网站。 CA 证书生成 CA 私钥 生成一个 ca.key 文件 生成 CA 证书非交互式创建交互式创建 需要交互式输入: 提示 含义 输入内容 Country Name 国家 CN State or Province Name 省 Shanghai Locality Name 市 留空 Organization Name 组织名,公司名 iuxt Organizational Unit Name 团体名 留空 Common Name 你的名字或域名 zhanglikun Email Address 电子邮箱 iuxt@qq.com...
minio自建对象存储
单域名方式部署单域名就是把 minio 的 api 接口和 web 管理控制台放在一个域名下,比如: 管理控制台:https://minio.xxx.com/ui/API 接口:https://minio.xxx.com docker 部署 这里我指定了 network,我的 nginx 也是用的这个 network,可以直接用 容器名字 来访问 .env 配置 nginx 配置 独立 web 控制台方式部署可以将 web 控制台独立出来,考虑到安全性,web 控制台不需要开放到公网,可以将控制台独立域名。比如: 管理控制台:https://s3-admin.example.comAPI 接口:https://s3.example.com docker 部署 这里我指定了 network,我的 nginx 也是用的这个 network,可以直接用 容器名字 来访问 .env 配置 nginx 配置我给控制台开了双向认证,如果不需要,删除掉这三行配置。ssl_client_certificate ssl/ca.crt; ssl_verify_client on...
ingress-nginx 使用自定义的nginx配置
新版 ingress 增强了 安全性, 它认为用户自己写的 nginx 配置文件不安全,所以又加了限制。(允许自定义 nginx 配置有一定安全风险,酌情修改!)我的 ingress 版本是: 1.12.2 比如有个需求,Spring Boot 写的程序有个 /actuator 路径,安全审查不通过,如果是个 nginx 可以通过: 来直接让它返回 404 configmap 加上这两个配置:allow-snippet-annotationsannotations-risk-level 风险等级,在这里可以查到:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations-risk/ ingress 配置 server-snippet 作用于 server 块configuration-snippet 作用于 location 块 注意: 当启用 use-regex 时,所有路径都会被当作正则表达式处理,会影响到匹配。
P12格式证书与PEM格式转换
P12 证书是整合了公钥和私钥的,还可以给 P12 证书设置密码。 P12 转换为 PEM 这种是加密的 PEM 私钥 也可以将加密的 PEM 私钥转换成未加密的 PEM 私钥 未加密的 PEM 私钥长这样 PEM 公钥和私钥转换成 P12
使用blackbox-exporter做域名监控
blackbox 创建模块对应的 blackbox exporter 的配置文件: 其中: http_2xx: get 请求 200 认为是正常的 http_post_2xx: post 请求 200 认为是正常的 tcp_connect: 测试端口是不是通的 icmp:能否 ping 通 http_accept_404: get 请求,404 也认为是正常的 配置 PrometheusHTTP 监控 只有 200 是正常请求 HTTP 监控 2xx 和 404 都认为是正常请求 TCP 端口监控 验证 PromQL 常用查询
记一次MySQL字符集转换导致的故障
业务报错如下: 经过排查为 MySQL 字符集 utf8 ,当插入 emoji 表情包的时候,就会报错。 用 python 查看这是个什么: b'\xF0\x9F\x90\x92'.decode('utf-8') 尝试将表转换成 utf8mb4 字符集 结果导致 数据库 CPU 飙升 于是进行回滚操作: 结果报错: 原因是执行完这段时间已经有 emoji 数据写入到数据库了,找到这条数据: 清理不正确的数据: 再次转换: 这个时候数据库还原成原始的样子。 转换了表的字符集导致跨表查询的时候索引失效了,正确处理方式:不改表只转换字段的字符集:
使用双向认证增加git仓库安全性
双向认证是用户需要提供证书来访问服务器,没有证书的用户不允许访问服务器,并且在服务端可以实现吊销指定用户的证书来实现禁止用户访问。配置 https 双向认证会影响到使用 https 协议拉取和推送代码,以及 git lfs 的正常使用 (lfs 使用 https 协议),ssh 协议使用代码仓库不受影响。 配置双向认证我是用的自签名证书,自签名证书的文档可以查看 制作和使用自签名证书 或者我的开源项目:https://github.com/iuxt/my_cert.git 服务器上的 nginx 上配置 配置好之后,打开网页会提示: 操作系统信任 CA 证书WindowsWindows 将证书导入到系统的个人分类下。 macOSmacOS– 待补充。 LinuxDebian 系 Linux: RedHat 系 Linux: 信任完成后,浏览器重启后再次打开 git 网页:选择证书,点击确定,就可以正常打开页面了。 Git 客户端配置上面的配置,浏览器已经可以正常携带证书来访问指定的服务了,但是 git 客户端还不行,需要对 git 仓库进行配置。
Prometheus自动监控K8S集群中的service
定义部署在 Kubernetes 上的 Prometheus 是有自动发现机制的,可以自动监控 service 通不通、监控 ingress 上的域名通不通等等。 HTTP Get 监控service 的 HTTP Get 监控 ingress 的 HTTP Get 监控 收集业务 Metrics比如有的业务会暴露出 metrics,比如 Prometheus 的各种 exporter,一个一个接入比较麻烦,也可以利用 service 自动发现的形式接入 Prometheus 在需要接入监控的 service 上配置注解即可实现自动接入,注解如下:
Grafana 查询SQL 自定义变量
比如一个 dashboard 里面有很多通用的数据,不想每个 panel 面板都手动修改一遍,可以定义个全局的变量,所有面板都调用这个变量,后续需要修改的时候,直接改变量即可。 面板设置里添加变量这里添加好了之后,先打开 show on dashboard 显示 然后选择自己需要的数据,保存的时候,勾选 update default variable values 保存当前选择的值最后再把变量隐藏起来。 在查询的时候调用变量 如何调试点击面板设置上的 Query inspector 查询 里 可以看到原始的数据。

