如何将外部服务器/VPS添加到Amazon EKS集群作为工作节点?
外部VPS接入Amazon EKS集群作为工作节点操作方案
前置要求
- 外部VPS安装的
kubelet、kubeadm、kubectl版本与EKS集群的Kubernetes版本完全一致 - EKS控制平面的443、6443端口对外部VPS公网/私网开放,外部VPS的10250、30000-32767端口对EKS控制平面开放,网络延迟建议控制在1s以内,避免节点心跳异常
- 外部VPS使用EKS支持的操作系统(Amazon Linux 2、Ubuntu 20.04/22.04等)
- 本地已配置好有权限操作EKS集群的
aws、kubectl命令行工具
操作步骤
1. 生成EKS集群加入凭证
在本地操作终端执行以下命令,生成节点加入所需的token和命令:
# 先获取EKS集群的访问凭证 aws eks update-kubeconfig --name <你的集群名称> --region <集群所在区域> # 生成有效期2小时的加入token kubeadm token create --ttl 2h --print-join-command
保存输出的kubeadm join命令备用。
2. 外部VPS环境初始化
登录外部VPS执行以下配置:
- 关闭swap分区
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab - 加载Kubernetes必需内核模块
modprobe br_netfilter echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf sysctl -p - 安装容器运行时,推荐使用EKS默认的containerd,安装完成后执行
systemctl enable --now containerd启动服务 - 安装对应版本的
kubelet、kubeadm、kubectl,执行systemctl enable --now kubelet启动kubelet服务
3. 执行节点加入操作
在外部VPS上执行之前保存的kubeadm join命令,格式参考:
kubeadm join <EKS控制平面端点>:6443 --token <生成的token> --discovery-token-ca-cert-hash sha256:<CA证书哈希>
命令执行完成后,回到本地终端执行kubectl get nodes,即可看到新节点已出现在节点列表中。
4. 配置节点权限与网络
- 编辑EKS的aws-auth配置,给新节点授予集群访问权限:
kubectl edit configmap aws-auth -n kube-system,在mapUsers或mapRoles字段中添加节点的认证身份 - 安装兼容跨节点网络的CNI插件,如果默认的AWS VPC CNI无法适配外部节点,可以替换为Calico、Flannel等通用CNI插件
- 等待节点状态变为
Ready,即完成接入操作
特定Deployment调度配置
为了只让指定业务部署到该外部节点,可通过节点标签、污点、容忍度组合实现:
- 给外部节点打专属地理标签:
kubectl label nodes <新节点名称> location=local-target-region - 给节点添加污点,避免普通Pod被调度上来:
kubectl taint nodes <新节点名称> dedicated=local-only:NoSchedule - 在目标Deployment的Pod模板中添加节点选择器和容忍度:
spec: template: spec: nodeSelector: location: local-target-region tolerations: - key: "dedicated" operator: "Equal" value: "local-only" effect: "NoSchedule"
完成配置后,只有添加了对应容忍度的Deployment才会被调度到该外部VPS节点上。
注意事项
- EKS 1.24及以上版本已废弃dockershim,请勿使用Docker作为容器运行时,避免兼容性问题
- 若外部节点和EKS控制平面公网通信不安全,可配置WireGuard、IPsec等加密隧道承载集群内流量
- 建议为外部节点单独配置适配本土云存储的StorageClass,满足有状态业务的存储需求
内容的提问来源于stack exchange,提问作者ATheCoder
相关产品推荐
相关产品推荐

