如何在AKS中以指定用户身份运行Docker镜像
前置准备
首先需要查询镜像内engdata用户对应的UID,本地执行以下命令获取:docker run --rm --entrypoint id myimage engdata
返回结果中的uid值就是后续配置要用到的数值,比如返回uid=1001(engdata) gid=1001(engdata) groups=1001(engdata),对应UID就是1001。
单Deployment配置(仅指定部署用engdata运行)
修改你的Deployment YAML文件,通过securityContext字段指定运行用户,可以选Pod全局生效或者单容器生效:
- Pod全局生效:所有该Pod内的容器都会以指定用户运行,配置位置在
spec.template.spec下:
apiVersion: apps/v1 kind: Deployment metadata: name: myimage-deployment spec: replicas: 1 selector: matchLabels: app: myimage template: metadata: labels: app: myimage spec: # Pod级securityContext,对该Pod所有容器生效 securityContext: runAsUser: 1001 # 替换为你查询到的engdata对应UID runAsGroup: 1001 # 可选,替换为engdata对应的GID containers: - name: myimage image: myimage ports: - containerPort: 5108
- 单容器生效:仅指定容器用engdata运行,适合单Pod内多容器各自需要不同运行用户的场景,配置位置在对应容器的配置块下:
containers: - name: myimage image: myimage # 容器级securityContext,仅对当前容器生效 securityContext: runAsUser: 1001 runAsGroup: 1001 ports: - containerPort: 5108
配置完成后apply到AKS集群即可。
命名空间全局配置(该命名空间下所有Pod都禁止用root运行)
如果需要对整个AKS命名空间生效,不用每个Deployment单独配置,可以给命名空间配置Pod安全策略,强制所有Pod以非root用户运行。
验证方式
部署完成后执行以下命令,确认运行用户是否正确:kubectl exec <你的Pod名称> -- whoami
返回结果为engdata则配置生效。
内容的提问来源于stack exchange,提问作者user3885927
相关产品推荐
相关产品推荐

