퍼블릭 및 프라이빗 서비스 엔드포인트가 있는 VPC 클러스터: OpenShift 콘솔에 연결할 수 없는 이유는 무엇인가요?

공용 및 비공개 서비스 엔드포인트가 모두 있는 클러스터에서 OpenShift 콘솔에 연결하는 문제를 해결하세요.

이 문제 해결 가이드의 정보는 공용 및 비공개 서비스 엔드포인트가 모두 있는 VPC 클러스터에 관한 것입니다.

1. 클러스터 연결 흐름 이해

다음 다이어그램은 퍼블릭 및 프라이빗 서비스 엔드포인트가 모두 있는 VPC 클러스터가 OpenShift 웹 콘솔에 연결하기 위한 연결 흐름을 보여줍니다. 웹 브라우저에서 클러스터 구성 요소로의 모든 연결은 공용 네트워크를 통해 이루어집니다. 이 다이어그램과 다음 설명을 검토하여 어떤 문제 해결 단계가 필요한지 더 잘 이해하세요.

OpenShift
OpenShift 퍼블릭 및 프라이빗 서비스 엔드포인트가 모두 있는 VPC 클러스터의 웹 콘솔 연결 흐름 퍼블릭 및 프라이빗 서비스 엔드포인트가 모두 있는 VPC 클러스터의 웹 콘솔 연결 흐름입니다.

  1. 웹 브라우저가 클러스터 마스터 API 서버에 연결됩니다. 서명된 인증서가 교환되고 리디렉션을 통해 웹 브라우저가 OpenShift 콘솔 공용 부하 분산 장치에 대신 연결하도록 지시합니다.
  2. (a) 웹 브라우저가 OpenShift 콘솔을 노출하는 OpenShift 콘솔 로드 밸런서에 연결합니다. (b) 이 요청은 두 개의 오픈시프트 콘솔 포드 중 하나로 전송됩니다.
  3. Openshift-console 파드는 공용 네트워크를 통해 클러스터 마스터 OAuth 서버 포트에 연결하여 연결이 이미 인증되었는지 확인합니다. 요청이 이미 인증된 경우 OpenShift 웹 콘솔에 대한 연결이 완료되어 웹 콘솔에 액세스할 수 있습니다. 요청이 인증되지 않으면 사용자는 클러스터 마스터의 클러스터 OAuth 서비스로 리디렉션됩니다.
  4. 웹 브라우저는 클러스터의 OAuth 서버 포트에 연결하여 클라이언트를 IAM으로 리디렉션합니다.
  5. 웹 브라우저는 공용 네트워크를 통해 IAM에 연결합니다. 사용자는 비밀번호와 필요한 경우 2FA 인증을 입력합니다. 이 단계가 성공하면 사용자는 클러스터의 OAuth 서버로 다시 리디렉션됩니다.
  6. 웹 브라우저가 클러스터의 OAuth 서버 포트에 다시 연결됩니다. 연결이 OpenShift 콘솔 부하 분산 장치로 다시 리디렉션됩니다.
  7. 웹 브라우저는 OpenShift 콘솔 부하 분산 장치에 연결하여 OpenShift 콘솔을 노출합니다. 이 요청은 두 개의 오픈시프트 콘솔 포드 중 하나로 전송되며, 이 포드는 다시 클러스터 마스터 OAuth 서버 포트에 연결하여 연결이 이미 인증되었는지 확인합니다. 사용자가 비밀번호와 2FA 인증을 입력하면 인증이 확인되고 사용자는 OpenShift 콘솔 메인 웹 페이지에 연결됩니다.

2. VPC 및 클러스터 구성 확인

  1. 웹 브라우저가 공용 네트워크에 액세스할 수 있는지 확인하여 클러스터 에이피서버, OpenShift 콘솔 로드 밸런서 및 IAM( iam.cloud.ibm.comlogin.ibm.com 모두 사용)에 연결할 수 있도록 합니다
  2. 이 클러스터 또는 로드밸런서에 대한 보안 그룹, ACL 또는 CBR(컨텍스트 기반 제한) 규칙을 수정한 경우 이 웹 브라우저에서 해당 리소스로의 트래픽을 허용하는지 확인합니다

3. 클러스터 데이터 수집

