7.6. GitHub 또는 GitHub Enterprise ID 공급자 구성

GitHub 또는 GitHub Enterprise의 OAuth 인증 서버에 대해 사용자 이름 및 암호의 유효성을 확인하도록 github ID 공급자를 구성합니다. OAuth를 사용하면 OpenShift Container Platform과 GitHub 또는 GitHub Enterprise 간의 토큰 교환 flow가 용이해집니다.

GitHub 통합을 사용하여 GitHub 또는 GitHub Enterprise에 연결할 수 있습니다. GitHub Enterprise 통합의 경우 인스턴스의 호스트 이름을 제공해야 하며, 서버에 대한 요청에 사용할 ca 인증서 번들을 선택적으로 제공할 수 있습니다.

참고

다음 단계는 별도로 명시하지 않는 한 GitHub 및 GitHub Enterprise에 모두 적용됩니다.

7.6.1. OpenShift Container Platform의 ID 공급자 정보

기본적으로는 kubeadmin 사용자만 클러스터에 있습니다. ID 공급자를 지정하려면 해당 ID 공급자를 설명하는 CR(사용자 정의 리소스)을 생성하여 클러스터에 추가해야 합니다.

참고

/, :, %를 포함하는 OpenShift Container Platform 사용자 이름은 지원되지 않습니다.

7.6.2. GitHub 인증 정보

GitHub 인증을 구성하면 사용자가 GitHub 자격 증명을 사용하여 OpenShift Container Platform에 로그인할 수 있습니다. GitHub 사용자 ID가 있는 사람이 OpenShift Container Platform 클러스터에 로그인하지 못하도록 특정 GitHub 조직의 사용자만 액세스할 수 있도록 제한할 수 있습니다.

7.6.3. GitHub 애플리케이션 등록

GitHub 또는 GitHub Enterprise를 ID 공급자로 사용하려면 사용할 애플리케이션을 등록해야 합니다.

절차

  1. GitHub에 애플리케이션을 등록합니다.

  2. 애플리케이션 이름(예: My OpenShift Install)을 입력합니다.
  3. https://oauth-openshift.apps.<cluster-name>.<cluster-domain>과 같은 홈페이지 URL을 입력합니다.
  4. 선택 사항: 애플리케이션 설명을 입력합니다.
  5. 권한 부여 콜백 URL을 입력합니다. URL 끝에는 ID 공급자 name이 있습니다.

    https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>

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

    https://oauth-openshift.apps.openshift-cluster.example.com/oauth2callback/github
  6. Register application을 클릭합니다. GitHub에서 클라이언트 ID와 클라이언트 시크릿을 제공합니다. ID 공급자 구성을 완료하려면 이러한 값이 필요합니다.

7.6.4. 시크릿 생성

ID 공급자는 openshift-config 네임스페이스에서 OpenShift Container Platform Secret 오브젝트를 사용하여 클라이언트 시크릿, 클라이언트 인증서 및 키를 포함합니다.

절차

  • 다음 명령을 사용하여 문자열이 포함된 Secret 오브젝트를 생성합니다.

    $ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
    작은 정보

    다음 YAML을 적용하여 시크릿을 생성할 수도 있습니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
      namespace: openshift-config
    type: Opaque
    data:
      clientSecret: <base64_encoded_client_secret>
  • 다음 명령을 사용하여 인증서 파일과 같은 파일 내용이 포함된 Secret 오브젝트를 정의할 수 있습니다.

    $ oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config

7.6.5. 구성 맵 생성

ID 공급자는 openshift-config 네임스페이스에서 OpenShift Container Platform ConfigMap 오브젝트를 사용하여 인증 기관 번들을 포함합니다. 이들은 주로 ID 공급자에 필요한 인증서 번들을 포함하는 데 사용됩니다.

참고

이 절차는 GitHub Enterprise에만 필요합니다.

절차

  • 다음 명령을 사용하여 인증 기관을 포함하는 OpenShift Container Platform ConfigMap 오브젝트를 정의합니다. 인증 기관은ConfigMap 오브젝트의 ca.crt 키에 저장해야 합니다.

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
    작은 정보

    다음 YAML을 적용하여 구성 맵을 만들 수 있습니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>

7.6.6. GitHub CR 샘플

다음 CR(사용자 정의 리소스)에는 GitHub ID 공급자에 대한 매개변수 및 허용 가능한 값이 표시되어 있습니다.

