记一次Kubernetes集群的完善

1326 字
7 分钟
记一次Kubernetes集群的完善

前言#

我们成功搭建起了K8s 接下来我们需要搭建一些额外的服务来满足我的需求

包管理器Helm#

类似于apt 有了之后我们就不用kubectl 后面跟一坨yml了

在Master节点上输入

Terminal window
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

Ingress-Nginx#

思来想去还是选择Nginx而不是Traefik,证书的解决我们可以用另一个服务

Terminal window
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace

其实还是要跟一坨东西

然后我们就发现有个LoadBalance的Ingress一直在Pending

怎么回事呢

当然是因为我们没有配置负载均衡了

MentalLB#

Terminal window
helm repo add metallb https://metallb.github.io/metallb
helm install metallb metallb/metallb

然后我们需要定义它的行为

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: default-address-pool
namespace: metallb-system
spec:
addresses:
- 192.168.0.240-192.168.0.250 #这改成你想让她分配的IP地址段 不要和路由器上DHCP的重合
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2-advertisement
namespace: metallb-system

然后kubectl apply -f这个yml

测试一下#

测试一下Ingress正不正常:Apply这个yml

apiVersion: apps/v1
kind: Deployment
metadata:
name: test-nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: test-nginx
template:
metadata:
labels:
app: test-nginx
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: test-nginx
namespace: default
spec:
selector:
app: test-nginx
ports:
- port: 80
targetPort: 80
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: nginx.k8s.lan
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-nginx
port:
number: 80

他会生成一个Nginx的Deployment 一个指向Deployment的Service 一个指向Service的Ingress 并且地址为nginx.k8s.lan

Terminal window
kubectl get svc -n ingress-nginx

看到ingress-nginx-controller拥有了ExternalIP 就没问题 把dns解析指向这个ip

浏览器访问nginx.k8s.lan 能看到欢迎界面就是成功了

题外话:Cilium的更换#

为啥要换呢 很简单 只是我看到了Cilium支持Hubble 可观测性强

