4.8. 권한 있는 보안 컨텍스트에서 Pod 사용

OpenShift Pipelines 1.3.x 이상 버전의 기본 구성에서는 파이프라인 실행 또는 작업 실행으로 인해 pod가 실행된 경우 권한 있는 보안 컨텍스트로 Pod를 실행할 수 없습니다. 이러한 Pod의 기본 서비스 계정은 pipeline이며 pipelines 서비스 계정과 연결된 SCC(보안 컨텍스트 제약 조건)는 pipelines-scc입니다. pipelines-scc SCC는 anyuid SCC와 유사하지만 파이프라인 SCC의 YAML 파일에 정의된 것과 약간의 차이가 있습니다.

SecurityContextConstraints 오브젝트 예

apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
...
fsGroup:
  type: MustRunAs
...

또한 OpenShift Pipelines의 일부로 제공되는 Buildah 클러스터 작업은 vfs를 기본 스토리지 드라이버로 사용합니다.

4.8.1. 파이프라인 실행 및 작업 실행 권한이 있는 보안 컨텍스트에서 Pod 실행

절차

privileged있는 보안 컨텍스트를 사용하여 Pod(파이프라인 실행 또는 작업 실행)를 실행하려면 다음 수정 작업을 수행합니다.

  • 명시적 SCC를 갖도록 연결된 사용자 계정 또는 서비스 계정을 구성합니다. 다음 방법을 사용하여 구성을 수행할 수 있습니다.

    • 다음 명령을 실행합니다.

      $ oc adm policy add-scc-to-user <scc-name> -z <service-account-name>
    • 또는 RoleBindingRole 또는 ClusterRole에 대한 YAML 파일을 수정합니다.

      RoleBinding 오브젝트의 예

      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: service-account-name 1
        namespace: default
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: pipelines-scc-clusterrole 2
      subjects:
      - kind: ServiceAccount
        name: pipeline
        namespace: default

      1
      적절한 서비스 계정 이름으로 바꿉니다.
      2
      사용하는 역할 바인딩에 따라 적절한 클러스터 역할로 바꿉니다.

      ClusterRole 오브젝트의 예

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: pipelines-scc-clusterrole 1
      rules:
      - apiGroups:
        - security.openshift.io
        resourceNames:
        - nonroot
        resources:
        - securitycontextconstraints
        verbs:
        - use

      1
      사용하는 역할 바인딩에 따라 적절한 클러스터 역할로 바꿉니다.
    참고

    기본 YAML 파일의 복사본을 만들고 중복 파일을 변경하는 것이 좋습니다.

  • vfs 스토리지 드라이버를 사용하지 않는 경우 작업 실행 또는 파이프라인 실행과 연결된 서비스 계정을 구성하여 권한 있는 SCC를 구성하고 보안 컨텍스트를 privileged: true로 설정합니다.

4.8.2. 사용자 정의 SCC 및 사용자 정의 서비스 계정을 사용하여 파이프라인 실행 및 작업 실행

기본 pipelines 서비스 계정과 연결된 pipelines-scc SCC(보안 컨텍스트 제약 조건)를 사용하는 경우 파이프라인 실행 및 작업 실행 Pod가 시간 초과에 발생할 수 있습니다. 이 문제는 기본 pipelines-scc SCC에서 fsGroup.type 매개변수가 MustRunAs 로 설정되어 있기 때문에 발생합니다.

참고

Pod 시간 초과에 대한 자세한 내용은 BZ#1995779 에서 참조하십시오.

Pod의 시간 초과를 방지하려면 fsGroup.type 매개 변수를 RunAsAny로 설정하여 사용자 지정 SCC를 만들고 사용자 지정 서비스 계정과 연결할 수 있습니다.

참고

파이프라인 실행 및 작업 실행에 사용자 정의 SCC 및 사용자 지정 서비스 계정을 사용하는 것이 좋습니다. 이 접근 방식을 사용하면 유연성이 향상되고 업그레이드 중에 기본값을 수정할 때 실행을 중단하지 않습니다.

절차

  1. fsGroup.type 매개변수를 RunAsAny 로 설정하여 사용자 지정 SCC를 정의합니다.

    예제: 사용자 지정 SCC

    apiVersion: security.openshift.io/v1
    kind: SecurityContextConstraints
    metadata:
      annotations:
        kubernetes.io/description: my-scc is a close replica of anyuid scc. pipelines-scc has fsGroup - RunAsAny.
      name: my-scc
    allowHostDirVolumePlugin: false
    allowHostIPC: false
    allowHostNetwork: false
    allowHostPID: false
    allowHostPorts: false
    allowPrivilegeEscalation: true
    allowPrivilegedContainer: false
    allowedCapabilities: null
    defaultAddCapabilities: null
    fsGroup:
      type: RunAsAny
    groups:
    - system:cluster-admins
    priority: 10
    readOnlyRootFilesystem: false
    requiredDropCapabilities:
    - MKNOD
    runAsUser:
      type: RunAsAny
    seLinuxContext:
      type: MustRunAs
    supplementalGroups:
      type: RunAsAny
    volumes:
    - configMap
    - downwardAPI
    - emptyDir
    - persistentVolumeClaim
    - projected
    - secret

  2. 사용자 정의 SCC를 생성합니다.

    예제: my-scc SCC 생성

    $ oc create -f my-scc.yaml

  3. 사용자 정의 서비스 계정을 생성합니다.

    예제: fsgroup-runasany 서비스 계정 만들기

    $ oc create serviceaccount fsgroup-runasany

  4. 사용자 지정 SCC를 사용자 지정 서비스 계정과 연결합니다.

    예제: my-scc SCC를 fsgroup-runasany 서비스 계정과 연결합니다.

    $ oc adm policy add-scc-to-user my-scc -z fsgroup-runasany

    권한 있는 작업에 사용자 지정 서비스 계정을 사용하려면 다음 명령을 실행하여 권한 있는 SCC를 사용자 지정 서비스 계정과 연결할 수 있습니다.

    예제: 권한이 있는 SCC를 fsgroup-runasany 서비스 계정과 연결합니다.

    $ oc adm policy add-scc-to-user privileged -z fsgroup-runasany

  5. 파이프라인 실행 및 작업 실행에서 사용자 정의 서비스 계정을 사용합니다.

    예제: 파이프라인은 fsgroup-runasany 사용자 정의 서비스 계정을 사용하여 YAML을 실행합니다.

    apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      name: <pipeline-run-name>
    spec:
      pipelineRef:
        name: <pipeline-cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'

    예제: 작업 실행 fsgroup-runasany 사용자 정의 서비스 계정

    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: <task-run-name>
    spec:
      taskRef:
        name: <cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'

4.8.3. 추가 리소스