ISP 路由器后面的 Kubernetes 集群
Kubernetes cluster behind ISP router
我正在尝试使用 3 raspberry pi 4 在家里创建一个 k3s 集群。
我为设置 nginx-ingress + letsencrypt pods 付出了很多努力。
实际上,它似乎可以工作,但我现在无法检查它。
现在我的问题如下:
我使用 ISP 路由器(橙色 Livebox)连接到互联网。
我的 3 个 RPI 已连接到它并具有以下 IP:
- 主人:192.168.1.20
- 节点 1:192.168.1.21
- 节点 2:192.168.1.22
我已经将我的域名链接到指向我的 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 并且仅在一个节点上存在。可能是它在节点重启之间迁移——你必须调整你的路由器。
我正在尝试使用 3 raspberry pi 4 在家里创建一个 k3s 集群。 我为设置 nginx-ingress + letsencrypt pods 付出了很多努力。 实际上,它似乎可以工作,但我现在无法检查它。
现在我的问题如下:
我使用 ISP 路由器(橙色 Livebox)连接到互联网。
我的 3 个 RPI 已连接到它并具有以下 IP:
- 主人:192.168.1.20
- 节点 1:192.168.1.21
- 节点 2:192.168.1.22
我已经将我的域名链接到指向我的 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 并且仅在一个节点上存在。可能是它在节点重启之间迁移——你必须调整你的路由器。