4.3. OpenShift Virtualization에 호스팅된 제어 평면 배포


호스팅된 제어 평면과 OpenShift 가상화를 사용하면 KubeVirt 가상 머신에서 호스팅되는 작업자 노드가 있는 OpenShift Container Platform 클러스터를 만들 수 있습니다. OpenShift Virtualization의 호스팅 제어 평면은 다음과 같은 여러 가지 이점을 제공합니다.

  • 동일한 기본 베어메탈 인프라에 호스팅된 제어 평면과 호스팅된 클러스터를 패키징하여 리소스 사용을 향상시킵니다.
  • 강력한 격리를 제공하기 위해 호스팅된 제어 평면과 호스팅된 클러스터를 분리합니다.
  • 베어 메탈 노드 부트스트래핑 프로세스를 제거하여 클러스터 프로비저닝 시간을 줄입니다.
  • 동일한 기반 OpenShift Container Platform 클러스터에서 여러 릴리스를 관리합니다.

호스트된 컨트롤 플레인 기능은 기본적으로 활성화되어 있습니다.

호스팅된 제어 평면 명령줄 인터페이스인 hcp 를 사용하여 OpenShift Container Platform 호스팅 클러스터를 생성할 수 있습니다. 호스팅된 클러스터는 자동으로 관리형 클러스터로 가져옵니다. 이 자동 가져오기 기능을 비활성화하려면 "호스팅된 클러스터를 멀티클러스터 엔진 Operator로 자동 가져오기 비활성화"를 참조하세요.

OpenShift Virtualization에 호스팅된 제어 평면을 배포할 준비를 할 때 다음 정보를 고려하세요.

  • 베어메탈에서 관리 클러스터를 실행합니다.
  • 호스팅된 각 클러스터에는 클러스터 전체에서 고유한 이름이 있어야 합니다.
  • 호스팅된 클러스터 이름으로 클러스터를 사용하지 마세요.
  • 멀티클러스터 엔진 운영자가 관리하는 클러스터의 네임스페이스에는 호스팅된 클러스터를 만들 수 없습니다.
  • 호스팅된 제어 평면에 대한 스토리지를 구성할 때 권장되는 etcd 사례를 고려하세요. 지연 시간 요구 사항을 충족하려면 각 제어 평면 노드에서 실행되는 모든 호스팅된 제어 평면 etcd 인스턴스에 빠른 스토리지 장치를 전용으로 지정하세요. LVM 스토리지를 사용하여 호스팅된 etcd 포드에 대한 로컬 스토리지 클래스를 구성할 수 있습니다. 자세한 내용은 "권장되는 etcd 사례" 및 "논리 볼륨 관리자 스토리지를 사용한 영구 스토리지"를 참조하세요.

4.3.1.1. 사전 요구 사항

OpenShift Virtualization에서 OpenShift Container Platform 클러스터를 생성하려면 다음 전제 조건을 충족해야 합니다.

  • KUBECONFIG 환경 변수에 지정된 OpenShift Container Platform 클러스터 버전 4.14 이상에 대한 관리자 액세스 권한이 있습니다.
  • OpenShift Container Platform 관리 클러스터에는 다음 명령에 표시된 것처럼 와일드카드 DNS 경로가 활성화되어 있어야 합니다.

    $ oc patch ingresscontroller -n openshift-ingress-operator default \
      --type=json \
      -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
    Copy to Clipboard Toggle word wrap
  • OpenShift Container Platform 관리 클러스터에는 OpenShift Virtualization 버전 4.14 이상이 설치되어 있습니다. 자세한 내용은 "웹 콘솔을 사용하여 OpenShift Virtualization 설치"를 참조하세요.
  • OpenShift Container Platform 관리 클러스터는 온프레미스 베어 메탈입니다.
  • OpenShift Container Platform 관리 클러스터는 기본 Pod 네트워크 CNI로 OVNKubernetes로 구성됩니다.
  • OpenShift Container Platform 관리 클러스터에는 기본 스토리지 클래스가 있습니다. 자세한 내용은 "Postinstallation storage configuration"을 참조하십시오. 다음 예제에서는 기본 저장소 클래스를 설정하는 방법을 보여줍니다.

    $ oc patch storageclass ocs-storagecluster-ceph-rbd \
      -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    Copy to Clipboard Toggle word wrap
  • quay.io/openshift-release-dev 저장소에 대한 유효한 풀 시크릿 파일이 있습니다. 자세한 내용은 "사용자 제공 인프라를 갖춘 x86_64 플랫폼에 OpenShift 설치"를 참조하세요.
  • 호스팅된 컨트롤 플레인 명령줄 인터페이스를 설치했습니다.
  • 로드 밸런서를 구성했습니다. 자세한 내용은 "MetalLB 구성"을 참조하세요.
  • 최적의 네트워크 성능을 위해 KubeVirt 가상 머신을 호스팅하는 OpenShift Container Platform 클러스터에서 네트워크 최대 전송 단위(MTU)를 사용하고 있습니다. 낮은 MTU 설정을 사용하면 네트워크 지연 시간과 호스팅된 Pod의 처리량에 영향을 미칩니다. MTU가 9000 이상일 때만 노드 풀에서 멀티큐를 활성화합니다.
  • 멀티클러스터 엔진 Operator에는 최소한 하나의 관리형 OpenShift Container Platform 클러스터가 있습니다. 로컬 클러스터 는 자동으로 가져옵니다. 로컬 클러스터 에 대한 자세한 내용은 멀티클러스터 엔진 운영자 설명서의 "고급 구성"을 참조하세요. 다음 명령을 실행하여 허브 클러스터의 상태를 확인할 수 있습니다.

    $ oc get managedclusters local-cluster
    Copy to Clipboard Toggle word wrap
  • OpenShift Virtualization 가상 머신을 호스팅하는 OpenShift Container Platform 클러스터에서 라이브 마이그레이션을 활성화할 수 있도록 ReadWriteMany (RWX) 스토리지 클래스를 사용하고 있습니다.

4.3.1.2. 방화벽 및 포트 요구 사항

