You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用curl和CA证书调用EKS API服务器遇未授权错误求助

问题与解决方案

问题详情

通过IAM用户创建EKS集群(system:creator为该IAM用户),AWS CLI和kubectl均可正常使用,但执行以下curl调用Kubernetes API时返回401未授权:

curl -v https://abc.gr7.us-east-1.eks.amazonaws.com/api/v1/namespaces/kube-system/pods?limit=500 --header "Authorization: Bearer $TOKEN" --cacert test.crt

其中TOKEN通过以下命令获取:

TOKEN=$(aws eks get-token --cluster-name test-clus --profile default)

test.crt文件直接存储了EKS集群详情页提供的证书颁发机构字符串的base64内容,返回错误如下:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "Unauthorized",
  "reason": "Unauthorized",
  "code": 401
}

环境信息:

  • EKS版本:1.24
  • AWS CLI版本:aws-cli/2.9.15
  • kubectl版本:客户端v1.26.0,服务端v1.24.8-eks-ffeb93d(存在版本偏移警告)

原因分析

  1. Token提取错误:aws eks get-token返回的是完整JSON结构,而非直接的token字符串,直接赋值给$TOKEN会导致Authorization头携带整个JSON内容,而非有效token。
  2. 证书文件格式错误:EKS控制台提供的CA字符串是base64编码的PEM证书,需解码后保存为.crt文件,直接存储base64字符串会导致TLS验证异常(虽错误提示为未授权,但证书问题可能间接引发权限验证失败)。

解决方案

1. 正确提取有效Token

使用jq工具从JSON结果中提取token字段(需提前安装jq):

TOKEN=$(aws eks get-token --cluster-name test-clus --profile default | jq -r '.status.token')

若无jq,可改用grep和awk替代:

TOKEN=$(aws eks get-token --cluster-name test-clus --profile default | grep -o '"token": "[^"]*"' | awk -F '"' '{print $4}')

2. 修复证书文件格式

将EKS集群详情页的CA字符串进行base64解码后保存为test.crt:

# 假设CA字符串已复制到变量CA_B64中
echo "$CA_B64" | base64 -d > test.crt

或直接复制控制台的CA字符串后解码写入:

echo "复制的CA base64字符串" | base64 -d > test.crt

3. 验证调用

重新执行curl命令,此时应能正常获取pod列表。若仍有问题,可通过kubectl确认token有效性:

# 查看当前kubectl使用的token
kubectl config view --raw -o jsonpath='{.users[?(@.name=="arn:aws:eks:us-east-1:ACCOUNT_ID:cluster/test-clus")].user.token}'

将该token替换到curl命令的$TOKEN中测试,若能正常访问,则说明aws eks get-token的提取逻辑仍有问题。

4. 处理kubectl版本偏移(可选)

虽然版本偏移不是本次未授权的直接原因,但为避免后续其他问题,建议将kubectl版本降级到1.25或1.24版本(与EKS服务端版本保持±1的偏移范围)。

内容的提问来源于stack exchange,提问作者user2315104

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:43:19