换他 能看到各个Pod的网络拓扑 这多酷炫(

这里参考的这个blog

Longhorn#

K8s默认的没有持久化存储,文件持久化是单节点的

我们需要Longhorn去分布进行持久化存储

Ubuntu默认包含了Longhorn所需要的Open-iscsi

所以直接装就好

Terminal window
helm repo add longhorn https://charts.longhorn.io
helm repo update
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.10.0

然后为了解锁完全体的Longhorn 也就是多节点读写 需要安装nfs tools

需要在所有节点上执行

Terminal window
sudo apt-get install -y nfs-common

Dashboard#

我觉得最好用的应该是国产的Kuboard

他这里推荐用另一台宿主机的docker跑

我们也可以用Static Pod

详情去看文档把 因为这个挺麻烦的

以前服务的迁移#

Authentik#

说是迁移不如说重新搭建 反正我也没做什么 不如推翻重来

如果你已经部署了Longhorn和上面的服务 Authentik应该没啥问题 直接能跑

按照文档跑就好

https://docs.goauthentik.io/install-config/install/kubernetes/

AquaDX#

这个就不能重新搭建了 之前用了好久的游戏数据都在里面

我们看到Github上面有提到如果想反向代理的话有一些指南:

AquaDX 使用哪些端口?
80:ALL.Net,游戏端点
8443:计费
22345:Aime
我怎样才能在反向代理后面托管它?
以下是一些提示:
ALL.Net 和游戏端点可以代理
计费端点可以通过代理进行,但需要额外的步骤:启用弃用的TLS_RSA_*密码并使用自签名ib.naominet.jpTLS 证书 - 或者干脆禁用它
不要代理 Aime 端点:它是 TCP 流量,而不是 HTTP
不要压缩流量:如果可以的话,按原样进行代理
不要使用 CDN 代理:例如 Cloudflare
使用您的公共 IP 或主机名allnet.server.host进行设置application.properties
您可以更改内部端点端口(aqua <-> 代理),但暴露的外部端口需要与默认端口相同(代理 <-> 游戏)

说白了就是:

80可以代理

8443有点麻烦

22345不推荐代理

那还说啥 我们直接给他分配一个LoadBalance得了

这个简单 问题是数据怎么迁移呢

一开始我想的是在原机子上打包docker

但我傻逼了对不起 挂载的卷不会打包进镜像

那我们只能手动打包数据然后用initPod手动解压进PVC里

然后还有一个关键问题:

之前为了实现让别人访问 我用的是ZeroTier去组虚拟局域网

这玩意工作在二层 需要修改host主机的tun配置

在K8s里肯定是不允许的 我也不敢试 等下把我集群搞炸了

想了下,我们还是可以用三层的组网方案

ZeroTier主要是给sdvx联机用,因为SDVX的联机是局域网广播 三层是不转发的

扯远了

简而言之,我们需要一个能直接在集群内工作,负责零信任网络转发的服务

详情请看新一篇()

Openlist#

这个手写一下Development就好,我为什么单独拿出来说呢

因为我发现在用Ingress反代之后,我的Restic传不上去文件了

chrome_4uaXe8sHGI.png
chrome_4uaXe8sHGI.png

我一开始以为是百度又整了什么新幺蛾子,直到我把OpenList直接用LoadBalanceIP暴露出来之后发现又没问题了

一看Openlist日志也没报错

chrome_lCpCbW0HKm.png
chrome_lCpCbW0HKm.png

也就是说是Ingress的锅

chrome_p3Tqn3QgUC.png
chrome_p3Tqn3QgUC.png

我们直接让他无限制Bodysize就好

metadata:
name: openlist
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

记一次Kubernetes集群的完善
https://cainongw.github.io/posts/kubernetes-buildup2/
作者
Cainong
发布于
2025-10-08
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
记一次Kubernetes完整集群的搭建
HomeLab 写在前面 太好了孩子们 这次基本全都是命令行操作 我不用截图了 以下几乎全是命令 几乎一张图片没有 如果你想做为参考的话请仔细阅读每一行 前言 昨天我在折腾Authentik认证服务的时候 一直在思考用什么反代服务 常见的可以用Nginx Proxy Manager,Caddy,Traefik 这里面我觉得比较好用的是Traefik,但是即使是Traefik
2
开源WAF 雷池在K8s上的搭建
HomeLab 前言 换了条宽带,现在我拥有动态的公网IPV4地址了 我打算暴露一些服务出去以便我使用 例如Openlist RDP Gitlab 但是 我并不打算公开 我只打算自己使用 前面我们搭建了Authentik作为SSO单点登录,刚好雷池WAF支持通过单点登录鉴权来允许访问 这样我就可以实现把ESXi挂到公网 但是不登录都过不了防火墙
3
记一次filebrowser的搭建
Kubernetes 起因 我以为这个就是写个Deployment然后挂载NFS就得了 本来都不打算写blog的 结果后面发现折腾了我几个小时才好 还是有一点坑的 所以就写一下
4
记一次基于small-step对局域网内证书的自签名
HomeLab 我们已经解决了K8s内集群的证书 现在需要解决我们直接跑在虚拟机上的一些服务的证书签名了 之前是自己签名 现在发现可以用根证书+ACME统一签名 因为是根证书 实际上可以在Ingress里设置任何一个域名(即使他已经存在) 甚至可以把baidu换成google(
5
记一次基于OpenWRT+Nginx反代的局域网服务小改造
HomeLab 前言 随着服务器上面跑的东西越来越多,docker跑的服务也越来越多了 我常访问所以我可以记住每个虚拟机的ip或者docker的端口 但是每次在浏览器输入都得输入192然后手动补全,有时候甚至得冒号加端口号才可以 太特么麻烦了
随机文章 随机推荐
Profile Image of the Author
Cainong
Caiw there 👋
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
站点统计
文章
38
分类
16
标签
48
总字数
57,650
运行时长
0
最后活动
0 天前

文章目录