관리 클러스터, 제어 평면 및 호스팅 클러스터 간에 포트가 통신할 수 있도록 방화벽 및 포트 요구 사항을 충족하는지 확인하세요.

  • kube-apiserver 서비스는 기본적으로 포트 6443에서 실행되며 제어 평면 구성 요소 간 통신을 위해 인그레스 액세스가 필요합니다.

    • NodePort 게시 전략을 사용하는 경우 kube-apiserver 서비스에 할당된 노드 포트가 노출되는지 확인하세요.
    • MetalLB 부하 분산을 사용하는 경우 부하 분산 장치 IP 주소에 사용되는 IP 범위에 대한 수신 액세스를 허용합니다.
  • NodePort 게시 전략을 사용하는 경우 ignition-serverOauth-server 설정에 대한 방화벽 규칙을 사용하세요.
  • 호스팅된 클러스터에서 양방향 통신을 허용하는 역방향 터널을 구축하는 konnectivity 에이전트는 포트 6443에서 클러스터 API 서버 주소로의 출구 액세스가 필요합니다. 해당 출구 접근 권한을 통해 에이전트는 kube-apiserver 서비스에 접속할 수 있습니다.

    • 클러스터 API 서버 주소가 내부 IP 주소인 경우 포트 6443의 IP 주소로 워크로드 서브넷에서 액세스를 허용합니다.
    • 해당 주소가 외부 IP 주소인 경우 노드에서 해당 외부 IP 주소로 포트 6443을 통해 유출을 허용합니다.
  • 기본 포트인 6443을 변경하는 경우 해당 변경 사항을 반영하도록 규칙을 조정하세요.
  • 클러스터에서 실행되는 작업 부하에 필요한 모든 포트를 열어야 합니다.
  • 방화벽 규칙, 보안 그룹 또는 기타 액세스 제어를 사용하여 필요한 소스에만 액세스를 제한합니다. 필요하지 않은 이상 포트를 공개적으로 노출하지 마십시오.
  • 실제 운영 환경에 배포하는 경우, 로드 밸런서를 사용하여 단일 IP 주소를 통해 액세스를 간소화합니다.

4.3.2. 컴퓨팅 노드에 대한 라이브 마이그레이션

호스팅된 클러스터 가상 머신(VM)의 관리 클러스터가 업데이트나 유지 관리를 받는 동안, 호스팅된 클러스터 VM은 호스팅된 클러스터 작업 부하를 방해하지 않도록 자동으로 라이브 마이그레이션될 수 있습니다. 그 결과, KubeVirt 플랫폼에서 호스팅되는 클러스터의 가용성과 운영에 영향을 주지 않고 관리 클러스터를 업데이트할 수 있습니다.

중요

KubeVirt VM의 라이브 마이그레이션은 VM이 루트 볼륨과 kubevirt-csi CSI 공급자에 매핑된 스토리지 클래스 모두에 대해 ReadWriteMany (RWX) 스토리지를 사용하는 경우 기본적으로 활성화됩니다.

NodePool 객체의 상태 섹션에서 KubeVirtNodesLiveMigratable 조건을 확인하여 노드 풀의 VM이 라이브 마이그레이션이 가능한지 확인할 수 있습니다.

다음 예에서는 RWX 스토리지가 사용되지 않기 때문에 VM을 라이브 마이그레이션할 수 없습니다.

VM을 실시간 마이그레이션할 수 없는 구성의 예

    - lastTransitionTime: "2024-10-08T15:38:19Z"
      message: |
        3 of 3 machines are not live migratable
        Machine user-np-ngst4-gw2hz: DisksNotLiveMigratable: user-np-ngst4-gw2hz is not a live migratable machine: cannot migrate VMI: PVC user-np-ngst4-gw2hz-rhcos is not shared, live migration requires that all PVCs must be shared (using ReadWriteMany access mode)
        Machine user-np-ngst4-npq7x: DisksNotLiveMigratable: user-np-ngst4-npq7x is not a live migratable machine: cannot migrate VMI: PVC user-np-ngst4-npq7x-rhcos is not shared, live migration requires that all PVCs must be shared (using ReadWriteMany access mode)
        Machine user-np-ngst4-q5nkb: DisksNotLiveMigratable: user-np-ngst4-q5nkb is not a live migratable machine: cannot migrate VMI: PVC user-np-ngst4-q5nkb-rhcos is not shared, live migration requires that all PVCs must be shared (using ReadWriteMany access mode)
      observedGeneration: 1
      reason: DisksNotLiveMigratable
      status: "False"
      type: KubeVirtNodesLiveMigratable
Copy to Clipboard Toggle word wrap

다음 예에서는 VM이 라이브 마이그레이션 요구 사항을 충족합니다.

VM을 라이브 마이그레이션할 수 있는 구성 예

    - lastTransitionTime: "2024-10-08T15:38:19Z"
      message: "All is well"
      observedGeneration: 1
      reason: AsExpected
      status: "True"
      type: KubeVirtNodesLiveMigratable
Copy to Clipboard Toggle word wrap

라이브 마이그레이션은 일반적인 상황에서 VM을 중단으로부터 보호할 수 있지만 인프라 노드 장애와 같은 이벤트가 발생하면 장애가 발생한 노드에서 호스팅되는 모든 VM이 강제로 다시 시작될 수 있습니다. 라이브 마이그레이션이 성공하려면 VM이 호스팅되는 소스 노드가 올바르게 작동해야 합니다.

노드 풀의 VM을 라이브 마이그레이션할 수 없는 경우 관리 클러스터의 유지 관리 중에 호스팅된 클러스터에서 작업 중단이 발생할 수 있습니다. 기본적으로 호스팅된 제어 평면 컨트롤러는 VM이 중지되기 전에 라이브 마이그레이션이 불가능한 KubeVirt VM에 호스팅된 워크로드를 비우려고 시도합니다. VM을 중지하기 전에 호스팅된 클러스터 노드를 비우면 Pod 중단 예산을 통해 호스팅된 클러스터 내의 워크로드 가용성을 보호할 수 있습니다.

4.3.3. KubeVirt 플랫폼을 사용하여 호스트 클러스터 생성

OpenShift Container Platform 4.14 이상에서는 KubeVirt로 클러스터를 생성하여 외부 인프라로 생성할 수 있습니다.

4.3.3.1. CLI를 사용하여 KubeVirt 플랫폼에서 호스트 클러스터 생성

호스트된 클러스터를 생성하려면 호스트된 컨트롤 플레인 명령줄 인터페이스인 hcp 를 사용할 수 있습니다.

프로세스

  1. 다음 명령을 입력하여 KubeVirt 플랫폼을 사용하여 호스팅된 클러스터를 생성합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <node_pool_replica_count> \
    2
    
      --pull-secret <path_to_pull_secret> \
    3
    
      --memory <value_for_memory> \
    4
    
      --cores <value_for_cpu> \
    5
    
      --etcd-storage-class=<etcd_storage_class> 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: my-hosted-cluster ) .
    2
    노드 풀 복제본 수를 지정합니다(예: 3 ). 동일한 수의 복제본을 생성하려면 복제본 수를 0 이상으로 지정해야 합니다. 그렇지 않으면 노드 풀이 생성되지 않습니다.
    3
    풀 시크릿의 경로를 지정합니다(예: /user/name/pullsecret ).
    4
    메모리 값을 지정합니다(예: 6Gi ).
    5
    CPU 값을 지정합니다(예: 2 ).
    6
    etcd 스토리지 클래스 이름을 지정합니다(예: lvm-storageclass ).
    참고

    --release-image 플래그를 사용하여 특정 OpenShift Container Platform 릴리스로 호스팅 클러스터를 설정할 수 있습니다.

    --node-pool-replicas 플래그에 따라 두 개의 가상 머신 작업자 복제본이 있는 클러스터에 대한 기본 노드 풀이 생성됩니다.

  2. 잠시 후 다음 명령을 입력하여 호스팅된 컨트롤 플레인 포드가 실행 중인지 확인합니다.

    $ oc -n clusters-<hosted-cluster-name> get pods
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                  READY   STATUS    RESTARTS   AGE
    capi-provider-5cc7b74f47-n5gkr                        1/1     Running   0          3m
    catalog-operator-5f799567b7-fd6jw                     2/2     Running   0          69s
    certified-operators-catalog-784b9899f9-mrp6p          1/1     Running   0          66s
    cluster-api-6bbc867966-l4dwl                          1/1     Running   0          66s
    .
    .
    .
    redhat-operators-catalog-9d5fd4d44-z8qqk              1/1     Running   0          66s
    Copy to Clipboard Toggle word wrap

    KubeVirt 가상 머신에서 지원하는 작업자 노드가 있는 호스팅된 클러스터는 일반적으로 완전히 프로비저닝되는 데 10-15분이 걸립니다.

검증

  • 호스트 클러스터의 상태를 확인하려면 다음 명령을 입력하여 해당 HostedCluster 리소스를 참조하십시오.

    $ oc get --namespace clusters hostedclusters
    Copy to Clipboard Toggle word wrap

    완전히 프로비저닝된 HostedCluster 오브젝트를 설명하는 다음 예제 출력을 참조하십시오.

    NAMESPACE   NAME                VERSION     KUBECONFIG                 PROGRESS    AVAILABLE   PROGRESSING   MESSAGE
    clusters    my-hosted-cluster   <4.x.0>     example-admin-kubeconfig   Completed   True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

    & lt;4.x.0 >을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꿉니다.

기본적으로 HyperShift Operator는 동일한 클러스터 내에서 호스팅되는 클러스터의 컨트롤 플레인 Pod와 KubeVirt 작업자 VM을 모두 호스팅합니다. 외부 인프라 기능을 사용하면 작업자 노드 VM을 컨트롤 플레인 Pod와 별도의 클러스터에 배치할 수 있습니다.

  • 관리 클러스터 는 HyperShift Operator를 실행하고 호스팅된 클러스터의 컨트롤 플레인 Pod를 호스팅하는 OpenShift Container Platform 클러스터입니다.
  • 인프라 클러스터 는 호스팅된 클러스터의 KubeVirt 작업자 VM을 실행하는 OpenShift Container Platform 클러스터입니다.
  • 기본적으로 관리 클러스터는 VM을 호스팅하는 인프라 클러스터 역할을 합니다. 그러나 외부 인프라의 경우 관리 및 인프라 클러스터는 다릅니다.

사전 요구 사항

  • KubeVirt 노드를 호스팅하려면 외부 인프라 클러스터에 네임스페이스가 있어야 합니다.
  • 외부 인프라 클러스터에 대한 kubeconfig 파일이 있어야 합니다.

프로세스

hcp 명령줄 인터페이스를 사용하여 호스팅된 클러스터를 만들 수 있습니다.

  • 인프라 클러스터에 KubeVirt 워커 VM을 배치하려면 다음 예와 같이 --infra-kubeconfig-file--infra-namespace 인수를 사용합니다.

    $ hcp create cluster kubevirt \
      --name <hosted-cluster-name> \
    1
    
      --node-pool-replicas <worker-count> \
    2
    
      --pull-secret <path-to-pull-secret> \
    3
    
      --memory <value-for-memory> \
    4
    
      --cores <value-for-cpu> \
    5
    
      --infra-namespace=<hosted-cluster-namespace>-<hosted-cluster-name> \
    6
    
      --infra-kubeconfig-file=<path-to-external-infra-kubeconfig> 
    7
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: my-hosted-cluster ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 6Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    예를 들어 clusters-example과 같이 인프라 네임스페이스를 지정합니다.
    7
    인프라 클러스터에 대한 kubeconfig 파일의 경로를 지정합니다(예: /user/name/external-infra-kubeconfig ) .

    해당 명령을 입력한 후, 제어 플레인 포드는 HyperShift Operator가 실행되는 관리 클러스터에 호스팅되고, KubeVirt VM은 별도의 인프라 클러스터에 호스팅됩니다.

4.3.3.3. 콘솔을 사용하여 호스팅 클러스터 만들기

콘솔을 사용하여 KubeVirt 플랫폼으로 호스팅 클러스터를 생성하려면 다음 단계를 완료하세요.

