使用kubeadm部署一套高可用k8s集群1.34 for Ubuntu
基于 ubuntu 使用 kubeadm 搭建集群, centos部署文档, 有疑问的地方可以看 官方文档 准备机器 我的机器详情如下, 配置至少为 4C4G hostname IP 作用 master1 10.0.0.11 k8s master 节点 master2 10.0.0.12 k8s master 节点 master3 10.0.0.13 k8s master 节点 worker1 10.0.0.21 k8s worker 节点 worker2 10.0.0.22 k8s worker 节点 每台机器都做域名解析,或者绑定 hosts(可选但建议) 基础环境配置 基础环境是不管 master 还是 worker 都需要的环境 禁用 swap 确保每个节点上 MAC 地址和 product_uuid 的唯一性 sudo cat /sys/class/dmi/id/product_uuid 修改 hostname 允许 iptables 检查桥接流量 关闭防火墙 安装 runtimeContainerdDocker先决条...
正在运行的Docker容器增加端口映射
为什么有这个需求假设有如下情况: 这个服务很重要,很多服务在连,停服不知道会有什么影响。 服务是运行在 docker 里的,但是 docker 启动命令找不到了。 想给 docker 容器临时增加一个端口映射。 方法一、使用工具反向代理这个方法性能不如上面的 iptables 规则,比如可以用 nginx 的 stream 四层代理,或者用 socat 一条命令搞定。 查看容器的 IP 地址 在结果中找到 NetworkSettings -> Networks -> <你的网络名称> -> IPAddress 方法二、参照 Docker 原生的方式docker 的 -p 命令来进行端口映射,本质上也是维护了一套 iptables 规则来实现的,docker-proxy 会维护 docker 需要的 iptables 规则,执行 iptables-save 可以查看所有的规则 (iptables-save 并不会真的 save,想保存 iptables 规则还需要额外的操作)。 获取容器的 IP 地址 在结果中找到 NetworkSet...
轻量级组网工具WireGuard
要先打开服务器的内核转发:net.ipv4.ip_forward = 1假设 WireGuard 自身的虚拟网段是 10.8.0.0/24, 给服务器分配的 IP 是:10.8.0.1,服务器的公网 IP 是:124.221.31.148 服务器基础配置 生成公私钥对先生成一些公私钥对,服务器需要 1 个,每个客户端 1 个。 那么服务器的配置文件 wg0.conf: AllowedIPs 表示这些 IP/段,发送到这个 Peer 上。 设置开机自启动: Client 1 配置 AllowedIPs 表示这些 IP/段,发送到这个 Peer 上。 Endpoint 是这个 Peer 的入口,这里配置的就是服务器的端口。 Client 2 配置 常用操作 wg-quick 可以自动创建网卡 实际案例从 client1 可以直接访问 client2 的虚拟 IP:根据 AllowIPs 配置,client1 的所有流量都会转发给 server,server 接收到请求 10.8.0.3 的流量,根据 server 的 AllowIPs ...
在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 数据写入到数据库了,找到这条数据: 清理不正确的数据: 再次转换: 这个时候数据库还原成原始的样子。 转换了表的字符集导致跨表查询的时候索引失效了,正确处理方式:不改表只转换字段的字符集:


