2.3. 프로젝트 생성 구성

OpenShift Container Platform에서 프로젝트는 관련 오브젝트를 그룹화하고 격리하는 데 사용됩니다. 웹 콘솔 또는 oc new-project 명령을 사용하여 새 프로젝트를 생성하라는 요청이 생성되면 OpenShift Container Platform의 끝점을 사용하여 사용자 지정할 수 있는 템플릿에 따라 프로젝트를 프로비저닝합니다.

클러스터 관리자는 개발자 및 서비스 계정이 자체 프로젝트를 생성하거나 자체 프로비저닝하는 방법을 허용하고 구성할 수 있습니다.

2.3.1. 프로젝트 생성 정보

OpenShift Container Platform API 서버는 클러스터의 프로젝트 구성 리소스에서 projectRequestTemplate 매개변수로 식별하는 프로젝트 템플릿을 기반으로 새 프로젝트를 자동으로 프로비저닝합니다. 매개변수가 정의되지 않은 경우 API 서버는 요청된 이름으로 프로젝트를 생성하는 기본 템플릿을 생성하고 요청하는 사용자에게 해당 프로젝트의 admin 역할을 할당합니다.

프로젝트 요청을 제출하면 API에서 다음 매개변수를 템플릿으로 대체합니다.

표 2.1. 기본 프로젝트 템플릿 매개변수

매개변수설명

PROJECT_NAME

프로젝트 이름입니다. 필수 항목입니다.

PROJECT_DISPLAYNAME

프로젝트의 표시 이름입니다. 비어 있을 수 있습니다.

PROJECT_DESCRIPTION

프로젝트에 대한 설명입니다. 비어 있을 수 있습니다.

PROJECT_ADMIN_USER

관리 사용자의 사용자 이름입니다.

PROJECT_REQUESTING_USER

요청하는 사용자의 사용자 이름입니다.

API에 대한 액세스 권한은 self-provisioner 역할 및 self-provisioner 클러스터 역할 바인딩을 가진 개발자에게 부여됩니다. 이 역할은 기본적으로 인증된 모든 개발자에게 제공됩니다.

2.3.2. 새 프로젝트의 템플릿 수정

클러스터 관리자는 사용자 정의 요구 사항을 사용하여 새 프로젝트를 생성하도록 기본 프로젝트 템플릿을 수정할 수 있습니다.

사용자 정의 프로젝트 템플릿을 만들려면:

프로세스

  1. cluster-admin 권한이 있는 사용자로 로그인합니다.
  2. 기본 프로젝트 템플릿을 생성합니다.

    $ oc adm create-bootstrap-project-template -o yaml > template.yaml
  3. 텍스트 편집기를 사용하여 오브젝트를 추가하거나 기존 오브젝트를 수정하여 생성된 template.yaml 파일을 수정합니다.
  4. 프로젝트 템플릿은 openshift-config 네임스페이스에서 생성해야 합니다. 수정된 템플릿을 불러옵니다.

    $ oc create -f template.yaml -n openshift-config
  5. 웹 콘솔 또는 CLI를 사용하여 프로젝트 구성 리소스를 편집합니다.

    • 웹 콘솔에 액세스:

      1. 관리클러스터 설정으로 이동합니다.
      2. 설정을 클릭하여 모든 구성 리소스를 확인합니다.
      3. 프로젝트 항목을 찾아 YAML 편집을 클릭합니다.
    • CLI 사용:

      1. 다음과 같이 project.config.openshift.io/cluster 리소스를 편집합니다.

        $ oc edit project.config.openshift.io/cluster
  6. projectRequestTemplatename 매개변수를 포함하도록 spec 섹션을 업데이트하고 업로드된 프로젝트 템플릿의 이름을 설정합니다. 기본 이름은 project-request입니다.

    사용자 정의 프로젝트 템플릿이 포함된 프로젝트 구성 리소스

    apiVersion: config.openshift.io/v1
    kind: Project
    metadata:
    # ...
    spec:
      projectRequestTemplate:
        name: <template_name>
    # ...

  7. 변경 사항을 저장한 후 새 프로젝트를 생성하여 변경 사항이 성공적으로 적용되었는지 확인합니다.

2.3.3. 프로젝트 자체 프로비저닝 비활성화

인증된 사용자 그룹이 새 프로젝트를 자체 프로비저닝하지 못하도록 할 수 있습니다.