프로세스

  1. OpenShift Container Platform 웹 콘솔을 열고 관리자 자격 증명을 입력하여 로그인합니다.
  2. 콘솔 헤더에서 모든 클러스터가 선택되어 있는지 확인하세요.
  3. 인프라 > 클러스터를 클릭합니다.
  4. 클러스터 만들기 > Red Hat OpenShift Virtualization > 호스팅을 클릭합니다.
  5. 클러스터 만들기 페이지에서 프롬프트에 따라 클러스터 및 노드 풀에 대한 세부 정보를 입력합니다.

    참고
    • 미리 정의된 값을 사용하여 콘솔의 필드를 자동으로 채우려면 OpenShift Virtualization 자격 증명을 만들 수 있습니다. 자세한 내용은 "온-프레미스 환경에 대한 자격 증명 만들기"를 참조하세요.
    • 클러스터 세부 정보 페이지에서 풀 시크릿은 OpenShift Container Platform 리소스에 액세스하는 데 사용하는 OpenShift Container Platform 풀 시크릿입니다. OpenShift Virtualization 자격 증명을 선택한 경우 풀 비밀이 자동으로 채워집니다.
  6. 노드 풀 페이지에서 네트워킹 옵션 섹션을 확장하고 노드 풀에 대한 네트워킹 옵션을 구성합니다.

    1. 추가 네트워크 필드에 <네임스페이스>/<이름> 형식으로 네트워크 이름을 입력합니다(예: my-namespace/network1 ). 네임스페이스와 이름은 유효한 DNS 레이블이어야 합니다. 여러 네트워크가 지원됩니다.
    2. 기본적으로 기본 Pod 네트워크 연결 확인란이 선택되어 있습니다. 추가 네트워크가 있는 경우에만 이 확인란을 선택 취소할 수 있습니다.
  7. 입력 내용을 검토하고 '만들기'를 클릭하세요.

    호스팅된 클러스터 뷰가 표시됩니다.

  8. 호스팅된 클러스터 보기에서 호스팅된 클러스터의 배포를 모니터링합니다. 호스팅된 클러스터에 대한 정보가 보이지 않으면 모든 클러스터가 선택되어 있는지 확인하고 클러스터 이름을 클릭하세요.
  9. 컨트롤 플레인 구성 요소가 준비될 때까지 기다립니다. 이 과정은 몇 분 정도 걸릴 수 있습니다.
  10. 노드 풀 상태를 보려면 NodePool 섹션으로 스크롤하세요. 노드를 설치하는 데 걸리는 시간은 약 10분입니다. 노드를 클릭하여 노드가 호스팅된 클러스터에 참여하고 있는지 확인할 수도 있습니다.

모든 OpenShift Container Platform 클러스터에는 기본 애플리케이션 Ingress Controller가 포함되어 있으며, 이와 연결된 와일드카드 DNS 레코드가 있어야 합니다. 기본적으로 HyperShift KubeVirt 공급자를 사용하여 생성된 호스팅 클러스터는 KubeVirt 가상 머신이 실행되는 OpenShift Container Platform 클러스터의 하위 도메인이 됩니다.

예를 들어, OpenShift Container Platform 클러스터에는 다음과 같은 기본 수신 DNS 항목이 있을 수 있습니다.

*.apps.mgmt-cluster.example.com
Copy to Clipboard Toggle word wrap

결과적으로, guest 라는 이름의 KubeVirt 호스팅 클러스터가 해당 기본 OpenShift Container Platform 클러스터에서 실행되면 다음과 같은 기본 수신이 발생합니다.

*.apps.guest.apps.mgmt-cluster.example.com
Copy to Clipboard Toggle word wrap

프로세스

기본 수신 DNS가 제대로 작동하려면 KubeVirt 가상 머신을 호스팅하는 클러스터에서 와일드카드 DNS 경로를 허용해야 합니다.

  • 다음 명령을 입력하여 이 동작을 구성할 수 있습니다.

    $ oc patch ingresscontroller -n openshift-ingress-operator default \
      --type=json \
      -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
    Copy to Clipboard Toggle word wrap
참고

기본 호스팅 클러스터 인그레스를 사용하면 연결이 포트 443을 통한 HTTPS 트래픽으로 제한됩니다. 포트 80을 통한 일반 HTTP 트래픽은 거부됩니다. 이 제한은 기본 수신 동작에만 적용됩니다.

4.3.4.1. 사용자 정의 DNS 이름 정의

클러스터 관리자는 노드 부트스트랩 및 제어 평면 통신에 사용되는 내부 엔드포인트와 다른 외부 API DNS 이름을 사용하여 호스팅된 클러스터를 만들 수 있습니다. 다음과 같은 이유로 다른 DNS 이름을 정의할 수 있습니다.

  • 내부 루트 CA에 바인딩된 제어 평면 기능을 손상시키지 않고 사용자용 TLS 인증서를 공개 CA의 인증서로 교체하려면
  • 분할 수평 DNS 및 NAT 시나리오를 지원하려면
  • 올바른 kubeconfig 및 DNS 구성을 사용하여 "로그인 명령 표시" 기능과 같은 기능을 사용할 수 있는 독립 실행형 제어 평면과 유사한 경험을 보장하려면

HostedCluster 객체의 kubeAPIServerDNSName 필드에 도메인 이름을 입력하여 초기 설정이나 2일차 작업 중에 DNS 이름을 정의할 수 있습니다.

사전 요구 사항

  • kubeAPIServerDNSName 필드에 설정할 DNS 이름을 포함하는 유효한 TLS 인증서가 있습니다.
  • DNS 이름은 접근 가능하고 올바른 주소를 가리키는 확인 가능한 URI입니다.

프로세스

  • HostedCluster 개체의 사양에서 kubeAPIServerDNSName 필드와 도메인 주소를 추가하고 다음 예와 같이 사용할 인증서를 지정합니다.

    #...
    spec:
      configuration:
        apiServer:
          servingCerts:
            namedCertificates:
            - names:
              - xxx.example.com
              - yyy.example.com
              servingCertificate:
                name: <my_serving_certificate>
      kubeAPIServerDNSName: <your_custom_address> 
    1
    Copy to Clipboard Toggle word wrap
    1
    kubeAPIServerDNSName 필드의 값은 유효하고 주소 지정이 가능한 도메인이어야 합니다.

