commit 947a0b085fb169c3bbdb424c2b01306c0f724f2b Author: Merlin-Xie Date: Thu Oct 16 11:10:40 2025 +0800 feat: init commit diff --git a/images/image1.png b/images/image1.png new file mode 100644 index 0000000..4c1984e Binary files /dev/null and b/images/image1.png differ diff --git a/images/image2.png b/images/image2.png new file mode 100644 index 0000000..a9965f7 Binary files /dev/null and b/images/image2.png differ diff --git a/nfs系统创建指南.md b/nfs系统创建指南.md new file mode 100644 index 0000000..af38478 --- /dev/null +++ b/nfs系统创建指南.md @@ -0,0 +1,51 @@ +# nfs系统创建指南 +意在创建一个可共享、跨节点可用的存储系统,供k3s、kubernetes使用的文件系统 + +**安装nfs-kernel** + +``` +sudo apt update +sudo apt install -y nfs-kernel-server +``` + +**创建共享目录** + +``` +mkdir -p /data/nfs +//编辑权限,测试使用777,生产环境可以换成特定uid +chmod -R 777 /data/nfs +``` + +**编辑配置文件** +向/etc/exports文件中追加以下内容 + +``` +/data/nfs 10.42.0.0/16(rw,sync,no_subtree_check,no_root_squash) +``` + +参数解释: + +rw:允许读写; + +sync:数据同步写入磁盘; + +no_subtree_check:关闭子树检查,提高性能; + +no_root_squash:允许 root 用户访问; + +10.42.0.0/16 是 k3s 默认 Pod 网络(可按实际调整)。 + +tips: 10.42.0.0/16是k3s所有pod的内部所在网段(对于集群所在宿主机而言) + + +**应用配置并启动服务** +``` +sudo exportfs -ra +sudo systemctl enable nfs-server --now +``` + +**确认服务状态** +``` +sudo systemctl status nfs-server +``` + diff --git a/rke2集群搭建指南.md b/rke2集群搭建指南.md new file mode 100644 index 0000000..9583399 --- /dev/null +++ b/rke2集群搭建指南.md @@ -0,0 +1,77 @@ +# rke2集群搭建指南 +rke2仅支持单宿主机单节点,否则会出现一堆问题 + + +**前期准备** +根据官方文档,进行kubectl工具安装 +依次执行: +``` +curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" +curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" +echo "$(cat kubectl.sha256) kubectl" | sha256sum --check //验证输出是否为ok,判断文件下载是否有误 +sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl //安装kubectl +``` +安装完成后,可以执行kubectl version --client 查看当前版本 + +根据官方文档,进行rke2的安装 +执行: +``` +curl -sfL https://get.rke2.io | sh - +``` +国外链接安装需要挂梯子,建议使用国内下载链接 +``` +curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh - +``` + +#### 关键 + +**如果你需要使用非localhost访问集群kubernetes api,需要添加--tls-san {machine.ip}** +我是这样操作的: +首先运行 +``` +systemctl enable rke2-server +``` +不出意外,应该会输出service文件位置,例如我的: +![alt text](./images/image1.png) + +使用nano打开,找到execstart命令组的rke2 server +追加内容 --tls-san {machine.ip} +例如这样: +![alt text](./images/image2.png) +保存退出 + +**关于镜像拉取** +个人认为躲不掉,配置以下环境变量的事情 +根据.service文件可以得知,systemd启动rke2-server时会读取以下目录的环境变量: +EnvironmentFile=-/etc/default/%N +EnvironmentFile=-/etc/sysconfig/%N +EnvironmentFile=-/usr/local/lib/systemd/system/%N.env + +%N为服务名 + +于是可以直接创建环境变量文件,这里我选择了nano /etc/sysconfig/rke2-server(文件夹可能提示不存在,创建一个即可) +添加如下内容: +``` +HTTP_PROXY=http://127.0.0.1:7897 +HTTPS_PROXY=http://127.0.0.1:7897 +NO_PROXY=127.0.0.1,localhost,10.0.0.0/8,192.168.0.0/16 +``` +10.0.0.0/8的设置是因为我的隧道也是10.0.0.0/24,所以放宽了规则,避免隧道流量走代理 + +到这里,配置就基本上完成了,最后记得执行 +``` +sudo systemctl daemon-reload +``` + + +**运行** +执行命令 +``` +systemctl start rke2-server +``` + +等待一段时间,成功后在/etc/rancher/rke2目录下有rke2.yaml,这个文件相当于集群最高管理员的密钥 +可以直接使用rke2自带的kubectl,也可以用全局的; +全局的话有两个办法:一个是全局变量的形式,另一个是直接创建或追加集群、用户内容到~/.kube/config + +至此,rke2集群便可以正常运行了 \ No newline at end of file diff --git a/ssh公私钥配置.md b/ssh公私钥配置.md new file mode 100644 index 0000000..dbf7927 --- /dev/null +++ b/ssh公私钥配置.md @@ -0,0 +1,8 @@ +# 配置ssh密钥快速指南 +配置密钥可以实现快速登录就是了 + +运行监听tls证书的脚本pod,会初始化ssh公私钥 +将公钥复制到被连接服务器对应用户的.ssh/authorized_key里面保存 + +**重点** +需要进入该pod手动进行一次ssh连接,目的是接受并保存指纹信息,脚本自动监听并没有这个机制,但是这是必须的 \ No newline at end of file diff --git a/利用scp和ssh实现中转服务器证书配置自动同步.md b/利用scp和ssh实现中转服务器证书配置自动同步.md new file mode 100644 index 0000000..d1624a2 --- /dev/null +++ b/利用scp和ssh实现中转服务器证书配置自动同步.md @@ -0,0 +1,68 @@ +# 利用scp和ssh实现中转服务器证书配置自动同步 + +**背景** +博主使用的架构是 +用户-->中转服务器nginx反代-->wireguard-->rke2集群网关nginx + +因为有中转,tls握手需要在nginx实现一次; +因为有wireguard(自己会加密),所以tls可以终止与中转服务器nginx; + +通过搜索资料得知,这样也可以实现自动化,利用scp和ssh,创建一个pod监听tls证书生成 + +然后分成nginx需要的pem和key,连同server配置块一同上传到中转服务器 + +scp需要登录用户对文件夹有写入权限,这一点有时候比较难注意到 +因此推荐使用sudo tee的方式,这样可以在服务器配置该用户sudo某些指令不需要使用密码,ssh连接使用bash,更加方便 + + +**操作** +使用预先创建的ssh密钥或者让pod自己生成ssh密钥 + +自己创建的密钥,打包进入容器后记得设置权限(私钥600,公钥644),否则ssh-server不会使用 +上传例如这样: +``` + ssh_command = [ + "ssh", f"{NGINX_USER}@{NGINX_HOST}", + f"sudo tee {remote_file} > /dev/null" + ] +``` + +编写好脚本后在服务器运行,我使用tls-sync.yaml创建了一个pod,为了使pod有权限监听全部命名空间,需要创建一个serviceAccount并绑定pod +``` +# serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: secret-watcher + namespace: basic +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: secret-watcher-role +rules: + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: secret-watcher-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: secret-watcher-role +subjects: + - kind: ServiceAccount + name: secret-watcher + namespace: basic + +``` +namespace替换成pod运行的位置 + +使用kubectl apply应用serviceaccount.yaml和tls-sync.yaml + +确保pod正常运行后,及时将ssh密钥处理好,然后进入容器手动进行一次ssh连接以信任并保存指纹 + +至此,监听程序正常运行 \ No newline at end of file diff --git a/远程节点加入指南.md b/远程节点加入指南.md new file mode 100644 index 0000000..746df4e --- /dev/null +++ b/远程节点加入指南.md @@ -0,0 +1,37 @@ +# 基于本地k3d创建的集群的远程节点加入操作指南 + +**准备工作** + +1、远程节点主机安装k3s + +``` +curl -sfL https://get.k3s.io | sh - +``` + +-sfl可以不要 + +2、获取节点密钥node-token + +一般k3d任意节点都有,建议server节点查看 + +在/var/lib/rancher/k3s/server/node-token + + + +**执行命令** + +``` +curl -sfL https://get.k3s.io | K3S_URL=https://:6443 K3S_TOKEN='' sh -s - agent --node-name +``` + +等待执行结束,k3s-agent服务启动成功即可 + + + + + +tips: + +执行命令这一步大概率需要梯子,如果该节点主机自己配置了vpn,那就再终端export一下就好 + +如果没有的话,参考”利用反向隧穿使用宿主机vpn“