EKS集群结合Step Functions调用Pod遇EKS.401错误的解决求助
问题描述
已创建名为Python-Cluster的EKS集群(含2节点节点组),将指定Python代码打包为python-img:latest镜像后,通过Deployment和Service完成部署。尝试通过Step Functions的arn:aws:states:::eks:runJob.sync任务调用EKS Job传递输入时,触发EKS.401错误,已为Step Functions配置管理员权限并添加IAM角色,问题仍未解决。
解决步骤
1. 确认EKS集群的aws-auth ConfigMap配置
EKS集群需要显式允许Step Functions的执行角色访问,需检查并更新aws-auth ConfigMap:
- 执行命令编辑ConfigMap:
kubectl edit configmap aws-auth -n kube-system - 在
mapRoles数组中添加Step Functions执行角色的ARN,示例配置:
保存退出后,等待权限同步生效。mapRoles: - rolearn: arn:aws:iam::你的AWS账号ID:role/你的StepFunctions执行角色名 username: stepfunctions-exec-role groups: - system:masters
2. 修正Step Functions状态机的Job配置
状态机中的Job定义存在两处关键错误,需调整:
- 镜像名称错误:原配置使用了Pod名称
python-7f7c9cdbc6-fvtvl,应替换为实际镜像名python-img:latest - 命令与输入传递缺失:原命令仅指定
python,未指定要执行的脚本,也未传递Step Functions的输入参数 - 修正后的Job配置示例:
同时需调整Python代码以读取环境变量传递的输入,示例修改代码:"Job": { "apiVersion": "batch/v1", "kind": "Job", "metadata": { "name": "my-example-job" }, "spec": { "template": { "metadata": { "name": "my-example-job" }, "spec": { "containers": [ { "name": "python-job", "image": "python-img:latest", "command": ["python", "/app/main.py"], "env": [ { "name": "INPUT_PAYLOAD", "value.$": "$.Payload.Input" } ] } ], "restartPolicy": "Never" } } } }import json import os response = {} def main(): user_input = json.loads(os.getenv("INPUT_PAYLOAD", '"Invoke"')) if user_input == 'Invoke': response['Output'] = "Invoked" response['Message'] = "First Job invoked based on the input" print(json.dumps(response)) if __name__ == "__main__": main()
3. 验证Step Functions执行角色的信任关系
确认角色的信任策略允许Step Functions服务扮演该角色:
- 进入IAM控制台,找到Step Functions执行角色,检查信任策略是否包含:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "states.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
4. 校验EKS集群Endpoint与CertificateAuthority
通过AWS CLI命令验证状态机中填写的Endpoint和证书是否正确:
aws eks describe-cluster --name Python-Cluster --query 'cluster.{Endpoint: endpoint, CertificateAuthority: certificateAuthority.data}' --output json
将输出结果与状态机中的配置对比,确保完全一致,避免复制时出现字符遗漏或错误。
内容的提问来源于stack exchange,提问作者Landerson
相关产品推荐
相关产品推荐