kubeAPIServerDNSName 필드를 정의하고 인증서를 지정하면 Control Plane Operator 컨트롤러가 custom-admin-kubeconfig 라는 kubeconfig 파일을 생성하고 이 파일은 HostedControlPlane 네임스페이스에 저장됩니다. 인증서는 루트 CA에서 생성되고, HostedControlPlane 네임스페이스는 인증서의 만료 및 갱신을 관리합니다.

Control Plane Operator는 HostedControlPlane 네임스페이스에 CustomKubeconfig 라는 새로운 kubeconfig 파일을 보고합니다. 해당 파일은 kubeAPIServerDNSName 필드에 정의된 새 서버를 사용합니다.

사용자 정의 kubeconfig 파일은 HostedCluster 개체의 상태 필드에서 CustomKubeconfig 로 참조됩니다. CustomKubeConfig 필드는 선택 사항이며 kubeAPIServerDNSName 필드가 비어 있지 않은 경우에만 추가할 수 있습니다. CustomKubeConfig 필드가 설정되면 HostedCluster 네임스페이스에 <hosted_cluster_name>-custom-admin-kubeconfig 라는 이름의 비밀이 생성됩니다. 이 비밀을 사용하여 HostedCluster API 서버에 액세스할 수 있습니다. 2일차 작업 중에 CustomKubeConfig 필드를 제거하면 관련된 모든 비밀과 상태 참조가 삭제됩니다.

참고

이 프로세스는 데이터 플레인에 직접적인 영향을 미치지 않으므로 롤아웃이 발생하지 않을 것으로 예상됩니다. HostedControlPlane 네임스페이스는 HyperShift Operator로부터 변경 사항을 수신하고 해당 필드를 삭제합니다.

HostedCluster 개체의 사양에서 kubeAPIServerDNSName 필드를 제거하면 새로 생성된 모든 비밀과 CustomKubeconfig 참조가 클러스터와 상태 필드에서 제거됩니다.

4.3.5. 수신 및 DNS 동작 사용자 지정

기본 수신 및 DNS 동작을 사용하지 않으려면 생성 시점에 고유한 기본 도메인을 사용하여 KubeVirt 호스팅 클러스터를 구성할 수 있습니다. 이 옵션을 사용하려면 생성 중에 수동 구성 단계가 필요하며 클러스터 생성, 로드 밸런서 생성, 와일드카드 DNS 구성이라는 세 가지 주요 단계가 포함됩니다.

4.3.5.1. 기본 도메인을 지정하는 호스팅 클러스터 배포

기본 도메인을 지정하는 호스팅 클러스터를 만들려면 다음 단계를 완료하세요.

프로세스

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

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <value_for_memory> \ 
    4
    
      --cores <value_for_cpu> \ 
    5
    
      --base-domain <basedomain> 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정하세요.
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 6Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    기본 도메인을 지정합니다(예: hypershift.lab ).

    결과적으로 호스팅된 클러스터에는 클러스터 이름과 기본 도메인에 대해 구성된 수신 와일드카드가 있습니다(예: .apps.example.hypershift.lab ). 호스팅 클러스터는 고유한 기본 도메인으로 호스팅 클러스터를 만든 후에는 필요한 DNS 레코드와 부하 분산 장치를 구성해야 하므로 부분적 상태로 유지됩니다.

  2. 다음 명령을 입력하여 호스팅된 클러스터의 상태를 확인하세요.

    $ oc get --namespace clusters hostedclusters
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME            VERSION   KUBECONFIG                       PROGRESS   AVAILABLE   PROGRESSING   MESSAGE
    example                   example-admin-kubeconfig         Partial    True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 입력하여 클러스터에 액세스하세요.

    $ hcp create kubeconfig --name <hosted_cluster_name> \
      > <hosted_cluster_name>-kubeconfig
    Copy to Clipboard Toggle word wrap
    $ oc --kubeconfig <hosted_cluster_name>-kubeconfig get co
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    <4.x.0>     False       False         False      30m     RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.example.hypershift.lab): Get "https://console-openshift-console.apps.example.hypershift.lab": dial tcp: lookup console-openshift-console.apps.example.hypershift.lab on 172.31.0.10:53: no such host
    ingress                                    <4.x.0>     True        False         True       28m     The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
    Copy to Clipboard Toggle word wrap

    <4.x.0>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.

다음 단계

출력의 오류를 수정하려면 "로드 밸런서 설정" 및 "와일드카드 DNS 설정"의 단계를 완료하세요.

참고

호스팅된 클러스터가 베어 메탈인 경우 로드 밸런서 서비스를 설정하기 위해 MetalLB가 필요할 수 있습니다. 자세한 내용은 "MetalLB 구성"을 참조하세요.

4.3.5.2. 로드 밸런서 설정

KubeVirt VM으로 수신 트래픽을 라우팅하고 로드 밸런서 IP 주소에 와일드카드 DNS 항목을 할당하는 로드 밸런서 서비스를 설정합니다.

