Ocserv VPN的安装和使用

由于ios的openvpn大陆地区无法安装,而员工又需要手机或PC登录VPN访问云上的资源,没办法,找了又找,终于,发现cisco的vpn还是能在苹果市场下载安装的,那就装个开源的Ocserv吧,别说还挺好,能分组控制路由的发布,非常不错 记录一下安装配置过程,使用Ubuntu 24.04的底版: apt update apt upgrade apt-cache show ocserv apt-get install -y ocserv ocserv --version 安装步骤就如上,非常简单,跟openvpn一样,配置文件就一个 /etc/ocserv/ocserv.conf, 编辑一下: # 认证方式为用户名密码认证 auth = "plain[passwd=/etc/ocserv/passwd]" # 开放端口 tcp-port = 443 udp-port = 443 # 证书 server-cert = /etc/ocserv/_.rendoumi.com.crt server-key = /etc/ocserv/_.rendoumi.com.key # 最多用户数 max-clients = 1024 # 绑定域名 default-domain = m.rendoumi.com # 分配的动态ip段 ipv4-network = 10.8.12.0 ipv4-netmask = 255.255.255.0 # 不路由 no-route = 10.0.0.0/255.0.0.0 no-route = 172.16.0.0/255.240.0.0 no-route = 192.168.0.0/255.255.0.0 # 发布路由 route = 10.8.2.15/32 route = 10.10.247.234/32 route = 10.10.240.37/32 说明:端口开在了443端口,证书用的是acme的免费证书,域名是m.rendoumi.com,ip段是10.8.12.0/24 ...

2025年08月19日 · 1 分钟 · 113 字 · 八戒

Vault使用AWS的federation_token进行交互

Vault的使用继续深入,通常情况下都是先拿到valut的root token,然后登录设置aws的认证,同时把aws的iam root凭据灌进去,然后write进行论转,这样凭据就只存在于vault之中了,没有泄露的可能。然后从这个root凭据再派生成各种使用时长有限制的临时凭据用。 但是,嘿嘿,我偏偏没有root凭据,因为我是外面管理员。只能用 federation_token 进行登录。 那怎么使用呢?方法如下: 首先在AWS的IAM建立两个policy # Federator 的policy,用于获得token { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "sts:GetFederationToken", "Resource": "*" } ] } # Change-self-access-keys 的policy,用于轮转key { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:ListUsers", "iam:GetAccountPasswordPolicy" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:*AccessKey*", "iam:GetUser" ], "Resource": [ "arn:aws:iam::*:user/${aws:username}" ] } ] } 然后在Vault中设置使用AWS secrets vault secrets enable aws # aws中需要对应IAM的权限 # 要么是真有aws iam的用户;要么是有一个role,和对应的临时用户;二选一 vault write aws/config/root access_key=YYY \ secret_key=XXX region=us-east-1 \ sts_endpoint=https://sts.us-east-1.amazonaws.com sts_region=us-east-1 # 轮转root凭据,这样root凭据就只存在于vault中了 vault write -force aws/config/rotate-root 使用方法: ...

2025年08月18日 · 1 分钟 · 142 字 · 八戒

vault使用external secret管理kubernetes secret

今天是2025年8月15日,大噩耗啊: external-secrets / external-secrets Link ⭐ 5416 | 🔀 1032 | Go 97.6% External Secrets Operator 项目暂停发布 由于维护团队规模过小,External Secrets Operator 决定暂停所有官方版本发布,直到重建足够的维护团队。 Key Takeaways 项目暂停所有官方版本发布,包括新功能、补丁和容器镜像。 将继续审核和合并社区的 PR,但不会提供 GitHub Discussions、Slack 或问题评论的支持。 需要至少五名长期维护者来确保项目的可持续发展。 鼓励依赖该项目的公司或团队积极参与贡献。 贡献者可通过填写表单或查看治理文档加入项目。 居然暂停发布了,那就抓紧时间把Vault跟它的集成记录下来: 一、首先必须在集群里安装Vault,然后安装external -secrets,都用helm装即可 helm repo add hashicorp https://helm.releases.hashicorp.com helm repo update helm install vault hashicorp/vault --set "server.dev.enabled=true" --set "injector.enabled=true" --namespace default helm repo add external-secrets https://charts.external-secrets.io helm repo update helm install external-secrets external-secrets/external-secrets --namespace external-secrets --create-namespace --set installCRDs=true 二、k8s授权,k8的授权体系就是 sa -> role -> rolebinding 那kubernetes会把pod中sa的Token注入到文件:/var/run/secrets/kubernetes.io/serviceaccount/token ...

