RKE部署的双节点K8S集群挂载AWS EBS PV时遇权限认证错误
解决RKE部署K8S集群使用EBS PV的凭证权限问题
看起来你遇到的核心问题是Kubernetes的云控制器组件无法获取AWS凭证,导致创建EBS PV时触发权限禁止和凭证缺失错误。你在本地终端导出的环境变量,根本没法被集群内部运行的kube-controller-manager等组件读取到——毕竟这些组件是跑在Pod里的,和你的终端环境完全隔离。下面是具体的解决步骤:
1. 给EC2节点绑定IAM角色(推荐安全方案)
这是AWS官方最推荐的方式,不需要硬编码密钥:
- 新建一个IAM角色,给它添加
AmazonEBSFullAccess权限(或者更精细的权限,比如仅允许在us-east-2区域创建/挂载EBS卷) - 将这个IAM角色关联到所有K8S集群的EC2节点(master和worker都要加)
- 重启节点或者重新执行
rke up,让节点的IAM角色生效。之后K8S组件会自动通过EC2实例元数据服务获取凭证,无需手动配置密钥
2. 在RKE配置中注入AWS凭证(临时应急方案)
如果暂时没法配置IAM角色,可以修改RKE的集群配置文件,给云控制器组件直接注入凭证:
- 打开你的
cluster.yml文件,找到services下的kube-controller-manager配置块,添加环境变量:
services: kube-controller-manager: extra_args: cloud-provider: aws env: - name: AWS_ACCESS_KEY_ID value: "你的AWS访问密钥ID" - name: AWS_SECRET_ACCESS_KEY value: "你的AWS秘密访问密钥"
- 执行
rke up更新集群配置,让新的环境变量生效 - 之后再尝试运行
kubectl create -f aws-persistent-volume.yml
3. 检查PV配置文件的正确性
确保你的PV YAML没有配置错误,比如:
apiVersion: v1 kind: PersistentVolume metadata: name: ebs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce awsElasticBlockStore: volumeID: "vol-xxxxxx" # 替换成你实际的EBS卷ID fsType: ext4
注意:EBS卷必须和集群节点在同一个可用区(不是仅同区域),否则无法挂载。
4. 验证凭证是否生效
执行命令检查kube-controller-manager Pod的环境变量,确认凭证已注入:
kubectl describe pod kube-controller-manager-<你的节点名称> -n kube-system | grep -i aws
如果用IAM角色方案,你可以查看Pod日志,确认它能正常从实例元数据服务获取凭证。
最后提醒下,尽量用IAM角色的方式,硬编码密钥会带来安全风险,后续维护也麻烦。
内容的提问来源于stack exchange,提问作者luke035
相关产品推荐
相关产品推荐

