如何为 kubernetes 集群@home 设置 DNS 条目和网络配置(这里是菜鸟)
How to set DNS entrys & network configuration for kubernetes cluster @home (noob here)
我目前 运行 我自己的家庭服务器上的 Kubernetes 集群(在 proxmox ct 中,有点难以开始工作,因为我也在使用 zfs,但它现在运行了),设置如下:
- lb01: haproxy & keepalived
- lb02: haproxy & keepalived
- etcd01: etcd 节点 1
- etcd02: etcd 节点 2
- etcd03: etcd 节点 3
- master-01:k3s 处于服务器模式,带有不接受任何作业的污点
- master-02: 同上,只是用master-01的token加入
- master-03:与master-02相同
- worker-01 - worker-03:k3s 代理
如果我理解正确的话,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
我会尽力回答您的任何后续问题。祝你好运!
我目前 运行 我自己的家庭服务器上的 Kubernetes 集群(在 proxmox ct 中,有点难以开始工作,因为我也在使用 zfs,但它现在运行了),设置如下:
- lb01: haproxy & keepalived
- lb02: haproxy & keepalived
- etcd01: etcd 节点 1
- etcd02: etcd 节点 2
- etcd03: etcd 节点 3
- master-01:k3s 处于服务器模式,带有不接受任何作业的污点
- master-02: 同上,只是用master-01的token加入
- master-03:与master-02相同
- worker-01 - worker-03:k3s 代理
如果我理解正确的话,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
我会尽力回答您的任何后续问题。祝你好运!