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

为何不同K8s集群对无执行权限脚本的执行规则不一致?

问题排查:AWS EKS 1.23+ 容器启动失败,GKE 1.24 正常运行

问题背景

部署的容器在AWS EKS 1.23+集群启动失败,而在GCP GKE 1.24集群可正常运行。按预期两者都应启动失败,需排查差异原因:是Kubernetes版本不同导致,还是底层容器引擎的差异?

容器内排查结果

进入运行tail -f /dev/null的休眠容器后,执行命令得到以下输出:

/data $ ps -ef
PID   USER     TIME  COMMAND
    1 6379      0:00 {sleeper} /bin/sh /scripts/sleeper
    7 6379      0:00 tail -f /dev/null
    8 6379      0:00 sh -c clear; (bash || ash || sh)
   15 6379      0:00 ash
   16 6379      0:00 ps -ef
/data $ ls -l /scripts/..data/sleeper 
-rwxr-----    1 root     6379            27 Apr  6 15:31 /scripts/..data/sleeper
/data $ id
uid=6379 gid=0(root) groups=6379

从输出可知:

  • 启动脚本sleeper的权限为*-rwxr-----*,仅所有者拥有执行权限,组和其他用户无执行权限
  • 容器运行用户为uid=6379,属于root组(gid=0)

集群运行状态对比

AWS EKS 1.23+

容器启动失败,错误事件:

Reason: ContainerCannotRun - exit code: 126

完整错误详情:

Error: failed to start container "alpine-sleeper": 
Error response from daemon: failed to create shim task: 
OCI runtime create failed: runc create failed: 
unable to start container process: 
exec /scripts/sleeper: permission denied: unknown

对应集群版本信息:

Server Version: version.Info{Major:"1", Minor:"23+", GitVersion:"v1.23.16-eks-48e63af", GitCommit:"e6332a8a3feb9e0fe3db851878f88cb73d49dd7a", GitTreeState:"clean", BuildDate:"2023-01-24T19:18:15Z", GoVersion:"go1.19.5", Compiler:"gc", Platform:"linux/amd64"}

GCP GKE 1.24

容器可正常启动运行,对应集群版本信息:

Server Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.10-gke.2300", GitCommit:"1d7ae0799b40b0cd95502e3a5e698db62572e341", GitTreeState:"clean", BuildDate:"2023-02-22T09:28:49Z", GoVersion:"go1.19.6 X:boringcrypto", Compiler:"gc", Platform:"linux/amd64"}

关键发现与疑问

更新1:确认AWS EKS使用Docker作为容器运行时,GCP GKE使用containerd。是否存在Docker允许root组用户执行无组执行权限文件的情况?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:49:53