2025年08月15日 · 4 分钟 · 842 字 · 八戒

k3s的安装

这篇是一个大水贴,只是为了记录k3s的安装 这个东西被Rancher用得纯熟,先搭建一个k3s集群,然后再其上装控制软件,再去控制其它集群,非常好的想法,值得借鉴 安装和删除都非常简洁,准备工作: apt update && apt upgrade -y # 三台机器分别设置 hostnamectl set-hostname master hostnamectl set-hostname worker-1 hostnamectl set-hostname worker-2 # vi /etc/hosts 127.0.0.1 master # 两外两台也分别设置 127.0.0.1 worker-1 # 第3台 127.0.0.1 worker-2 准备工作都弄好了。下面安装 curl -sfL https://get.k3s.io | sh - systemctl status k3s cat /var/lib/rancher/k3s/server/node-token # 加入新节点 curl -sfL https://get.k3s.io | K3S_URL=https://192.168.0.200:6443 K3S_TOKEN=<your-token-here> INSTALL_K3S_EXEC="--node-ip=<worker-ip>" sh - 删除也就一句 /usr/local/bin/k3s-uninstall.sh 可以反复进行安装

2025年08月08日 · 1 分钟 · 59 字 · 八戒

欧拉PageCache的内核编译

欧拉 Page Cache 的内核编译 PageCache提供了一种限制page cache的能力,能够对page cache的总量进行控制, 增强系统在数据库等page cache占比较高场景下的稳定性,积极释放缓存。 它提供了以下sysctl接口: vm.pagecache_limit_ratio:pagecache占系统总内存的百分比,[0, 100],0和100都表示功能关闭。 vm.pagecache_limit_reclaim_ratio:针对pagecache真实回收的比例,在实际回收时,总是比pagecache_limit_ratio的多回收一些,默认比例是2%。 vm.pagecache_limit_ignore_dirty:在回收时是否忽略脏页,默认忽略。因为对脏页的回收较耗时。 补丁是基于 openEuler-22.03-LTS 的,不适用于 24.03-LTS,代码都已不同了 编译过程如下: 一、安装好openEuler-22.03-LTS,磁盘留够空间,最少留20G 二、安装编译已经所需软件 dnf install -y rpm-build openssl-devel bc rsync gcc gcc-c++ flex bison m4 elfutils-libelf-devel dnf install -y python dnf install -y ncurses-devel dnf install -y dwarves 三、安装内核源代码 dnf install -y kernel-source 现在是2024年11月4日,内核版本是 linux-5.10.0-60.139.0.166.oe2203.x86_64,注意补丁的适用范围 四、打补丁 page.patch 将page.patch 放到 /usr/src cd /usr/src/linux-5.10.0-60.139.0.166.oe2203.x86_64 patch -p1 < ../page.patch 五、编辑内核版本号,EXTRAVERSION的版本号要大于当前内核版本,否则无法安装。当前是166,改成+1,167 cd /usr/src/linux-5.10.0-60.139.0.166.oe2203.x86_64 vi Makefile # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 SUBLEVEL = 0 EXTRAVERSION = -60.139.0.167.oe2203.x86_64 NAME = Kleptomaniac Octopus OPENEULER_MAJOR = 2203 OPENEULER_MINOR = 0 六、编译 ...

2025年08月08日 · 1 分钟 · 176 字 · 八戒

为极客天成改写一套CSI存储插件