프로세스

  1. 호스팅된 클러스터 수신을 노출하는 NodePort 서비스가 이미 있습니다. 노드 포트를 내보내고 해당 포트를 타겟으로 하는 로드 밸런서 서비스를 만들 수 있습니다.

    1. 다음 명령을 입력하여 HTTP 노드 포트를 확인하세요.

      $ oc --kubeconfig <hosted_cluster_name>-kubeconfig get services \
        -n openshift-ingress router-nodeport-default \
        -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}'
      Copy to Clipboard Toggle word wrap

      다음 단계에서 사용할 HTTP 노드 포트 값을 기록해 두세요.

    2. 다음 명령을 입력하여 HTTPS 노드 포트를 가져옵니다.

      $ oc --kubeconfig <hosted_cluster_name>-kubeconfig get services \
        -n openshift-ingress router-nodeport-default \
        -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
      Copy to Clipboard Toggle word wrap

      다음 단계에서 사용할 HTTPS 노드 포트 값을 기록해 두세요.

  2. 다음 명령을 입력하여 로드 밸런서 서비스를 생성합니다.

    oc apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: <hosted_cluster_name>
      name: <hosted_cluster_name>-apps
      namespace: clusters-<hosted_cluster_name>
    spec:
      ports:
      - name: https-443
        port: 443
        protocol: TCP
        targetPort: <https_node_port> 
    1
    
      - name: http-80
        port: 80
        protocol: TCP
        targetPort: <http-node-port> 
    2
    
      selector:
        kubevirt.io: virt-launcher
      type: LoadBalancer
    Copy to Clipboard Toggle word wrap
    1
    이전 단계에서 기록한 HTTPS 노드 포트 값을 지정합니다.
    2
    이전 단계에서 기록한 HTTP 노드 포트 값을 지정합니다.

4.3.5.3. 와일드카드 DNS 설정

로드 밸런서 서비스의 외부 IP를 참조하는 와일드카드 DNS 레코드 또는 CNAME을 설정합니다.

프로세스

  1. 다음 명령을 입력하여 외부 IP 주소를 가져옵니다.

    $ oc -n clusters-<hosted_cluster_name> get service <hosted-cluster-name>-apps \
      -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
    Copy to Clipboard Toggle word wrap

    출력 예

    192.168.20.30
    Copy to Clipboard Toggle word wrap

  2. 외부 IP 주소를 참조하는 와일드카드 DNS 항목을 구성합니다. 다음 DNS 항목 예를 확인하세요.

    *.apps.<hosted_cluster_name\>.<base_domain\>.
    Copy to Clipboard Toggle word wrap

    DNS 항목은 클러스터 내부와 외부로 라우팅할 수 있어야 합니다.

    DNS 확인 예

    dig +short test.apps.example.hypershift.lab
    
    192.168.20.30
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 입력하여 호스팅된 클러스터 상태가 Partial(부분) 에서 Completed(완료) 로 변경되었는지 확인하세요.

    $ oc get --namespace clusters hostedclusters
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME            VERSION   KUBECONFIG                       PROGRESS    AVAILABLE   PROGRESSING   MESSAGE
    example         <4.x.0>     example-admin-kubeconfig         Completed   True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

    <4.x.0>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.

4.3.6. MetalLB 구성

MetalLB를 구성하기 전에 MetalLB Operator를 설치해야 합니다.

프로세스

호스팅된 클러스터에서 MetalLB를 구성하려면 다음 단계를 완료하세요.

  1. 다음 샘플 YAML 콘텐츠를 configure-metallb.yaml 파일에 저장하여 MetalLB 리소스를 만듭니다.

    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb-system
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 YAML 콘텐츠를 적용합니다.

    $ oc apply -f configure-metallb.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    metallb.metallb.io/metallb created
    Copy to Clipboard Toggle word wrap

  3. 다음 샘플 YAML 콘텐츠를 create-ip-address-pool.yaml 파일에 저장하여 IPAddressPool 리소스를 만듭니다.

    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: metallb
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.216.32-192.168.216.122 
    1
    Copy to Clipboard Toggle word wrap
    1
    노드 네트워크 내에서 사용 가능한 IP 주소 범위로 주소 풀을 만듭니다. IP 주소 범위를 네트워크에서 사용 가능한 IP 주소 풀로 바꿉니다.
  4. 다음 명령을 입력하여 YAML 콘텐츠를 적용합니다.

    $ oc apply -f create-ip-address-pool.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    ipaddresspool.metallb.io/metallb created
    Copy to Clipboard Toggle word wrap

  5. 다음 샘플 YAML 콘텐츠를 l2advertisement.yaml 파일에 저장하여 L2Advertisement 리소스를 만듭니다.

    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: l2advertisement
      namespace: metallb-system
    spec:
      ipAddressPools:
       - metallb
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 입력하여 YAML 콘텐츠를 적용합니다.

    $ oc apply -f l2advertisement.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    l2advertisement.metallb.io/metallb created
    Copy to Clipboard Toggle word wrap

4.3.7. 노드 풀에 대한 추가 네트워크, 보장된 CPU 및 VM 스케줄링 구성

노드 풀에 대한 추가 네트워크를 구성하거나, 가상 머신(VM)에 대한 보장된 CPU 액세스를 요청하거나, KubeVirt VM의 일정을 관리해야 하는 경우 다음 절차를 참조하세요.

4.3.7.1. 노드 풀에 여러 네트워크 추가

기본적으로 노드 풀에서 생성된 노드는 Pod 네트워크에 연결됩니다. Multus와 NetworkAttachmentDefinitions를 사용하여 노드에 추가 네트워크를 연결할 수 있습니다.

프로세스

  • 노드에 여러 네트워크를 추가하려면 다음 명령을 실행하여 --additional-network 인수를 사용합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <worker_node_count> \
    2
    
      --pull-secret <path_to_pull_secret> \
    3
    
      --memory <memory> \
    4
    
      --cores <cpu> \
    5
    
      --additional-network name:<namespace/name> \
    6
    
      –-additional-network name:<namespace/name>
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: my-hosted-cluster ) .
    2
    예를 들어, 작업자 노드 수를 2로 지정합니다.
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    메모리 값을 지정합니다(예: 8Gi ).
    5
    CPU 값을 지정합니다(예: 2 ).
    6
    –additional-network 인수의 값을 name:<namespace/name> 으로 설정합니다. <namespace/name>을 NetworkAttachmentDefinitions의 네임스페이스와 이름으로 바꾸세요.
4.3.7.1.1. 추가 네트워크를 기본값으로 사용

기본 Pod 네트워크를 비활성화하여 추가 네트워크를 노드의 기본 네트워크로 추가할 수 있습니다.

