1

我已经在云虚拟机上安装了 k3s。(k3s 与 k8s 非常相似。)

k3s 服务器作为主节点启动。

并且主节点的标签显示 internal-ip 是 192.168.xxx.xxx。并且主节点的注解显示public-ip也是192.168.xxx.xxx。

但是CloudVM的真实公网ip是49.xx.xx.xx。所以来自另一台机器的代理无法连接这个主节点。因为代理总是尝试连接代理“wss://192.168.xxx.xxx:6443/...”。

如果我在 Cloud VM 上运行 ifconfig,则不会显示 public-ip(49.xx.xx.xx)。所以 k3s 找不到正确的 internal-ip 或 public-ip。

我尝试使用 --bind-address=49.xx.xx.xx 启动 k3s,但启动失败。我猜没有 NIC 与这个 IP 地址绑定。

如果我尝试创建地址为 49.xx.xx.xx 的虚拟网卡,如何解决此问题?

4

2 回答 2

4

连接 Kubernetes 主节点和节点的最佳选择是使用专用网络。

如何设置 K3S 主节点和单节点集群:

先决条件:

  • 所有机器都需要在同一个专用网络内。例如 192.168.0.0/24
  • 所有机器都需要相互通信。您可以使用以下命令对它们执行 ping 操作:$ ping IP_ADDRESS

在此示例中,有 2 个虚拟机:

  • 主节点 (k3s),私有 IP 为 10.156.0.13
  • 私有 IP 为 10.156.0.8 的工作节点 (k3s-2)

在此处输入图像描述

建立虚拟机之间的连接

最重要的是检查机器是否可以相互连接。正如我所说,最好的方法就是 ping 它们。

供应主节点

要在主节点上安装 K3S,您需要从 root 用户调用命令:

$ curl -sfL https://get.k3s.io | sh -

此命令的输出应如下所示:

[INFO]  Finding latest release
[INFO]  Using v0.10.2 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v0.10.2/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v0.10.2/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

检查主节点是否正常工作:

$ kubectl get nodes

上述命令的输出应该是这样的:

NAME   STATUS   ROLES    AGE     VERSION
k3s    Ready    master   2m14s   v1.16.2-k3s.1

使用以下命令从主节点检索IMPORTANT_TOKEN :

$ cat /var/lib/rancher/k3s/server/node-token

此令牌将用于将代理节点连接到主节点。复制它

将代理节点连接到主节点

确保节点可以与主节点通信。之后,您可以从 root 用户调用命令:

$ curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_NODE_IP:6443 K3S_TOKEN=IMPORTANT_TOKEN sh -

将您的 IMPORTANT_TOKEN 粘贴到此命令中。

在这种情况下,MASTER_NODE_IP 是 10.156.0.13。

此命令的输出应如下所示:

[INFO]  Finding latest release
[INFO]  Using v0.10.2 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v0.10.2/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v0.10.2/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO]  systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO]  systemd: Starting k3s-agent

测试

在主节点上调用命令以检查代理是否连接成功:

$ kubectl get nodes

您之前添加的节点应该在此处可见:

NAME    STATUS   ROLES    AGE     VERSION
k3s     Ready    master   15m     v1.16.2-k3s.1
k3s-2   Ready    <none>   3m19s   v1.16.2-k3s.1

上面的输出得出的结论是配置已正确进行。

EDIT1:从这一点开始,您可以部署 pod 并将它们公开到公共 IP 空间。

编辑2:

您可以在公共 IP 网络上连接 K3S 主节点和工作节点,但有一些先决条件。

先决条件:

  • 主节点需要打开 6443/TCP 端口
  • 确保主节点已保留静态 IP 地址
  • 确保将防火墙规则配置为仅允许通过工作节点的 IP 地址进行访问(节点的静态 IP 地址可以对此有所帮助)

主节点供应

主节点部署同上。唯一的区别是你需要得到他的公共IP地址。

您的主节点不需要在以下命令中显示您的公共 IP:

  • $ ip a
  • $ ifconfig

供应工作节点

工作节点的部署不同之处仅在于将主节点的IP地址从私有IP地址更改为公共IP地址。从 root 帐户调用此命令:
curl -sfL https://get.k3s.io | K3S_URL=https://PUBLIC_IP_OF_MASTER_NODE:6443 K3S_TOKEN=IMPORTANT_TOKEN sh -

测试集群

要确保节点正确连接,您需要调用命令:

$ kubectl get nodes

输出应该是这样的:

NAME    STATUS   ROLES    AGE   VERSION
k3s-4   Ready    <none>   68m   v1.16.2-k3s.1
k3s-1   Ready    master   69m   v1.16.2-k3s.1
k3s-3   Ready    <none>   69m   v1.16.2-k3s.1
k3s-2   Ready    <none>   68m   v1.16.2-k3s.1

所有节点都应该在这里可见。

于 2019-11-15T11:00:07.633 回答
1

我也遇到了同样的问题,终于找到了解决办法。--node-external-ip您可以像这样启动您的服务器sudo k3s server --node-external-ip 49.xx.xx.xx,并且代理需要配置环境或启动sudo k3s agent --server https://49.xx.xx.xx:6443 --token ${K3S_TOKEN},然后您的本地设备(边缘节点)来自私有 IP 可以连接公共云。

标志用法是(listener) IP address that apiserver uses to advertise to members of the cluster (default: node-external-ip/node-ip)

这张图是我的电脑连接远程服务器,我测试了一下,raspberry 4B也成功了。

在此处输入图像描述

负载均衡器没有将公网IP切换到私网IP,当我使用git blame get flag feature时添加时间是2019.10.26

于 2020-03-18T07:35:28.200 回答