如何为 kubernetes 集群@home 设置 DNS 条目和网络配置(这里是菜鸟)

How to set DNS entrys & network configuration for kubernetes cluster @home (noob here)

我目前 运行 我自己的家庭服务器上的 Kubernetes 集群(在 proxmox ct 中,有点难以开始工作,因为我也在使用 zfs,但它现在运行了),设置如下:

如果我理解正确的话,k3s 交付时预装了作为 CNI 的 flannel,以及作为 Ingress Controller 的 traefik。

我已经在我的集群和 longhorn 上设置了 rancher,这些卷只是安装在代理内部的 zfs 卷,并且因为它们不在不同的硬盘上,所以我将副本设置为 1。我有一个朋友 运行 相同的设置(我们将它们设置在一起,就在昨天),我们计划通过 vpn 隧道加入我们的网络,然后为彼此提供存储节点作为异地备份。

到目前为止,我希望一切正确。

现在回答我的问题:我有一个静态 ip @home 和一个域,我已经将该域设置为我的静态 ip

类似的东西:(不知道dns条目实际上是如何写的,只是从我的头顶供您参考,这些条目运行良好。)

一个example.com。 [[我的 IP]]

CNAME *.example.com。 example.com

我目前已经为端口 80 和 443 将端口转发到我的一个主节点,但我不太确定你如何实际配置它,我的牧场主在之后抛出一个 503访问全局设置,但我没有更改任何内容。

所以现在我的问题是:如何实际配置端口转发,据我所知,k3s 预装了负载均衡器,但是如何为 ha 配置这些端口转发?从理论上讲,它指向的一个主节点可以停止工作,然后所有服务都无法再从外部访问。

假设您的应用程序在端口 80 和端口 443 上 运行ning,您的入口应该为您提供具有外部 ip 的服务,您可以将 dns 指向该端口。阅读下文了解更多信息。

看来你不是菜鸟啊!您的集群设置发生了很多变化。你问的问题回答起来有点复杂,我将不得不对你的设置做出一些假设,但我会尽力给你至少一些初步信息。

本教程包含大量重要信息,可以帮助您完成您正在做的事情。他们使用 kubeadm 而不是 k3s,如果你愿意,你可以跳过该部分并仍然使用 k3s。 https://www.debontonline.com/p/kubernetes.html

如果您要自己设置和安装 etcd,则不需要这样做,k3s 会为您创建一个 etcd 集群 运行 inside pods 在您的集群上。

负载平衡您的主节点


haproxy + keepalived 节点将被配置为指向端口 6443 (TCP) 上主节点的 ips,keepalived 将为您提供一个虚拟 ip,您将配置您的 kubeconfig(从 k3s 获得)到与那个ip交谈。在您的路由器上,您需要保留一个 IP(确保不要将其分配给任何计算机)。

这是一个很好的视频,解释了如何使用 nodejs 服务器执行此操作,但主节点的概念是相同的: https://www.youtube.com/watch?v=NizRDkTvxZo

负载平衡您的应用程序运行在集群中


使用 K8s 服务阅读更多相关信息:https://kubernetes.io/docs/concepts/services-networking/service/

基本上你需要一个外部 ip,我更喜欢用 metal lb 来做到这一点。

metal lb 为您提供具有外部 ip 的负载均衡器类型的服务


在创建初始主节点时将此标志添加到 k3s: https://metallb.universe.tf/configuration/k3s/

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

您需要在路由器上保留更多 ip,并将它们放在下面 yaml 的地址部分下。在此示例中,您将看到在 192.168.1.240 到 192.168.1.250

范围内有 11 个 ip

将此创建为文件示例 metallb-cm.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250
kubectl apply -f metallb-cm.yaml

使用这些 yaml 文件安装:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml

来源 - https://metallb.universe.tf/installation/#installation-by-manifest

入口

会需要一个负载均衡器类型的服务,使用它的外网ip作为外网ip

kubectl get service -A - 寻找你的入口服务,看看它是否有外部 ip 并且没有说 pending

我会尽力回答您的任何后续问题。祝你好运!