Kubernetes 클러스터 사용자 및 Pod에 필요한 권한만 부여하는 모범 사례는 무엇입니까?

Kubernetes 클러스터 사용자 및 Pod에 필요한 권한만 부여하는 모범 사례는 무엇입니까?

저는 kubernetes 클러스터를 처음 접했지만 연구실에 클러스터를 배포하고 관리하는 임무를 맡았습니다. 현재로서는 GPU를 사용하는 Pytorch 컨테이너가 있는 포드(이것이 내 설정에 배포되는 가장 일반적인 종류의 포드임)가 일부 권한 문제에도 불구하고 클러스터에서 매우 잘 실행되고 있습니다.

  1. 예를 들어 한 사용자는 tom다른 사용자가 배포한 포드를 삭제할 수 있습니다 jerry.
  2. 컨테이너는 다음과 같이 실행됩니다 root. 다시 한 번 예를 들어보겠습니다 jerry. jerry다양한 다른 사용자가 소유한 파일이 포함된 디렉터리를 마운트하는 컨테이너로 표시된 Pod를 배포한다고 가정해 보겠습니다 . root수단 으로 실행하면 jerry자신의 파일뿐만 아니라 , tom심지어 spike및 가 소유한 파일도 수정할 수 있습니다 tyke. 그러한 매니페스트는 아마도 다음과 같을 것입니다:
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  namespace: default # this field should be properly configured
  # if I want to restrict user access to certain resources,
  # usually pods.
spec:
  runtimeClassName: nvidia
  nodeSelector:
    nvidia.com/gpu: 'true'
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: mylab.registry:5000/espnet/espnet:gpu-latest
      command:
      - /bin/sh
      - -c
      - |
        echo "running following scripts"
        ls /data
        ls /exp
        nvidia-smi
      resources:
        limits:
          nvidia.com/gpu: 4
      volumeMounts:
      - name: data-volume
        mountPath: /data
      - name: exp-volume
        mountPath: /exp
  volumes:
  - name: data-volume
    hostPath:
      path: /data
  - name: exp-volume
    hostPath:
      path: /exp # where directories owned by tom, jerry,
      # spike and tyke are located.
      # on the host machine, this directory is actually
      # a mounted nfs path served by other machine.

실제로 Kubernetes는 이러한 문제를 해결하기 위한 무기를 제공합니다.RBAC그리고보안 컨텍스트. 첫 번째 문제는 여러 네임스페이스나 계층적 네임스페이스를 만들고 다양한 역할에 대해 네임스페이스에 대한 올바른 권한을 구성하면 해결될 수 있는 것 같지만 아직까지는 제대로 작동할지 확신할 수 없습니다.

그러나 두 번째 문제의 경우 보안 컨텍스트를 사용하면 일부(실제로 인터넷에서 가져온 이미지가 너무 많음) 루트로 실행해야 하므로 다시 빌드해야 함에도 불구하고 특정 파일에만 액세스하여 루트가 아닌 모드에서 컨테이너를 실행할 수 있습니다. . 하지만 securityContext매니페스트에 올바른 필드가 있는 Pod만 배포하려면 궁극적으로 사용자의 선한 행동에 의지해야 할 것 같습니다 .

클러스터 관리자로서 앞서 언급한 2가지 권한 문제를 방지하려면 어떻게 해야 합니까? 권한을 자동으로 처리할 수 있는 Kubernetes 플러그인이 있나요? 아니면 모든 옵션이 소진되면 모든 kubectl apply명령을 가로채서 매니페스트를 덮어쓰고 대신 수정된 버전을 적용하는 시스템 전체 프로그램을 배포해야 합니까 ?

관련 정보