跳到主要内容

K3s公网集群配置

概述

现有两台服务器,其中一台在阿里云,另一台在 腾讯云。使用k3s组建集群后pod能成功部署到Agent上,但不能正常访问。包括service或describe pod。由于云服务器有两个IP地址,一个公网IP一个私有主机IP。K3s自带ServiceLP默认使用私有主机IP。如果是单台服务器、局域网内多服务器或同云服务商这并没有什么问题。但公网服务器无法通过私有主机IP进行通信,导致容器无法正常访问。K3s以flannel作为CNI运行,Flannel是一种轻量级的三层网络组件,实现了Kubernetes的容器网络接口(CNI)。它通常被称为CNI插件,公网集群配置需要调整flannel启动参数,使用节点的外部IP地址作为Flannel流量的目标,而不是内部IP。

集群搭建

检查两台云服务器的网络连通

ping <主节点IP>
telnet <主节点IP> 6443

K3s 的默认端口是否开放(6443 是 API 端口),云服务器需要配置对应的安全组策略

主节点配置

修改K3s启动参数

vi /etc/systemd/system/k3s.service

按如下方式修改Service部分内容

[Service]
ExecStart=/usr/local/bin/k3s server --node-external-ip <主机公网IP> --flannel-backend=wireguard-native --flannel-external-ip

重启服务

sudo systemctl daemon-reload
sudo systemctl restart k3s-agent

验证状态

sudo systemctl status k3s

配置Agent前需先获取主节点的token,在主节点上执行,并记录token内容:

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

Agent配置

安装k3s并修改启动配置。

vi /etc/systemd/system/k3s.service

按如下方式修改Service部分内容

[Service]
ExecStart=/usr/local/bin/k3s agent --node-external-ip <Agent服务器公网IP>

重启服务

sudo systemctl daemon-reload
sudo systemctl restart k3s-agent

验证状态

sudo systemctl status k3s-agent

校验

回到 主节点 查看节点是否成功加入集群:

kubectl get nodes

注意事项

1、K3s安装文件中包含Server 和Agent两个应用,Server是主节点,Agent是工作节点。启动时需要指定不同的应用。
2、确保两台服务器之间可以互相访问,特别是 K3s 需要的端口要打开:

主节点开放端口

端口范围服务
6443Kubernetes API server
2379-2380etcd(如果是高可用)
10250kubelet
10251kube-scheduler
10252kube-controller-manager

工作节点开放端口

端口范围服务
10250kubelet
30000-32767NodePort 服务范围

完整配置参考

主节点配置

[Unit]
Description=Lightweight Kubernetes
After=network.target

[Service]
ExecStart=/usr/local/bin/k3s server --node-external-ip <主节点公网IP> --flannel-backend=wireguard-native --flannel-external-ip
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Agent配置

[Unit]
Description=K3s Agent
After=network-online.target
Wants=network-online.target

[Service]
Type=exec
# 替换 <server-ip> 和 <node-token>,保证它能连上主节点
Environment="K3S_URL=https://<server-ip>:6443"
Environment="K3S_TOKEN=<node-token>"
ExecStart=/usr/local/bin/k3s agent --node-external-ip <Agent公网IP>
Restart=always
RestartSec=5
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

参考资料

1 . Basic Network Options
2 . Distributed hybrid or multicloud cluster