如何更改/设置k8s主节点internal-ip或public-ip?

时间:2019-11-13 09:56:47

标签: kubernetes k3s

我已经在云VM上安装了k3。 (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 / ...”。

如果我在云VM上运行ifconfig,则不会显示public-ip(49.xx.xx.xx)。因此,k3找不到正确的内部IP或公共IP。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

先决条件:

  • 所有计算机都必须位于同一专用网络内。例如192.168.0.0/24
  • 所有机器都需要相互通信。您可以使用$ ping IP_ADDRESS
  • 对其进行ping操作

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

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

enter image description here

在虚拟机之间建立连接

最重要的是检查机器是否可以相互连接。正如我所说,最好的方法就是对它们执行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空间中。

EDIT2:

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

频率:

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

主节点设置

主节点的部署与上面相同。唯一的区别是您需要获取他的公共IP地址。

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

  • $ ip a
  • $ ifconfig

设置工作节点

工作节点的部署仅在将主节点的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

所有节点都应在此处可见。

答案 1 :(得分:0)

我也遇到了同样的问题,终于找到了解决方案。 您可以使用--node-external-ip来启动服务器,例如sudo k3s server --node-external-ip 49.xx.xx.xx,并且代理需要配置env或以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也成功。

enter image description here

负载均衡器不会将公共IP切换为私有IP,当我使用git blame时,获取标记功能的添加时间为2019.10.26