前言
我们成功搭建起了K8s 接下来我们需要搭建一些额外的服务来满足我的需求
包管理器Helm
类似于apt 有了之后我们就不用kubectl 后面跟一坨yml了
在Master节点上输入
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Ingress-Nginx
思来想去还是选择Nginx而不是Traefik,证书的解决我们可以用另一个服务
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
其实还是要跟一坨东西
然后我们就发现有个LoadBalance的Ingress一直在Pending
怎么回事呢
当然是因为我们没有配置负载均衡了
MentalLB
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
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
所以直接装就好
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
需要在所有节点上执行
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传不上去文件了

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

也就是说是Ingress的锅

我们直接让他无限制Bodysize就好
metadata:
name: openlist
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"