极客天成有个很厉害的scaleflash网络文件系统,充分利用rdma的无损网络特性,并进一步发扬光大。研发出来了可以顶替EMC盘阵的存储系统,可以在其上跑Oracle等数据库系统,真的是国货之光了。 帮它们改写了一个csi的存储插件,记录一下,基于yandex的s3 csi而来,这样既可以跑到底层上提供文件块设备,也可以上升到类似NFS或者S3的层次提供文件系统,能满足大多数需求。那源代码就绝对不提供了,只说一下过程: CSI PLUGIN的使用方法: 一、导入镜像 csi存储插件的image cr.yandex/crp9ftr22d26age3hulg/csi-s3:0.42.66 文件:csi.tar 将文件放到所有worknode上,导入本地镜像库: ctr --address /run/k3s/containerd/containerd.sock -n k8s.io images import /root/csi.tar crictl -r unix:///run/k3s/containerd/containerd.sock images 看到有 cr.yandex/crp9ftr22d26age3hulg/csi-s3:0.42.66 既是导入成功 二、安装controller和nodeserver 安装driver 文件:driver.yaml kubectl apply -f driver.yaml 安装controller 文件:controller.yaml kubectl apply -f controller.yaml 安装nodeserver 文件:nodeserver.yaml 解释一下,controller是一个statefulset,整个集群运行一个即可;而nodeservershi则是一个daemonset,每个worknode都会运行一个副本 上面 worknode 是3个,所以有3个副本 三、scaleflash 块设备的使用 块设备最小单位是G,所以如果需求了100M,那也是1G。 首先必须定义一个storageclass,以后使用这一个storageclass就可以了: cat << EOF >scaleflash-storageclass.yaml --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: scaleflash provisioner: ru.yandex.s3.csi parameters: mounter: scaleflash clstID: "nvmatrix_101" fsType: "xfs" EOF kubectl apply -f scaleflash-storageclass.yaml 再定义pvc ...

2025年08月07日 · 4 分钟 · 712 字 · 八戒

vault使用agent验证approle生成.env环境变量

Vault是个很厉害的 secret 引擎了,不多说了,主要用于集中管理各种密码、密钥。 用来管理Kubernetes的凭据相当好,但是我们通常是自己开发的程序,然后需要读各种配置文件,比如连接DB的用户名,密码等等,最后连接到数据库。 那么这种情况下,如果管理好配置项呢? 方法如下,用approle读取Vault的配置信息: 一、启动vault引擎测试环境 首先启动vault引擎,测试,用Docker,方便创建和销毁 # 启动容器 # 我们手动指定了ROOT_TOKEN是root,这只用于测试环境 docker run -d --rm \ --add-host host.docker.internal:host-gateway \ --cap-add=IPC_LOCK \ --name vault \ -p 8200:8200 \ -e VAULT_DEV_ROOT_TOKEN_ID=root \ -e VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 \ hashicorp/vault --add-host host.docker.internal:host-gateway 这个个参数的作用是在容器的 /etc/hosts 文件中添加一个主机名和 IP 地址的映射。 --add-host: 这是 docker run 的一个选项,用来在容器的 /etc/hosts 文件中添加一个自定义的主机条目。 host.docker.internal: 这是主机名。在 Docker Desktop(macOS 和 Windows)中,host.docker.internal 是一个特殊的 DNS 名称,它会被解析为宿主机的内部 IP 地址。 host-gateway: 这是 docker 在较新版本中引入的一个特殊关键字。它代表了宿主机与 Docker 网络之间的网关 IP 地址。在许多 Linux 环境中,这个关键字会指向 Docker 的网桥 IP(例如 172.17.0.1)。 综合起来,--add-host host.docker.internal:host-gateway 的作用是: ...

2025年08月06日 · 2 分钟 · 339 字 · 八戒

上难度---->内网vps用lego申请route53 DNS证书并更新到BT宝塔

上一篇我们说了 Aws的EC2服务器用lego获得免费证书并更新到ACM,这下又来了个更加有难度的挑战: DNS解析是放在了AWS Route 53上,然后vps上跑着BT宝塔,用来代理转发开发环境的https证书 这个环境如何用lego来安全的申请到证书并配置宝塔呢?这回可不像EC2那样可以自动附加IAM角色了 我们先来看看lego的用法吧: https://go-acme.github.io/lego/dns/route53/ 语法如下: 继续看,看来必须需要IAM的凭据才可以,继续下拉,有使用IAM的policy,那我们必须创建一个Role角色,然后再建立一个代理用户,gen出key,通过这个代理用户的凭据来间接进行访问 步骤如下: 一、去route53,拿到arn 我们要拿到具体域名的zone ID,就是Z0打头的那一串 二、建立IAM实际工作的Role 首先建立一个Policy,route53AcmeCert { "Version": "2012-10-17 "Statement": [ "Effect": "Allow", "Action": "route53:GetChange", "Resource": "arn:aws:route53:::change/*" }, { "Effect": "Allow", "Action": "route53:ListHostedZonesByName", }, { "Effect": "Allow", "Action": [ "route53:ListResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/Z01111111111111111111" ] }, { "Effect": "Allow", "Action": [ "route53:ChangeResourceRecordSets" ], "Resource": [ "arn:aws:route53:::hostedzone/Z01111111111111111111" ], "Condition": { "ForAllValues:StringEquals": { "route53:ChangeResourceRecordSetsNormalizedRecordNames": [ "_acme-challenge.example.com" ], "route53:ChangeResourceRecordSetsRecordTypes": [ "TXT" ] } } } ] } 然后建立一个Role,RealUpdateCertRole,绑定上面的策略 ...