GitHub CR

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: githubidp 1
    mappingMethod: claim 2
    type: GitHub
    github:
      ca: 3
        name: ca-config-map
      clientID: {...} 4
      clientSecret: 5
        name: github-secret
      hostname: ... 6
      organizations: 7
      - myorganization1
      - myorganization2
      teams: 8
      - myorganization1/team-a
      - myorganization2/team-b

1
이 공급자 이름은 GitHub 숫자 사용자 ID 앞에 접두어로 지정되어 ID 이름을 형성합니다. 콜백 URL을 빌드하는 데에도 사용됩니다.
2
이 공급자의 ID와 User 오브젝트 간 매핑 설정 방법을 제어합니다.
3
선택 사항: OpenShift Container Platform ConfigMap 오브젝트에 대한 참조로, 구성된 URL에 대한 서버 인증서의 유효성 확인에 사용할 PEM 인코딩 인증 기관 번들이 포함됩니다. 공개적으로 신뢰할 수 없는 루트 인증서가 있는 GitHub Enterprise에서만 사용됩니다.
4
등록된 GitHub OAuth 애플리케이션의 클라이언트 ID. 애플리케이션은 https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>의 콜백 URL을 사용하여 구성해야 합니다.
5
OpenShift Container Platform Secret 오브젝트에 대한 참조로, GitHub에서 발행한 클라이언트 시크릿이 포함됩니다.
6
GitHub Enterprise의 경우 인스턴스의 호스트 이름(예 : example.com )을 제공해야 합니다. 이 값은 /setup/settings 파일의 GitHub Enterprise hostname 값과 일치해야 하며 포트 번호를 포함할 수 없습니다. 이 값을 설정하지 않으면 teams 또는 organizations을 정의해야 합니다. GitHub의 경우 이 매개변수를 생략합니다.
7
조직 목록. hostname 필드가 설정되어 있지 않거나 mappingMethodlookup으로 설정되어 있는 경우에는 organizations 또는 teams 필드를 설정해야 합니다. teams 필드와 함께 사용할 수 없습니다.
8
팀 목록. hostname 필드가 설정되어 있지 않거나 mappingMethodlookup으로 설정되어 있는 경우에는 teams 또는 organizations 필드를 설정해야 합니다. organizations 필드와 함께 사용할 수 없습니다.
참고

organizations 또는 teams가 지정된 경우 나열된 조직 중 하나 이상에 속하는 GitHub 사용자만 로그인할 수 있습니다. clientID에 구성된 GitHub OAuth 애플리케이션이 조직의 소유가 아닌 경우 조직 소유자가 이 옵션을 사용하려면 타사 액세스 권한을 부여해야 합니다. 이러한 작업은 조직 관리자가 GitHub를 처음 로그인하는 동안 또는 GitHub 조직 설정에서 수행할 수 있습니다.

추가 리소스

7.6.7. 클러스터에 ID 공급자 추가

클러스터를 설치한 후에는 사용자가 인증할 수 있도록 ID 공급자를 추가하십시오.

사전 요구 사항

  • OpenShift Container Platform 클러스터를 생성합니다.
  • ID 공급자의 CR(사용자 정의 리소스)을 만듭니다.
  • 관리자로 로그인해야 합니다.

절차

  1. 정의된 CR을 적용합니다.

    $ oc apply -f </path/to/CR>
    참고

    CR이 존재하지 않는 경우 oc apply를 통해 새 CR을 생성하고 다음 경고를 트리거할 수 있습니다. Warning: oc apply should be used on resources created by either oc create --save-config or oc apply. 이 경우 이 경고를 무시해도 됩니다.

  2. OAuth 서버에서 토큰을 가져옵니다.

    kubeadmin 사용자가 제거된 경우 oc login 명령을 실행하면 토큰을 검색할 수 있는 웹 페이지에 액세스하는 방법에 대한 지침이 제공됩니다.

    웹 콘솔에서 (?) HelpCommand Line ToolsCopy Login Command로 이동하여 이 페이지에 액세스할 수도 있습니다.

  3. 클러스터에 로그인하여 인증을 위해 토큰을 전달합니다.

    $ oc login --token=<token>
    참고

    이 ID 공급자는 사용자 이름과 암호를 사용한 로그인을 지원하지 않습니다.

  4. 사용자가 로그인했는지 확인하고 사용자 이름을 표시합니다.

    $ oc whoami