我已经在云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的虚拟网卡?
答案 0 :(得分:1)
连接Kubernetes主节点和节点的最佳选择是使用专用网络。
$ ping IP_ADDRESS
在此示例中,有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空间中。
您可以在公共IP网络上连接K3S主节点和工作节点,但是有一些先决条件。
主节点的部署与上面相同。唯一的区别是您需要获取他的公共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也成功。
负载均衡器不会将公共IP切换为私有IP,当我使用git blame时,获取标记功能的添加时间为2019.10.26