gpt4 book ai didi

kubernetes - 如何更改/设置 k8s 主节点内部 IP 或公共(public) IP?

转载 作者:行者123 更新时间:2023-12-02 12:02:46 26 4
gpt4 key购买 nike

我已经在云虚拟机上安装了 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 地址绑定(bind)。

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

最佳答案

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

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

先决条件:

  • 所有机器都需要在同一个专用网络内。例如 192.168.0.0/24
  • 所有机器都需要相互通信。您可以通过以下方式 ping 它们:$ ping IP_ADDRESS

  • 在此示例中,有 2 个虚拟机:
  • 私有(private) IP 为 10.156.0.13
  • 的主节点 (k3s)
  • 工作节点 (k3s-2),私有(private) IP 为 10.156.0.8

  • 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

    检索 重要 token 从主节点使用命令:
    $ cat /var/lib/rancher/k3s/server/node-token
    此 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 并将它们公开到公共(public) IP 空间。

    编辑2:

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

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

  • 主节点供应

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

    您的主节点不需要在以下命令中显示您的公共(public) IP:
  • $ ip a
  • $ ifconfig

  • 供应工作节点

    工作节点的部署不同之处仅在于将主节点的IP地址从私有(private)IP地址更改为公共(public)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

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

    关于kubernetes - 如何更改/设置 k8s 主节点内部 IP 或公共(public) IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58834434/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com