帖子

搭建跨云 k3s 服务

需要注意防火墙问题

协议 端口 目标 描述
TCP 6443 子节点 主节点 Kubernetes API Server
TCP 10250 所有节点 所有节点 Kubelet 指标收集
UDP 51820 所有节点 所有节点 Flannel WireGuard
TCP 1024-65585 所有地址 所有节点 自定义的 Node Port
TCP 80,443 所有地址 所有节点 Web 服务才需要
  • TCP: 6443,10250,80,443
  • TCP: 1024-65535
  • UDP: 51820
  • 放行规则: 0.0.0.0/0

所有节点执行

apt update && apt install -y wireguard || true
yum update && yum install -y epel-release && yum install -y wireguard-tools || true

echo "net.ipv4.ip_forward = 1" >/etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf


export NET_ENV=eth0
export PUBLIC_IP=$(curl -Ls http://ifconfig.me/ip)
export PRIVATE_IP=$(ip -o -4 addr list | grep $NET_ENV | awk '{print $4}' | cut -d/ -f1)
export INSTALL_K3S_SKIP_DOWNLOAD=true
export DOWNLOAD_K3S_BIN_URL=https://ghproxy.com/https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s
test -f ~/k3s && cp ~/k3s /usr/local/bin || true
test -f /usr/local/bin/k3s && true || (curl -Lo /usr/local/bin/k3s $DOWNLOAD_K3S_BIN_URL && chmod a+x /usr/local/bin/k3s)

master 执行的命令

  • --disable=traefik --disable=servicelb 会导致 ingress 无法访问到 service。
  • 开启 traefik 会导致和 宝塔的 nginx 冲突,可以使用 --no-deploy=traefik 代替。请自行合理选择使用。--disable servicelb 会导致在 service 之间无法进行 loadbalance。
  • 安装时,如果提示 -no-deploy 包错,请使用 --disable=traefik
  • 在宝塔的服务器上作为 master 时,可以考虑安装但不部署 traefik,通过宝塔的网站 nginx 代理来接收外部流量。
  • --docker 可以使用 docker 作为运行时环境,优势是可以使用代理。移除参数即可使用默认的 containerd。使用 docker 可以方便宝塔的 docker 进行可视化管理。需要提前安装 docker
export RANDOM_TOKEN=`openssl rand -base64 32`
export SERVER_TOKEN=$RANDOM_TOKEN
export MASTER_SERVER_IP=$(curl -Ls http://ifconfig.me/ip)
export NET_ENV=eth0

curl -fsSL https://get.k3s.io | K3S_TOKEN=$SERVER_TOKEN sh -s - server \
	--cluster-init \
	--node-external-ip=$PUBLIC_IP \
	--flannel-backend=wireguard-native \
	--flannel-external-ip \
	--tls-san $PUBLIC_IP \
	--node-ip $PUBLIC_IP \
	--advertise-address $PUBLIC_IP \
	--docker \
	--flannel-iface $NET_ENV


echo export SERVER_TOKEN=`cat /var/lib/rancher/k3s/server/node-token`
echo export MASTER_SERVER_IP=$(curl -Ls http://ifconfig.me/ip)
echo ""

HA Master 执行的命令

export SERVER_TOKEN=xxx
export MASTER_SERVER_IP=xxx
export NET_ENV=eth0

curl -fsSL https://get.k3s.io | K3S_TOKEN=$SERVER_TOKEN sh -s - server \
	--server https://$MASTER_SERVER_IP:6443 \
	--node-external-ip=$PUBLIC_IP \
	--flannel-backend=wireguard-native \
	--flannel-external-ip \
	--tls-san $PUBLIC_IP \
	--node-ip $PUBLIC_IP \
	--advertise-address $PUBLIC_IP \
	--docker \
	--flannel-iface $NET_ENV

Worker 节点执行的命令

export SERVER_TOKEN=xxx
export MASTER_SERVER_IP=xxx

curl -fsSL https://get.k3s.io | K3S_TOKEN=$SERVER_TOKEN sh -s - agent \
	--node-external-ip=$PUBLIC_IP \
	--node-ip $PUBLIC_IP \
	--docker \
	--server https://$MASTER_SERVER_IP:6443

其他

# 关闭 traefik 后。可以尝试通过 ingress-nginx 来处理流量转发,如果在宝塔环境中,可以通过 nginx 的反向代理来接管流量
kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml

常用操作

# 避免每次执行命令都输入 -n <namespace>,修改终端执行命令时上下文环境的命名空间。
kubectl get ns
kubectl config set-context --current --namespace default

# 容器相关命令
# 参考:https://www.51cto.com/article/717474.html Containerd ctr、crictl、nerdctl 客户端命令介绍与实战操作
ctr image ls
crictl images
docker image ls

参考文章:

https://discuss.plugins-world.cn/post/2Bexcn8C

未登录无法操作

登录 注册

评论 0

列表为空,暂无内容