프로세스

  • 노드에 기본 네트워크를 추가하려면 다음 명령을 실행하세요.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <worker_node_count> \
    2
    
      --pull-secret <path_to_pull_secret> \
    3
    
      --memory <memory> \
    4
    
      --cores <cpu> \
    5
    
      --attach-default-network false \
    6
    
      --additional-network name:<namespace>/<network_name> 
    7
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: my-hosted-cluster ) .
    2
    예를 들어, 작업자 노드 수를 2로 지정합니다.
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    메모리 값을 지정합니다(예: 8Gi ).
    5
    CPU 값을 지정합니다(예: 2 ).
    6
    --attach-default-network false 인수는 기본 Pod 네트워크를 비활성화합니다.
    7
    노드에 추가하려는 추가 네트워크를 지정합니다(예: name:my-namespace/my-network ) .

4.3.7.2. 보장된 CPU 리소스 요청

기본적으로 KubeVirt VM은 노드의 다른 워크로드와 CPU를 공유할 수 있습니다. 이는 VM의 성능에 영향을 미칠 수 있습니다. 성능 저하를 방지하려면 VM에 대해 보장된 CPU 액세스를 요청할 수 있습니다.

프로세스

  • 보장된 CPU 리소스를 요청하려면 다음 명령을 실행하여 --qos-class 인수를 Guaranteed 로 설정합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <worker_node_count> \
    2
    
      --pull-secret <path_to_pull_secret> \
    3
    
      --memory <memory> \
    4
    
      --cores <cpu> \
    5
    
      --qos-class Guaranteed 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: my-hosted-cluster ) .
    2
    예를 들어, 작업자 노드 수를 2로 지정합니다.
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    메모리 값을 지정합니다(예: 8Gi ).
    5
    CPU 값을 지정합니다(예: 2 ).
    6
    --qos-class Guaranteed 인수는 지정된 수의 CPU 리소스가 VM에 할당되도록 보장합니다.

4.3.7.3. 노드 세트에서 KubeVirt VM 예약

기본적으로 노드 풀에서 생성된 KubeVirt VM은 사용 가능한 모든 노드에 예약됩니다. VM을 실행할 수 있는 충분한 용량이 있는 특정 노드 집합에 KubeVirt VM을 예약할 수 있습니다.

프로세스

  • 특정 노드 집합의 노드 풀 내에서 KubeVirt VM을 예약하려면 다음 명령을 실행하여 --vm-node-selector 인수를 사용합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <worker_node_count> \
    2
    
      --pull-secret <path_to_pull_secret> \
    3
    
      --memory <memory> \
    4
    
      --cores <cpu> \
    5
    
      --vm-node-selector <label_key>=<label_value>,<label_key>=<label_value> 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: my-hosted-cluster ) .
    2
    예를 들어, 작업자 노드 수를 2로 지정합니다.
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    메모리 값을 지정합니다(예: 8Gi ).
    5
    CPU 값을 지정합니다(예: 2 ).
    6
    --vm-node-selector 플래그는 키-값 쌍을 포함하는 특정 노드 세트를 정의합니다. <label_key><label_value>를 각각 레이블의 키와 값으로 바꾸세요.

4.3.8. 노드 풀 확장

oc scale 명령을 사용하여 노드 풀의 크기를 수동으로 조정할 수 있습니다.

프로세스

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

    NODEPOOL_NAME=${CLUSTER_NAME}-work
    NODEPOOL_REPLICAS=5
    
    $ oc scale nodepool/$NODEPOOL_NAME --namespace clusters \
      --replicas=$NODEPOOL_REPLICAS
    Copy to Clipboard Toggle word wrap
  2. 잠시 후 다음 명령을 입력하여 노드 풀의 상태를 확인하세요.

    $ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                  STATUS   ROLES    AGE     VERSION
    example-9jvnf         Ready    worker   97s     v1.27.4+18eadca
    example-n6prw         Ready    worker   116m    v1.27.4+18eadca
    example-nc6g4         Ready    worker   117m    v1.27.4+18eadca
    example-thp29         Ready    worker   4m17s   v1.27.4+18eadca
    example-twxns         Ready    worker   88s     v1.27.4+18eadca
    Copy to Clipboard Toggle word wrap

4.3.8.1. 노드 풀 추가

이름, 복제본 수, 메모리 및 CPU 요구 사항과 같은 추가 정보를 지정하여 호스팅된 클러스터에 대한 노드 풀을 만들 수 있습니다.

프로세스

  1. 노드 풀을 생성하려면 다음 정보를 입력하세요. 이 예에서 노드 풀에는 VM에 할당된 CPU가 더 많습니다.

    export NODEPOOL_NAME=${CLUSTER_NAME}-extra-cpu
    export WORKER_COUNT="2"
    export MEM="6Gi"
    export CPU="4"
    export DISK="16"
    
    $ hcp create nodepool kubevirt \
      --cluster-name $CLUSTER_NAME \
      --name $NODEPOOL_NAME \
      --node-count $WORKER_COUNT \
      --memory $MEM \
      --cores $CPU \
      --root-volume-size $DISK
    Copy to Clipboard Toggle word wrap
  2. 클러스터 네임스페이스에 있는 노드 풀 리소스를 나열하여 노드 풀의 상태를 확인하세요.

    $ oc get nodepools --namespace clusters
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                      CLUSTER         DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    example                   example         5               5               False         False        <4.x.0>
    example-extra-cpu         example         2                               False         False                  True              True             Minimum availability requires 2 replicas, current 0 available
    Copy to Clipboard Toggle word wrap

    <4.x.0>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.

  3. 시간이 지나면 다음 명령을 입력하여 노드 풀의 상태를 확인할 수 있습니다.

    $ oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                      STATUS   ROLES    AGE     VERSION
    example-9jvnf             Ready    worker   97s     v1.27.4+18eadca
    example-n6prw             Ready    worker   116m    v1.27.4+18eadca
    example-nc6g4             Ready    worker   117m    v1.27.4+18eadca
    example-thp29             Ready    worker   4m17s   v1.27.4+18eadca
    example-twxns             Ready    worker   88s     v1.27.4+18eadca
    example-extra-cpu-zh9l5   Ready    worker   2m6s    v1.27.4+18eadca
    example-extra-cpu-zr8mj   Ready    worker   102s    v1.27.4+18eadca
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 입력하여 노드 풀이 예상한 상태인지 확인하세요.

    $ oc get nodepools --namespace clusters
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                      CLUSTER         DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    example                   example         5               5               False         False        <4.x.0>
    example-extra-cpu         example         2               2               False         False        <4.x.0>
    Copy to Clipboard Toggle word wrap

    <4.x.0>을 사용하려는 지원되는 OpenShift Container Platform 버전으로 바꾸세요.

