kubernetes Kuberenetes是否使用Dockerfile中的USER指令?

uplii1fm  于 5个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(40)

例如,考虑使用USER指令的Dockerfile

FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM adoptopenjdk:11-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
VOLUME /tmp
EXPOSE 8080
USER nobody
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

字符串
当Kuberenets运行Docker镜像时,它是遵守USER指令还是忽略它?
如果K8集群中不存在该用户,K8是否会创建该用户?

0yycz8jy

0yycz8jy1#

是的,这是保护容器时的一个重要特性(尽管使用gosu或类似的工具可以提供类似的安全性)。

jw5wzhpr

jw5wzhpr2#

在Kubernetes中,当它运行Docker容器时,它并不直接尊重Dockerfile中的USER指令。Dockerfile中的USER指令设置了运行镜像时要使用的用户名或UID,但Kubernetes可以自己管理用户权限。它可以使用securityContext功能来改变UID/USER示例:

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    runAsGroup: 3000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    emptyDir: {}
  containers:
  - name: sec-ctx-demo
    image: busybox:1.28
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
    securityContext:
      allowPrivilegeEscalation: false

字符串
查看文档here
如果你没有使用这个功能,它只会“继承”Dockerfile指令

相关问题