在 EKS 控制台无法看到节点,但 kubectl get nodes 可以看到。这通常是 aws-auth ConfigMap 配置问题导致的。

问题现象

  • EKS 控制台 “Compute” 标签页看不到节点
  • kubectl get nodes 可以正常显示节点
  • 节点运行正常,Pod 可以正常调度

解决方法

需要在 aws-auth ConfigMap 中添加节点的 IAM Role 映射。

编辑 ConfigMap

1
kubectl edit configmap aws-auth -n kube-system

添加配置

mapRoles 字段中添加节点角色:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
mapRoles: |
- groups:
- system:bootstrappers
- system:nodes
rolearn: arn:aws:iam::111122223333:role/my-node-role
username: system:node:{{EC2PrivateDNSName}}

配置说明

字段 说明 示例
rolearn 节点使用的 IAM Role ARN arn:aws:iam::123456789012:role/eksNodeRole
groups Kubernetes RBAC 组 system:nodes 是必需的
username 节点用户名模板 system:node:{{EC2PrivateDNSName}}

获取节点 IAM Role

不确定节点使用哪个 IAM Role?可以通过以下方式查看:

1
2
3
4
5
6
7
# 获取节点实例 ID
kubectl get nodes -o wide

# 在 AWS Console 查看实例的 IAM Role
# 或使用 AWS CLI
aws ec2 describe-instances --instance-ids i-xxxxx \
--query 'Reservations[0].Instances[0].IamInstanceProfile.Arn'

注意事项

  • 修改 aws-auth ConfigMap 后,节点会立即在 EKS 控制台显示
  • 错误的配置可能导致节点无法加入集群
  • 建议先备份现有 ConfigMap:kubectl get cm aws-auth -n kube-system -o yaml > aws-auth-backup.yaml

参考资料