다음 단계에 따라 문제 해결에 필요한 클러스터 정보를 수집하세요. 이러한 명령으로 수집한 출력은 이후 단계에서 사용됩니다.

  1. 클러스터 API 서버 찾기 URL. 이후 명령에서는 이 URL 을 ${CLUSTER_APISERVER_URL} 이라고 합니다.

    1. ibmcloud ks cluster get -c CLUSTER_ID 명령을 실행하십시오.
        ibmcloud oc cluster get -c CLUSTER_ID
        ```
    2. 출력의 `Master` 섹션에서 `URL` 을 찾습니다. URL 은 다음 형식이어야 합니다: `https://c<XXX>-e.<REGION>.containers.cloud.ibm.com:<YYYYY>`.
    
    
    
  2. 클러스터 찾기 OAuth URL. 이후 명령에서는 이 URL 을 ${CLUSTER_OAUTH_URL} 이라고 합니다.

    1. kubectl get --raw /.well-known/oauth-authorization-server | grep issuer 명령을 실행하십시오. 이 명령은 다른 URL 을 반환할 수 있으므로 ibmcloud oc cluster get -c CLUSTER_ID 을 사용하지 마십시오.
        kubectl get --raw /.well-known/oauth-authorization-server | grep issuer
        ```
    2. URL 은 다음 형식이어야 합니다: `https://c<XXX>-e.<REGION>.containers.cloud.ibm.com:<ZZZZZ>`.
    
    
  3. 인그레스 하위 도메인을 찾습니다. 이후 명령에서 이 하위 도메인을 ${CONSOLE_LOAD_BALANCER} 이라고 합니다.

    1. ibmcloud oc cluster get -c CLUSTER_ID 명령을 실행하십시오.
        ibmcloud oc cluster get -c CLUSTER_ID
        ```
    2. 출력에서 다음 형식과 일치하는 하위 도메인을 찾습니다: `<CLUSTER-NAME-PLUS-RANDOM-UNIQUE-STRING>.<REGION>.containers.appdomain.cloud`. 사용자 지정 인그레스 하위 도메인을 구성한 경우 형식은 대신 사용자 지정 구성과 일치합니다.
    
    

4. 연결 확인 및 문제 해결

연결 흐름에 설명된 연결을 확인하려면 다음 단계를 따르세요. 연결에 문제가 있는 경우 이 정보를 사용하여 문제를 해결하세요.

  1. Ingress가 정상이고 라우터와 콘솔 파드가 정상인지 확인합니다.

    1. 명령을 실행합니다.
        ibmcloud oc cluster get -c CLUSTERID
        ibmcloud oc ingress status-report get -c CLUSTERID
        ```
    2. 출력에 오류 상태가 표시되면 [인그레스 문제 해결 문서를](/docs/openshift?topic=openshift-ingress-status) 참조하여 문제를 해결하세요.
    
    
  2. OpenShift 클러스터 운영자가 정상인지 확인합니다.

    1. 명령을 실행하십시오.
        oc get clusteroperators
        ```
    2. 출력에서 운영자가 정상 상태가 아니거나 현재 버전에서 실행되고 있지 않은 경우 [OpenShift 클러스터 버전 문제 해결 문서를](/docs/openshift?topic=openshift-ts-cluster-version-downlevel) 사용하여 문제를 해결하세요. 또는 IBM 및 Red Hat 문서에서 특정 오류가 표시되는지 검색할 수 있습니다.
    3. 콘솔 운영자가 특별히 정상적이지 않은 경우, `openshift-console/console...` 및 `openshift-console-operator/console-operator...` 파드 로그에서 보안 그룹, ACL 또는 DNS 사용자 정의로 인해 파드가 OAuth 포트 또는 OpenShift 콘솔 URL 에 연결되지 못하는지 확인한다. 보안 그룹, ACL 또는 DNS가 연결을 차단하는 방식으로 구성되어 있을 수 있습니다.
    
    
  3. 클러스터 마스터 API 서버에 연결이 성공했는지 확인합니다.

    1. 명령을 실행하십시오. 이전 단계에서 찾은 클러스터 에이퍼서버 URL 를 지정합니다.
        curl -k -vvv ${CLUSTER_APISERVER_URL}/version
        ```
    2. 연결에 성공하지 못하면 다음 사항을 확인하고 발견한 문제를 해결하세요.
        1. `ibmcloud oc cluster get -c <CLUSTER-ID>` 명령을 실행하여 클러스터 마스터가 정상인지 확인합니다. 클러스터 마스터 문제 해결에 대한 자세한 내용은 [마스터 상태 검토하기를](/docs/openshift?topic=openshift-debug_master) 참조하세요.
        2. URL 의 호스트 이름 부분이 DNS를 통해 확인되었는지 확인합니다. `dig $(echo ${CLUSTER_APISERVER_URL} | cut -d/ -f3 | cut -d: -f1)` 명령을 사용하여 클러스터 API 서버 URL 를 지정합니다.
        3. 클러스터의 컨텍스트 기반 제한(CBR) 규칙으로 인해 클라이언트가 클러스터 API 서버에 연결할 수 없는지 확인합니다. 모든 IP와 서브넷을 허용하는 네트워크 영역을 공개 CBR 규칙에 임시로 추가하여 이를 테스트할 수 있습니다. 이 임시 변경으로 문제가 해결되면 트래픽을 허용하는 데 필요한 규칙을 변경하세요.
    
    
  4. OpenShift 콘솔을 노출하는 클러스터 로드 밸런서에 대한 연결이 성공했는지 확인합니다.

    1. 명령을 실행하십시오. 이전 단계에서 찾은 인그레스 하위 도메인을 지정합니다.
        curl -k -vvv https://console-openshift-console.${CONSOLE_LOAD_BALANCER}/
        ```
    2. 연결에 성공하지 못하면 다음 사항을 확인하고 발견한 문제를 해결하세요.
        1. 하위 도메인의 호스트 이름 부분이 DNS를 통해 확인되었는지 확인합니다. `dig console-openshift-console.${CONSOLE_LOAD_BALANCER}` 명령을 사용하십시오.
        2. 부하 분산 장치에 적용된 보안 그룹, ACL 또는 사용자 지정 VPC 경로를 수정한 경우, 적용한 변경 사항이나 규칙이 연결을 방해하는지 확인하세요. 이러한 구성 요소를 수정하지 않았고 기본값을 사용하는 경우 이 단계를 건너뛸 수 있습니다.
    
    
  5. 클러스터 OAuth 서버에 성공적으로 연결되었는지 확인합니다.

    1. 명령을 실행하십시오. 이전 단계에서 찾은 OAuth URL 클러스터를 지정합니다.
        curl -k -vvv ${CLUSTER_OAUTH_URL}/healthz
        ```
    2. 연결에 성공하지 못하면 다음 사항을 확인하고 발견한 문제를 해결하세요.
        1. `ibmcloud oc cluster get -c <CLUSTER-ID>` 명령을 실행하여 클러스터 마스터가 정상인지 확인합니다. 클러스터 마스터 문제 해결에 대한 자세한 내용은 [마스터 상태 검토하기를](/docs/openshift?topic=openshift-debug_master) 참조하세요.
        2. 클러스터의 호스트 이름 부분( OAuth URL )이 DNS를 통해 확인되었는지 확인합니다. `dig $(echo ${CLUSTER_OAUTH_URL} | cut -d/ -f3 | cut -d: -f1)` 을 사용하고 OAuth URL 클러스터를 지정합니다.
        3. 클라이언트가 클러스터 OAuth 서버에 연결하지 못하도록 하는 클러스터의 CBR(컨텍스트 기반 제한) 규칙이 있는지 확인합니다. 모든 IP와 서브넷을 허용하는 네트워크 영역을 공개 CBR 규칙에 임시로 추가하여 이를 테스트할 수 있습니다. 이 임시 변경으로 문제가 해결되면 트래픽을 허용하는 데 필요한 규칙을 변경하세요.
    
    
  6. IAM 연결이 성공했는지 확인합니다.

    1. 명령을 실행합니다.
        curl -vvv https://iam.cloud.ibm.com/healthz
        curl -vvv -o /dev/null -s https://login.ibm.com/
        ```
    2. 이러한 명령 중 하나라도 실패하면 클라이언트 시스템에서 해당 URL을 안정적으로 연결할 수 있는지, 클라이언트 또는 회사 방화벽에 의해 해당 URL이 차단되지 않았는지 확인하세요. 이러한 URL은 공용 인터넷에 액세스해야 한다는 점에 유의하세요.
    
    

5. 지원팀에 문의

위의 모든 단계를 완료했는데도 문제가 해결되지 않으면 지원팀에 문의하세요. 지원 케이스 열기 케이스 세부 정보에 관련 로그 파일, 오류 메시지 또는 명령 출력을 모두 포함해야 합니다.