LOADING

加载过慢请开启缓存 浏览器默认开启

记一次Kubernetes集群的完善

前言

我们成功搭建起了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传不上去文件了

chrome_4uaXe8sHGI.png

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

一看Openlist日志也没报错

chrome_lCpCbW0HKm.png

也就是说是Ingress的锅

chrome_p3Tqn3QgUC.png

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

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