VPC (Virtual Private Cloud) 에서 첫 번째 클러스터 설정

가상 사설 클라우드

VPC(Virtual Private Cloud)에 Red Hat® OpenShift® on IBM Cloud® 클러스터를 작성합니다.

  • Red Hat OpenShift on IBM Cloud 클러스터 인프라 환경에 대한 모든 관리형 서비스의 장점 정보를 제공하며, 앱 배포를 위해 Red Hat Enterprise Linux 에서 실행되는 Red Hat OpenShift 공구 및 카탈로그 를 활용합니다.
  • VPC는 퍼블릭 클라우드의 동적 확장성을 통해 프라이빗 클라우드 환경의 보안을 제공합니다. VPC는 v2 API, CLI 및 콘솔 기능의 선택 그룹이 포함된 다음 버전의 Red Hat OpenShift on IBM Cloud 인프라 제공자를 사용합니다.
  • 이 튜토리얼에서는 ibmcloud CLI 명령을 사용하여 VPC에서 클러스터를 생성합니다. 또는 오픈 소스 및 엔터프라이즈용 Terraform 모듈을 사용하여 VPC 인프라에 OpenShift 클러스터를 배포할 수 있습니다. Terraform IBM 모듈 레지스트리에서 더 많은 모듈을 살펴볼 수 있습니다.

대상

이 튜토리얼은 처음으로 VPC에서 Red Hat OpenShift on IBM Cloud 클러스터를 작성하는 관리자를 대상으로 합니다.

목표

이 튜토리얼 학습에서는 VPC(Virtual Private Cloud)에서 Red Hat OpenShift on IBM Cloud 클러스터를 작성합니다. 그런 다음, 내장된 Red Hat OpenShift 구성 요소에 액세스하고, Red Hat OpenShift 프로젝트에 앱을 배포한 뒤, VPC 로드 밸런서를 통해 앱을 공개하여 외부 사용자가 서비스에 액세스할 수 있도록 합니다.

얻을 수 있는 것

이 튜토리얼에서는 다음 리소스를 생성하게 됩니다. 학습서를 완료한 후 보존하지 않으려는 경우 이러한 자원을 삭제하는 선택적 단계가 있습니다.

  • VPC 클러스터
  • 클러스터에 배치된 간단한 Hello World 앱
  • 앱을 노출하기 위한 VPC 로드 밸런서

전제조건

권한 및 명령행 환경을 설정하려면 다음 전제조건 단계를 완료하십시오.

