有关将NAS卷用于Kubernetes的权限相关信息

时间:2019-08-30 01:53:50

标签: docker kubernetes rancher

我从kubernetes开始,需要迁移一些现有的docker应用。 我们正在使用内部NAS。

当前场景

我有一个以svc-appuser身份运行的docker app,NAS驱动器已导出到svc-appuser的/ nas / data / appname上的docker主机。因此,该应用程序可以在启动期间访问nas文件夹,而不会出现任何问题。 Docker-compose如下所示。

version: '2'

services:

  App-server:
    image: ln03:9000/App:1.0.0
    restart: on-failure
    cap_add:
      - SYS_ADMIN
      - DAC_READ_SEARCH
    environment:
      SSL_KEYSTORE_PASSWORD: ${ssl_keystore_password}
      SSL_KEY_ALIAS: ${ssl_key_alias}
    volumes:
      - /nas/data/appname:/opt/appdata

现在使用kubernetes ,我读到我们必须在部署应用程序之前创建持久卷声明(pvc),然后在yaml文件中使用此pvc进行应用程序部署。

docker守护程序以svc-dockeradmin用户身份运行。我假设用于构建映像的Dockerfile仍然相同,即

FROM ubuntu:latest
ARG PROXY_HOST
ARG PROXY_PORT
.
.
.
USER svc-appuser
CMD [ "sh", "-c", "/entrypoint.sh; bash"]

我的问题是如何在我的情况下使其正常工作。

直到,除非我将pvc创建为svc-appuser,否则应用程序无法在启动后使用它。我怎么做。

我推荐了Kubernetes-NFS-example,但那里没有任何信息。

PS: NAS共享已安装在svc-appuser的所有主机上

1 个答案:

答案 0 :(得分:0)

根据documentation

  

由于Go存档/ tar软件包对稀疏文件的处理中存在未解决的错误,因此尝试在Docker容器内创建具有非常大的UID的用户可能会导致磁盘耗尽,因为容器层中的/ var / log / faillog用NULL(\ 0)字符填充。一种解决方法是将--no-log-init标志传递给useradd。 Debian / Ubuntu adduser包装器不支持此标志

更多示例如何manage with defined users inside Dockerfile

RUN useradd -r -u 1001 -g appuser appuser
USER appuser

注意:

  

USER指令设置运行映像时使用的用户名(或UID)以及可选的用户组(或GID),以及Dockerfile中跟随该映像的所有RUN,CMD和ENTRYPOINT指令。   警告:如果用户没有主要组,则该映像(或后续说明)将与根组一起运行。

请注意,CAP_SYS_ADMIN赋予了其他特权:

  

AllowPrivilegeEscalation:控制一个进程是否比其父进程可以获得更多的特权。该布尔值直接控制在容器进程上是否设置了no_new_privs标志。在以下情况下,AllowPrivilegeEscalation始终为true:1)以特权OR运行; 2)具有CAP_SYS_ADMIN。

另一方面,您请阅读有关Configure a Security Context for a Pod or ContainerAccess control的信息

希望这在其他情况下有所帮助-请将您的文件转换为适当的k8s yaml,以便社区成员能够对您的案例进行更深入的阐述。