2025年07月29日 · 2 分钟 · 229 字 · 八戒

Postgres的wal和PITR时间点恢复

研究了Postgres的库数据恢复和转移,再来研究一下PITR按时间点恢复 类比到MySQL,因为我们是运维,不是专业的DBA,所以恢复到正确数据即可 那跟阿里云以及自建的MySQL恢复一样,首先都要有一个每天的基础备份,然后类比MySQL的Binlog,Postgres这里就相当于wal。 这么类比就对了,那么恢复过程的思路是一样的: 首先建立一个新的实例 第二步把每天的基础物理全备给恢复上去 第三步把之后的wal日志传到新实例,恢复到指定时间点 第四步最后把表或库Dump下来,灌入到旧实例的新表或新库 那我们一步一步来解释: 一、每天建立一个基础备份,这样在Base基础上,只需恢复当天的wal,速度够快 建立每天的Base基础物理备份 pg_basebackup -Ft -Pv -Xf -z -Z5 -U postgres -h localhost -p 5432 -D /pg_backup 解释一下: -Ft: 指定备份格式为 tar。 如果使用 tar 格式,备份会输出 tar 文件,并且不需要直接访问 PostgreSQL 数据目录。 -Pv: -P:显示备份进度。 -v:启用详情模式(verbose),显示更多日志。 -Xf: -X:控制 WAL 日志的处理方式,f 表示在备份中包含 WAL 文件(Write Ahead Logs),确保备份可以用于恢复到完整的一致状态。 -z: 启用压缩功能。 -Z5: 设置压缩级别为 5(压缩级别从 0 到 9,9 为最高压缩)。 -U postgres: 使用 postgres 用户来连接数据库。 -h localhost: 指定数据库主机为当前机器(localhost)。 -p 5432: 指定 PostgreSQL 监听端口为 5432(默认端口)。 -D /pg_backup: 将备份文件保存到指定路径 /pg_backup 中。 这样我们就在 /pg_backup 中有了备份文件,包括一个backup_manifest的文件清单,以及一个压缩包 ...

2025年07月28日 · 2 分钟 · 344 字 · 八戒

单机部署kafka用kraft不依赖zookeeper

上一篇说了用Docker部署kafka,后端不用zookeeper,改用kraft。 这一篇说说不用Docker,直接单机部署kafka用kraft的方法。 一、准备,虚机的话需要4cpu 8G内存 # 装好java java --version 建3个目录 # 放kafka的2进制可执行文件 mkdir -p /opt/kafka # 放kafka的日志文件 mkdir -p /var/log/kafka # 放kafka的数据文件 mkdir -p /var/lib/kafka 二、下载并配置kafka # 释放到指定目录 tar -xzf kafka_2.13-3.5.0.tgz -C /opt/kafka # 修改/opt/kafka/config/server.properties process.roles=broker,controller node.id=1 controller.quorum.voters=1@localhost:9093 listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093 log.dirs=/var/lib/kafka # 然后需要再追加到server.properties的部分 metadata.log.dir=/var/lib/kafka/metadata num.replica.fetchers=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 三、初始化kafka集群 # 生成一个uuid uuidgen dc66bcb0-758e-4360-843d-5ccb1da2ee74 # 初始化 cd /opt/kafka bin/kafka-storage.sh format -t <UUID> -c config/server.properties # 启动 bin/kafka-server-start.sh config/server.properties # 检查一下代理的状态 bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092 四、推送数据验证 ...

2025年07月28日 · 1 分钟 · 117 字 · 八戒