권한
계정 소유자라면 클러스터를 생성하는 데 필요한 권한을 이미 보유하고 있으므로 다음 단계로 진행할 수 있습니다. 그렇지 않으면 계정 소유자에게 API 키를 설정하고 IBM Cloud IAM에서 최소 사용자 권한을 지정하도록 요청하십시오.
명령행 도구
명령줄에서 리소스에 빠르게 접근하려면 IBM Cloud Shell. 그렇지 않으면 다음 단계를 완료하여 로컬 명령행 환경을 설정하십시오.
  1. IBM Cloud CLI(ibmcloud), Kubernetes Service 플러그인(ibmcloud oc) 및 IBM Cloud Container Registry 플러그인(ibmcloud cr)을 설치하십시오.
  2. Red Hat OpenShift(oc) 및 Kubernetes(kubectl) CLI를 설치하십시오.
  3. VPC에 대해 작업하려면 infrastructure-service 플러그인을 설치하십시오. 명령을 실행하기 위한 접두부는 ibmcloud is입니다.
    ibmcloud plugin install infrastructure-service
    ```
4. Kubernetes Service 플러그인을 최신 버전으로 업데이트하십시오.
```sh {: pre}
    ibmcloud plugin update kubernetes-service
    ```


VPC에서 클러스터 작성

IBM Cloud VPC(Virtual Private Cloud) 환경을 작성하십시오. 그 후 해당 VPC 인프라에 Red Hat OpenShift on IBM Cloud 클러스터를 작성하십시오. VPC에 대한 자세한 정보는 Virtual Private Cloud 시작하기를 참조하십시오.

  1. VPC 환경을 작성할 계정, 리소스 그룹 및 IBM Cloud 지역에 로그인하십시오. VPC는 클러스터를 생성하려는 것과 동일한 멀티존 메트로 리전에 설정되어야 합니다. 이 튜토리얼에서는 us-south에 VPC를 작성합니다. 기타 지원되는 지역은 VPC 클러스터에 대한 다중 구역 메트로를 참조하십시오. 연동 ID가 있는 경우, ‘ --sso ’ 옵션을 포함하십시오.

    ibmcloud login -r us-south [-g <resource_group>] [--sso]
    
  2. 클러스터의 VPC를 작성하십시오. 자세한 정보는 콘솔 또는 CLI에서 VPC 작성에 대한 문서를 참조하십시오.

    1. 이름이 myvpc인 VPC를 작성하고 출력의 ID를 기록하십시오. VPC는 퍼블릭 클라우드 내에서 워크로드를 실행하기 위해 격리된 환경을 제공합니다. 여러 클러스터에 대해 동일한 VPC를 사용할 수 있습니다(예: 서로 다른 클러스터가 서로 통신해야 하는 별도의 마이크로서비스를 호스팅하려는 경우). 클러스터를 구분하려는 경우(예: 다른 부서용), 각 클러스터에 대해 VPC를 작성할 수 있습니다.
        ibmcloud is vpc-create myvpc
        ```
    2. 퍼블릭 게이트웨이를 작성하고 출력에 있는 **ID**를 기록해 두십시오. 다음 단계에서는 작업자 노드가 공용 네트워크에서 통신할 수 있도록 이 퍼블릭 게이트웨이를 VPC 서브넷에 연결합니다. 웹 콘솔 및 OperatorHub와 같은 기본 Red Hat OpenShift 컴포넌트는 공용 네트워크 액세스를 필요로 합니다. 이 단계를 건너뛰는 경우, Red Hat OpenShift 웹 콘솔에 액세스하거나 `kubectl` 명령으로 사용자 클러스터에 액세스하려면 VPN 연결을 통하는 등의 방식으로 VPC 사설 네트워크에 연결해야 합니다.
    ```sh {: pre}
        ibmcloud is public-gateway-create gateway-us-south-1 <vpc_ID> us-south-1
        ```
    3. VPC에 대한 서브넷을 작성하고 해당 **ID**를 기록하십시오. VPC 서브넷을 작성할 때 다음 정보를 고려하십시오.
        *  **구역**: 클러스터의 각 구역에 대해 하나의 VPC 서브넷이 있어야 합니다. 사용 가능한 영역은 VPC를 생성한 지역에 따라 다릅니다. 지역에서 사용 가능한 구역을 나열하려면 `ibmcloud is zones`를 실행하십시오.
        *  **IP 주소**: VPC 서브넷은 클러스터에 있는 작업자 노드 및 로드 밸런서 서비스에 사설 IP 주소를 제공하므로 [충분한 IP 주소가 있는 서브넷을 작성](/docs/openshift?topic=openshift-vpc-subnets#vpc_basics_subnets)하십시오(예: 256개). VPC 서브넷에 있는 IP 주소의 수는 나중에 변경할 수 없습니다.
        *  **퍼블릭 게이트웨이**: 이전에 작성된 퍼블릭 게이트웨이를 포함시키십시오. 클러스터에 있는 각 구역마다 하나의 퍼블릭 게이트웨이가 있어야 합니다.
    
            ```sh {: pre}
            ibmcloud is subnet-create mysubnet1 VPC_ID --zone us-south-1 --ipv4-address-count 256 --pgw GATEWAY_ID
            ```
    여러 구역이 있는 경우, 각 구역에 대해 이 단계를 반복합니다.
    {: tip}
    
    
  3. 클러스터의 내부 레지스트리를 백업하기 위한 표준 IBM Cloud Object Storage 인스턴스를 작성하십시오. 출력에 있는 인스턴스 ID를 기록해 두십시오.

    ibmcloud resource service-instance-create myvpc-cos cloud-object-storage standard global
    
  4. 서브넷과 동일한 구역의 VPC에서 클러스터를 작성하십시오. 다음 명령어는 댈러스에 버전 4.21 클러스터를 생성하며, 기본 Red Hat OpenShift 구성 요소를 배포할 수 있도록 코어 4개 이상 및 메모리 16GB를 갖춘 워커 노드 2개를 최소 구성으로 설정합니다. 명령 옵션에 대한 자세한 정보는 cluster create vpc-gen2 CLI 참조 문서를 참조하십시오.

    ibmcloud oc cluster create vpc-gen2 --name myvpc-cluster --zone us-south-1 --version 4.21_openshift --flavor bx2.4x16 --workers 2 [--operating-system REDHAT_8_64] --vpc-id VPC_ID --subnet-id VPC_SUBNET_ID --cos-instance COS_CRN --disable-outbound-traffic-protection
    
  5. 클러스터 세부사항을 나열하십시오. 클러스터 상태를 검토하고, Ingress 하위 도메인을 확인하고, 마스터 URL을 기록해 두십시오. 클러스터 작성을 완료하는 데 다소 시간이 걸릴 수 있습니다. 클러스터 상태가 정상을 나타내면 클러스터 네트워크 및 Ingress 컴포넌트가 Red Hat OpenShift 웹 콘솔 및 기타 라우트에 사용하는 클러스터 도메인을 배치하고 업데이트하는 데 약 10분 이상이 소요됩니다. 계속하기 전에 Ingress 하위 도메인<cluster_name>-<globally_unique_account_HASH>-0001.<region>.containers.appdomain.cloud 패턴을 따르는지 확인하여 클러스터가 준비될 때까지 기다리십시오.

    ibmcloud oc cluster get --cluster myvpc-cluster
    
  6. 클러스터 컨텍스트를 설정하여 자기 자신을 Red Hat OpenShift 클러스터에 사용자로 추가하십시오.

    ibmcloud oc cluster config --cluster myvpc-cluster --admin
    
  7. 브라우저에서 마스터 URL의 주소로 이동하고 /console을 추가하십시오. 예: https://c0.containers.cloud.ibm.com:23652/console. 시간이 있는 경우에는 Red Hat OpenShift 웹 콘솔의 다양한 영역을 탐색해 볼 수 있습니다.

  8. Red Hat OpenShift 웹 콘솔의 메뉴 모음에서 프로필 IAM#user.name@email.com > 로그인 명령 복사 을 클릭합니다. CLI를 사용하여 인증하도록 명령행에 oc login 토큰 명령을 표시하고 복사하십시오.

    나중에 Red Hat OpenShift 콘솔에 액세스하려면 클러스터 마스터 URL을 저장하십시오. 이후 세션에서는 cluster config 단계를 건너뛰고 대신 콘솔에서 로그인 명령을 복사할 수 있습니다.

  9. 버전을 확인하여 클러스터에서 oc 명령이 올바르게 실행되는지 확인하십시오.

    oc version
    

    출력 예

    Client Version: v4.21.0
    Kubernetes Version: v1.35.7.2
    

    관리자 권한이 필요한 오퍼레이션(예: 클러스터에 있는 모든 작업자 노드 또는 팟(Pod) 나열)을 수행할 수 없으면 ibmcloud oc cluster config --cluster myvpc-cluster --admin 명령을 실행하여 클러스터 관리자에 적합한 TLS 인증서 및 권한 파일을 다운로드하십시오.

클러스터에 앱 배치

클러스터 내부로부터의 요청에서만 사용 가능한 새 샘플 앱을 빠르게 배치하십시오.

  1. Hello World 앱을 위한 ‘ Red Hat OpenShift ’ 프로젝트를 생성하세요.

    oc new-project hello-world
    
  2. 소스 코드를 사용하여 샘플 앱을 빌드하십시오. Red Hat OpenShift new-app 명령을 사용하여 이미지를 빌드할 Dockerfile 및 앱 코드가 포함된 원격 저장소의 디렉토리를 참조할 수 있습니다. 이 명령어는 이미지를 빌드하고, 이미지를 로컬 Docker 레지스트리에 저장하며, 앱 배포 구성(dc)과 서비스(svc)를 생성합니다. 새 앱 생성에 대한 자세한 내용은 Red Hat OpenShift 문서를 참조하세요.

    oc new-app --name hello-world https://github.com/IBM/container-service-getting-started-wt --context-dir="Lab 1"
    
  3. 샘플 Hello World 앱 컴포넌트가 작성되었는지 확인하십시오.

    1. hello-world 서비스를 나열하고 서비스 이름을 기록해 두십시오. 지금까지는 앱이 이러한 내부 클러스터 IP 주소만 청취했습니다. 다음 학습에서는 로드 밸런서가 외부 트래픽 요청을 앱에 전달할 수 있도록 서비스에 대한 로드 밸런서를 작성합니다.
        oc get svc -n hello-world
        ```
        출력 예
        ```sh {: screen}
        NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
        hello-world   ClusterIP   172.21.xxx.xxx   <none>       8080/TCP   31m
        ```
    2. 팟(Pod)을 나열하십시오. 이름에 `build`가 포함된 팟(Pod)은 새 앱 빌드 프로세스의 일부로서 **완료됨** 상태인 작업입니다. **hello-world** 팟(Pod) 상태가 **실행 중**인지 확인하십시오.
    ```sh {: pre}
        oc get pods -n hello-world
        ```
        출력 예
        ```sh {: screen}
        NAME                  READY     STATUS             RESTARTS   AGE
        hello-world-1-9cv7d   1/1       Running            0          30m
        hello-world-1-build   0/1       Completed          0          31m
        hello-world-1-deploy  0/1       Completed          0          31m
        ```
    
    
    

앱을 공용으로 노출시키기 위한 VPC 로드 밸런서 설정

앱을 공용 네트워크의 외부 요청에 노출시키기 위해 VPC 로드 밸런서를 설정하십시오.

클러스터에서 Kubernetes LoadBalancer 서비스를 작성하면 클러스터 외부의 VPC에 VPC 로드 밸런서가 자동으로 작성됩니다. VPC 로드 밸런서는 다중 구역이며 작업자 노드에서 자동으로 열리는 사설 NodePort를 통해 앱에 대한 요청을 라우팅합니다. 다음 다이어그램은 작업자 노드가 사설 서브넷에만 연결되어 있는 경우에도 사용자가 VPC 로드 밸런서를 통해 앱의 서비스에 액세스하는 방법을 보여줍니다.

  1. 클러스터에서 Kubernetes LoadBalancer 서비스를 작성하여 hello world 앱을 공용으로 노출하십시오.

    oc expose deployment/hello-world --type=LoadBalancer --name=hw-lb-svc  --port=8080 --target-port=8080 -n hello-world
    

    출력 예

    service "hw-lb-svc" exposed
    
    expose 매개변수에 대한 자세한 정보
    매개변수 설명
    expose 사용자가 VPC 로드 밸런서 호스트 이름을 사용하여 배치와 같은 Kubernetes 리소스에 액세스할 수 있도록 이러한 리소스를 노출시킵니다.
    dc/<hello-world-deployment> 이 서비스에서 노출할 리소스의 리소스 유형 및 이름입니다.
    --name=<hello-world-service> 서비스의 이름입니다.
    --type=LoadBalancer 작성할 서비스 유형입니다. 이 학습에서는 LoadBalancer 서비스를 작성합니다.
    --port=<8080> 서비스가 외부 네트워크 트래픽을 청취하는 포트입니다.
    --target-port=<8080> 앱에서 청취하고 서비스에서 수신 네트워크 트래픽을 지시하는 포트입니다. 이 예에서 target-portport와 동일하지만, 사용자가 작성하는 기타 앱은 서로 다른 포트를 사용할 수도 있습니다.
    -n <hello-world> 배치가 있는 네임스페이스입니다.
  2. 클러스터에서 Kubernetes LoadBalancer 서비스가 작성되었는지 확인하십시오. Kubernetes LoadBalancer 서비스를 작성하면 사용자를 위해 VPC 로드 밸런서가 자동으로 작성됩니다. 이 VPC 로드 밸런서는 Kubernetes LoadBalancer 서비스에 CLI 출력의 LoadBalancer Ingress 필드에서 볼 수 있는 호스트 이름을 지정합니다. VPC에서, 서비스에 대한 외부 IP 주소는 고정되어 있지 않으므로 클러스터에 있는 서비스에는 호스트 이름이 지정됩니다. VPC에서 VPC 로드 밸런서는 프로비저닝하는 데 몇 분 정도 소요됩니다. VPC 로드 밸런서가 준비되기 전에는 호스트 이름을 통해 Kubernetes LoadBalancer 서비스에 액세스할 수 없습니다.

    oc describe service hw-lb-svc -n hello-world
    

    CLI 출력 예:

    NAME:                     hw-lb-svc
    Namespace:                default
    Labels:                   app=hello-world-deployment
    Annotations:              <none>
    Selector:                 app=hello-world-deployment
    Type:                     LoadBalancer
    IP:                       172.21.xxx.xxx
    LoadBalancer Ingress:     1234abcd-us-south.lb.appdomain.cloud
    Port:                     <unset> 8080/TCP
    TargetPort:               8080/TCP
    NodePort:                 <unset> 32040/TCP
    Endpoints:
    Session Affinity:         None
    External Traffic Policy:  Cluster
    Events:
        Type    Reason                Age   From                Message
        ----    ------                ----  ----                -------
        Normal  EnsuringLoadBalancer  1m    service-controller  Ensuring load balancer
        Normal  EnsuredLoadBalancer   1m    service-controller  Ensured load balancer
    
  3. VPC에 VPC 로드 밸런서가 작성되었는지 확인하십시오. 출력에서 VPC 로드 밸랜서의 Provision statusactive이고 Operating statusonline인지 확인하십시오.

    VPC 로드 밸런서는 kube-<cluster_ID>-<kubernetes_lb_service_UID> 형식으로 이름이 지정됩니다. 클러스터 ID를 보려면 ibmcloud oc cluster get --cluster CLUSTER_NAME을(를) 실행하십시오. Kubernetes LoadBalancer 서비스 UID를 보려면 kubectl get svc hw-lb-svc -o yaml를 실행하고 출력에서 metadata.uid 필드를 찾으십시오.

    ibmcloud is load-balancers
    

    다음 CLI 출력 예에서는 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306으로 이름 지정된 VPC 로드 밸런서가 Kubernetes LoadBalancer 서비스에 대해 작성됩니다.

    ID                                          Name                                                         Family        Subnets               Is public   Provision status   Operating status   Resource group
    r006-d044af9b-92bf-4047-8f77-a7b86efcb923   kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306   Application   mysubnet-us-south-3   true        active             online             default
    
  4. 2단계에서 찾은 VPC 로드 밸런서에서 지정한 Kubernetes LoadBalancer 서비스의 호스트 이름과 포트에 curl을 사용하여 앱으로 요청을 보내십시오. 예:

    curl 1234abcd-us-south.lb.appdomain.cloud:8080
    

    출력 예

    Hello world from hello-world-deployment-5fd7787c79-sl9hn! Your app is up and running in a cluster!
    
  5. 선택사항: 이 학습에서 작성한 리소스를 정리하기 위해 각 앱에 지정된 레이블을 사용할 수 있습니다.

    1. hello-world 프로젝트의 각 앱에 대한 모든 리소스를 나열하십시오.
        oc get all -l app=hello-world -o name -n hello-world
        ```
        출력 예
        ```sh {: screen}
        pod/hello-world-1-dh2ff
        replicationcontroller/hello-world-1
        service/hello-world
        deploymentconfig.apps.openshift.io/hello-world
        buildconfig.build.openshift.io/hello-world
        build.build.openshift.io/hello-world-1
        imagestream.image.openshift.io/hello-world
        imagestream.image.openshift.io/node
        ```
    2. 작성한 모든 리소스를 삭제하십시오.
    ```sh {: pre}
        oc delete all -l app=hello-world -n hello-world
        ```
    
    

다음에 수행할 작업

이제 VPC 클러스터가 있으므로 수행할 수 있는 작업에 대해 자세히 살펴보십시오.

도움이 필요하거나 질문이 있거나 VPC 클러스터에 대한 피드백을 제공하려고 하십니까? Slack 채널에 게시하십시오.