4.3.9. OpenShift Virtualization에서 호스팅된 클러스터 생성 확인

호스팅된 클러스터가 성공적으로 생성되었는지 확인하려면 다음 단계를 완료하세요.

프로세스

  1. 다음 명령을 입력하여 HostedCluster 리소스가 완료 상태로 전환되었는지 확인하세요.

    $ oc get --namespace clusters hostedclusters <hosted_cluster_name>
    Copy to Clipboard Toggle word wrap

    출력 예

    NAMESPACE   NAME      VERSION   KUBECONFIG                 PROGRESS    AVAILABLE   PROGRESSING   MESSAGE
    clusters    example   4.12.2    example-admin-kubeconfig   Completed   True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 입력하여 호스팅된 클러스터의 모든 클러스터 운영자가 온라인 상태인지 확인하세요.

    $ hcp create kubeconfig --name <hosted_cluster_name> \
      > <hosted_cluster_name>-kubeconfig
    Copy to Clipboard Toggle word wrap
    $ oc get co --kubeconfig=<hosted_cluster_name>-kubeconfig
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    4.12.2   True        False         False      2m38s
    csi-snapshot-controller                    4.12.2   True        False         False      4m3s
    dns                                        4.12.2   True        False         False      2m52s
    image-registry                             4.12.2   True        False         False      2m8s
    ingress                                    4.12.2   True        False         False      22m
    kube-apiserver                             4.12.2   True        False         False      23m
    kube-controller-manager                    4.12.2   True        False         False      23m
    kube-scheduler                             4.12.2   True        False         False      23m
    kube-storage-version-migrator              4.12.2   True        False         False      4m52s
    monitoring                                 4.12.2   True        False         False      69s
    network                                    4.12.2   True        False         False      4m3s
    node-tuning                                4.12.2   True        False         False      2m22s
    openshift-apiserver                        4.12.2   True        False         False      23m
    openshift-controller-manager               4.12.2   True        False         False      23m
    openshift-samples                          4.12.2   True        False         False      2m15s
    operator-lifecycle-manager                 4.12.2   True        False         False      22m
    operator-lifecycle-manager-catalog         4.12.2   True        False         False      23m
    operator-lifecycle-manager-packageserver   4.12.2   True        False         False      23m
    service-ca                                 4.12.2   True        False         False      4m41s
    storage                                    4.12.2   True        False         False      4m43s
    Copy to Clipboard Toggle word wrap

4.3.10. 호스팅된 클러스터에서 사용자 정의 API 서버 인증서 구성

API 서버에 대한 사용자 정의 인증서를 구성하려면 HostedCluster 구성의 spec.configuration.apiServer 섹션에서 인증서 세부 정보를 지정하세요.

1일차 또는 2일차 작업 중에 사용자 정의 인증서를 구성할 수 있습니다. 그러나 서비스 게시 전략은 호스팅 클러스터를 생성하는 동안 설정한 후에는 변경할 수 없으므로 구성하려는 Kubernetes API 서버의 호스트 이름을 알아야 합니다.

사전 요구 사항

  • 관리 클러스터에 사용자 정의 인증서가 포함된 Kubernetes 비밀을 생성했습니다. 비밀에는 다음과 같은 키가 포함되어 있습니다.

    • tls.crt : 인증서
    • tls.key : 개인 키
  • HostedCluster 구성에 부하 분산 장치를 사용하는 서비스 게시 전략이 포함된 경우 인증서의 SAN(주체 대체 이름)이 내부 API 엔드포인트( api-int )와 충돌하지 않는지 확인하세요. 내부 API 엔드포인트는 플랫폼에서 자동으로 생성되고 관리됩니다. 사용자 정의 인증서와 내부 API 엔드포인트 모두에서 동일한 호스트 이름을 사용하면 라우팅 충돌이 발생할 수 있습니다. 이 규칙의 유일한 예외는 AWS를 Private 또는 PublicAndPrivate 구성으로 공급자로 사용하는 경우입니다. 이런 경우 SAN 충돌은 플랫폼에 의해 관리됩니다.
  • 인증서는 외부 API 엔드포인트에 대해 유효해야 합니다.
  • 인증서의 유효 기간은 클러스터의 예상 수명 주기와 일치합니다.

프로세스

  1. 다음 명령을 입력하여 사용자 지정 인증서로 비밀을 만듭니다.

    $ oc create secret tls sample-hosted-kas-custom-cert \
      --cert=path/to/cert.crt \
      --key=path/to/key.key \
      -n <hosted_cluster_namespace>
    Copy to Clipboard Toggle word wrap
  2. 다음 예와 같이 사용자 지정 인증서 세부 정보로 HostedCluster 구성을 업데이트합니다.

    spec:
      configuration:
        apiServer:
          servingCerts:
            namedCertificates:
            - names: 
    1
    
              - api-custom-cert-sample-hosted.sample-hosted.example.com
              servingCertificate: 
    2
    
                name: sample-hosted-kas-custom-cert
    Copy to Clipboard Toggle word wrap
    1
    인증서가 유효한 DNS 이름 목록입니다.
    2
    사용자 지정 인증서가 포함된 비밀의 이름입니다.
  3. 다음 명령을 입력하여 HostedCluster 구성에 변경 사항을 적용합니다.

    $ oc apply -f <hosted_cluster_config>.yaml
    Copy to Clipboard Toggle word wrap

검증

  • API 서버 포드를 확인하여 새 인증서가 마운트되었는지 확인하세요.
  • 사용자 지정 도메인 이름을 사용하여 API 서버에 대한 연결을 테스트합니다.
  • 브라우저나 openssl 과 같은 도구를 사용하여 인증서 세부 정보를 확인하세요.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat