首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用安全上下文fsgroup选项挂载卷时的写入权限

使用安全上下文fsgroup选项挂载卷时的写入权限
EN

Stack Overflow用户
提问于 2021-06-22 16:06:58
回答 1查看 299关注 0票数 0

我正在尝试使用非根用户在K8S中运行tomcat容器,为此,我在Docker Image中设置了用户'tomcat‘的适当权限。我有一个启动脚本,它在/opt/var/logs中创建一个目录(在容器启动期间),并启动tomcat服务。

代码语言:javascript
复制
#steps in Dockerfile
#adding tomcat user and group and permission to /opt directory
addgroup tomcat -g 1001 && \
adduser -D -u 1001 -G tomcat tomcat && \
chown -R tomcat:tomcat /opt

#switch user
User tomcat

当使用部署部署而没有任何卷映射时,pod在K8S中运行良好。

但是我从启动脚本中得到了一个权限被拒绝的错误(权限被拒绝:创建目录/opt/var/logs/docker/),当我用持久卷声明映射部署时,它无法创建一个目录,即使我按照这里解释的那样设置了fsgroup,https://kubernetes.io/docs/tasks/configure-pod-container/security-context/也是如此。

我有一个hostPath类型的持久化卷。

部署定义如下。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ms-tomcat
  namespace: ms-ns
  labels:
    app: tomcat
spec:
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      securityContext:
          fsGroup: 2000
          runAsUser: 1001
          runAsGroup: 1001
      containers:
      - name: tomcat
        image: docker-registry.test.com/tomcat:1.2
        volumeMounts:
        - name: logging-volume
          mountPath: /opt/var/logs/docker
      imagePullSecrets:
      - name: test
      volumes:
      - name: logging-volume
        persistentVolumeClaim:
          claimName: nonroot-test-pvc

聚氯乙烯

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  nonroot-test-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: local-node-sc
  volumeName: nonroot-test-pv
EN

回答 1

Stack Overflow用户

发布于 2021-06-22 16:19:12

您需要将fsGroup设置为1001,即runAsGroup

在任何路径中挂载任何卷时,默认情况下挂载的目录的所有者是root。在K8s世界中,您不能更改挂载路径的所有者。但在k8S中,您有权使用FsGroup设置组ID。使用FsGroup,您实际上将权限授予了某个用户组。

由于您当前的用户UID为1001GID1001,因此您需要授予当前GID 1001的权限。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ms-tomcat
  namespace: ms-ns
  labels:
    app: tomcat
spec:
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      securityContext:
          fsGroup: 1001 #<--- change here
          runAsUser: 1001
          runAsGroup: 1001
      containers:
      - name: tomcat
        image: docker-registry.test.com/tomcat:1.2
        volumeMounts:
        - name: logging-volume
          mountPath: /opt/var/logs/docker
      imagePullSecrets:
      - name: test
      volumes:
      - name: logging-volume
        persistentVolumeClaim:
          claimName: nonroot-test-pvc
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68079774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档