ISP 路由器后面的 Kubernetes 集群

Kubernetes cluster behind ISP router

我正在尝试使用 3 raspberry pi 4 在家里创建一个 k3s 集群。 我为设置 nginx-ingress + letsencrypt pods 付出了很多努力。 实际上,它似乎可以工作,但我现在无法检查它。

现在我的问题如下:

我使用 ISP 路由器(橙色 Livebox)连接到互联网。

我的 3 个 RPI 已连接到它并具有以下 IP:

我已经将我的域名链接到指向我的 ISP 盒子 IP 的动态 DNS(是的,这个 sh*tty 盒子无法处理永久 IP)。

负载均衡器的范围从 192.168.1.240 到 192.168.1.250。

现在我的问题是如何将端口从 ISP 转发到负载均衡器?

我有一个配置 UI 它允许我将端口重定向到现有的设备 IP,但是作为 loadbalancer IP 不是真实设备,我不能 select 它。

对不起,我是 kubernetes 的菜鸟。 如果您需要更多详细信息,请询问,我会提供。

提前致谢。

对于您当前的案例:

您需要在您的网络中引入一个新的 k3s 独立组件,它可以是像 HAProxy 这样的反向代理,它可以设置为在 3 个 IP 之间平衡请求。

或者:

#1 在没有 Traefik 和 Service LoadBalancer 的情况下重建你的 k3s 集群:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='server --no-deploy servicelb --no-deploy traefik --flannel-backend=host-gw --write-kubeconfig-mode 644' sh -

#2 部署 MetalLB

https://metallb.universe.tf/configuration/#layer-2-configuration 配置:

---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.20-192.168.1.22 

这将为集群添加一项功能,其中任何负载均衡器类型的服务都将绑定到节点的 IP。

我自己的例子:

NAME     STATUS   ROLES                  AGE     VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
node02   Ready    <none>                 13d     v1.20.2+k3s1   192.168.1.202   <none>        Alpine Linux v3.13   5.10.12-0-virt   containerd://1.4.3-k3s1
node03   Ready    <none>                 2d11h   v1.20.2+k3s1   192.168.1.203   <none>        Alpine Linux v3.13   5.10.12-0-virt   containerd://1.4.3-k3s1
node01   Ready    control-plane,master   13d     v1.20.2+k3s1   192.168.1.201   <none>        Alpine Linux v3.13   5.10.12-0-virt   containerd://1.4.3-k3s1
NAME                        TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                     AGE   SELECTOR
kube-dns                    ClusterIP      10.43.0.10      <none>          53/UDP,53/TCP,9153/TCP                      13d   k8s-app=kube-dns
metrics-server              ClusterIP      10.43.254.20    <none>          443/TCP                                     13d   k8s-app=metrics-server
traefik                     LoadBalancer   10.43.130.1     192.168.1.201   80:31666/TCP,443:31194/TCP,8080:31199/TCP   13d   app=traefik

#3 按照这个设置让 traefik 运行而不是 nginx https://github.com/sleighzy/k3s-traefik-v2-kubernetes-crd 作者使用 2 rpis.

#4 从您的路由器,您应该将端口 80/443 转发到有流量的节点。 您可以在没有外部 LoadBalancer 的情况下摆脱困境,因为该设置中的服务 traefik 被定义为 LoadBalancer 并且仅在一个节点上存在。可能是它在节点重启之间迁移——你必须调整你的路由器。