프로세스

  1. cluster-admin 권한이 있는 사용자로 로그인합니다.
  2. 다음 명령을 실행하여 self-provisioners 클러스터 역할 바인딩 사용을 확인합니다.

    $ oc describe clusterrolebinding.rbac self-provisioners

    출력 예

    Name:		self-provisioners
    Labels:		<none>
    Annotations:	rbac.authorization.kubernetes.io/autoupdate=true
    Role:
      Kind:	ClusterRole
      Name:	self-provisioner
    Subjects:
      Kind	Name				Namespace
      ----	----				---------
      Group	system:authenticated:oauth

    self-provisioners 섹션의 제목을 검토합니다.

  3. 그룹 system:authenticated:oauth에서 self-provisioner 클러스터 역할을 제거합니다.

    • self-provisioners 클러스터 역할 바인딩에서 self-provisioner 역할을 system:authenticated:oauth 그룹에만 바인딩하는 경우 다음 명령을 실행합니다.

      $ oc patch clusterrolebinding.rbac self-provisioners -p '{"subjects": null}'
    • self-provisioners 클러스터 역할 바인딩에서 self-provisioner 역할을 system:authenticated:oauth 그룹 이외에도 추가 사용자, 그룹 또는 서비스 계정에 바인딩하는 경우 다음 명령을 실행합니다.

      $ oc adm policy \
          remove-cluster-role-from-group self-provisioner \
          system:authenticated:oauth
  4. 역할이 자동으로 업데이트되지 않도록 self-provisioners 클러스터 역할 바인딩을 편집합니다. 역할이 자동으로 업데이트되면 클러스터 역할이 기본 상태로 재설정됩니다.

    • CLI를 사용하여 역할 바인딩을 업데이트하려면 다음을 수행합니다.

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

        $ oc edit clusterrolebinding.rbac self-provisioners
      2. 표시된 역할 바인딩에서 다음 예와 같이 rbac.authorization.kubernetes.io/autoupdate 매개변수 값을 false로 설정합니다.

        apiVersion: authorization.openshift.io/v1
        kind: ClusterRoleBinding
        metadata:
          annotations:
            rbac.authorization.kubernetes.io/autoupdate: "false"
        # ...
    • 단일 명령을 사용하여 역할 바인딩을 업데이트하려면 다음을 실행합니다.

      $ oc patch clusterrolebinding.rbac self-provisioners -p '{ "metadata": { "annotations": { "rbac.authorization.kubernetes.io/autoupdate": "false" } } }'
  5. 인증된 사용자로 로그인하여 프로젝트를 더 이상 자체 프로비저닝할 수 없는지 확인합니다.

    $ oc new-project test

    출력 예

    Error from server (Forbidden): You may not request a new project via this API.

    조직과 관련된 더 유용한 지침을 제공하도록 이 프로젝트 요청 메시지를 사용자 정의하는 것이 좋습니다.

2.3.4. 프로젝트 요청 메시지 사용자 정의

프로젝트를 자체 프로비저닝할 수 없는 개발자 또는 서비스 계정이 웹 콘솔 또는 CLI를 사용하여 프로젝트 생성을 요청하면 기본적으로 다음과 같은 오류 메시지가 반환됩니다.

You may not request a new project via this API.

클러스터 관리자는 이 메시지를 사용자 지정할 수 있습니다. 조직과 관련된 새 프로젝트를 요청하는 방법에 대한 추가 지침을 제공하려면 업데이트하는 것이 좋습니다. 예를 들면 다음과 같습니다.

  • 프로젝트를 요청하려면 projectname@example.com을 통해 시스템 관리자에게 문의하십시오.
  • 새 프로젝트를 요청하려면 https://internal.example.com/openshift-project-request에 있는 프로젝트 요청 양식을 작성합니다.

프로젝트 요청 메시지를 사용자 지정하려면 다음을 수행합니다.

프로세스

  1. 웹 콘솔 또는 CLI를 사용하여 프로젝트 구성 리소스를 편집합니다.

    • 웹 콘솔에 액세스:

      1. 관리클러스터 설정으로 이동합니다.
      2. 설정을 클릭하여 모든 구성 리소스를 확인합니다.
      3. 프로젝트 항목을 찾아 YAML 편집을 클릭합니다.
    • CLI 사용:

      1. cluster-admin 권한이 있는 사용자로 로그인합니다.
      2. 다음과 같이 project.config.openshift.io/cluster 리소스를 편집합니다.

        $ oc edit project.config.openshift.io/cluster
  2. projectRequestMessage 매개변수를 포함하도록 spec 섹션을 업데이트하고 해당 값을 사용자 정의 메시지로 설정합니다.

    사용자 정의 프로젝트 요청 메시지가 포함된 프로젝트 구성 리소스

    apiVersion: config.openshift.io/v1
    kind: Project
    metadata:
    # ...
    spec:
      projectRequestMessage: <message_string>
    # ...

    예를 들면 다음과 같습니다.

    apiVersion: config.openshift.io/v1
    kind: Project
    metadata:
    # ...
    spec:
      projectRequestMessage: To request a project, contact your system administrator at projectname@example.com.
    # ...
  3. 변경 사항을 저장한 후 프로젝트를 자체 프로비저닝하여 변경 사항이 성공적으로 적용되었는지 확인할 수 없는 개발자 또는 서비스 계정으로 새 프로젝트를 생성합니다.