6.2. Validation 서비스에 대한 사용자 지정 규칙 생성


유효성 검사 서비스는 OCI(Open Policy Agent) 정책 규칙을 사용하여 마이그레이션을 위한 각 VM(가상 머신)의 적합성을 확인합니다. 유효성 검사 서비스는 공급자 인벤토리 서비스에 VM 속성으로 저장되는 각 VM에 대한 우려 목록을 생성합니다. 웹 콘솔에는 공급자 인벤토리의 각 VM에 대한 문제가 표시됩니다.

사용자 지정 규칙을 만들어 Validation 서비스의 기본 규칙 집합을 확장할 수 있습니다. 예를 들어 VM에 여러 디스크가 있는지 확인하는 규칙을 생성할 수 있습니다.

6.2.1. Rego 파일 정보

검증 규칙은 OCI(Open Policy Agent) 기본 쿼리 언어인 Rego 로 작성됩니다. 규칙은 Validation Pod의 /usr/share/opa/policies/io/konveyor/forklift/<provider > 디렉터리에 .rego 파일로 저장됩니다.

각 검증 규칙은 별도의 .rego 파일에 정의되고 특정 조건에 대한 테스트입니다. 조건이 true 로 평가되면 규칙은 {"category", "label", "assessment"} 해시를 문제에 추가합니다. 문제가 있는 콘텐츠는 VM의 인벤토리 레코드에 있는 concerns 키에 추가됩니다. 웹 콘솔에는 공급자 인벤토리의 각 VM에 대한 concerns 키 내용이 표시됩니다.

다음 .rego 파일 예제에서는 VMware VM 클러스터에서 활성화된 분산 리소스 스케줄링을 확인합니다.

drs_enabled.rego example

package io.konveyor.forklift.vmware 
1


has_drs_enabled {
    input.host.cluster.drsEnabled 
2

}

concerns[flag] {
    has_drs_enabled
    flag := {
        "category": "Information",
        "label": "VM running in a DRS-enabled cluster",
        "assessment": "Distributed resource scheduling is not currently supported by OpenShift Virtualization. The VM can be migrated but it will not have this feature in the target environment."
    }
}
Copy to Clipboard

1
각 검증 규칙은 패키지 내에 정의됩니다. 패키지 네임스페이스는 VMware용 io.konveyor.forklift.vmware 및 Red Hat Virtualization의 경우 io.konveyor.forklift.ovirt 입니다.
2
쿼리 매개변수는 Validation 서비스 JSON의 입력 키를 기반으로 합니다.

6.2.2. 기본 검증 규칙 확인

사용자 지정 규칙을 만들기 전에 Validation 서비스의 기본 규칙을 확인하여 기존 기본값을 설명하는 규칙을 만들지 않아야 합니다.

예: 기본 규칙에 default valid_input = false 행이 포함되어 있고 default valid_input = true 줄이 포함된 사용자 정의 규칙을 생성하면 검증 서비스가 시작되지 않습니다.

프로세스

  1. Validation Pod의 터미널에 연결합니다.

    $ oc rsh <validation_pod>
    Copy to Clipboard
  2. 공급자의 OPA 정책 디렉터리로 이동합니다.

    $ cd /usr/share/opa/policies/io/konveyor/forklift/<provider> 
    1
    Copy to Clipboard
    1
    vmware 또는 ovirt 를 지정합니다.
  3. 기본 정책을 검색합니다.

    $ grep -R "default" *
    Copy to Clipboard

6.2.3. 검증 규칙 생성

검증 서비스에 규칙이 포함된 구성 맵 CR(사용자 정의 리소스)을 적용하여 검증 규칙을 생성합니다.

중요
  • 기존 규칙과 동일한 이름으로 규칙을 만드는 경우 유효성 검사 서비스는 규칙을 사용하여 OR 작업을 수행합니다.
  • 기본 규칙과 일치하지 않는 규칙을 생성하면 검증 서비스가 시작되지 않습니다.

검증 규칙 예

검증 규칙은 공급자 인벤토리 서비스에서 수집한 VM(가상 머신) 속성을 기반으로 합니다.

예를 들어 VMware API는 이 경로를 사용하여 VMware VM에 NUMA 노드 유사성이 MOR: Cryostat.config.extraConfig["numa.nodeAffinity"] 가 구성되어 있는지 확인합니다.

공급자 인벤토리 서비스는 이 구성을 단순화하고 목록 값을 사용하여 테스트 가능한 속성을 반환합니다.

"numaNodeAffinity": [
    "0",
    "1"
],
Copy to Clipboard

이 속성을 기반으로 Rego 쿼리를 생성하고 forklift-validation-config 구성 맵에 추가합니다.

`count(input.numaNodeAffinity) != 0`
Copy to Clipboard

프로세스

  1. 다음 예에 따라 구성 맵 CR을 생성합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <forklift-validation-config>
      namespace: openshift-mtv
    data:
      vmware_multiple_disks.rego: |-
        package <provider_package> 
    1
    
    
        has_multiple_disks { 
    2
    
          count(input.disks) > 1
        }
    
        concerns[flag] {
          has_multiple_disks 
    3
    
            flag := {
              "category": "<Information>", 
    4
    
              "label": "Multiple disks detected",
              "assessment": "Multiple disks detected on this VM."
            }
        }
    EOF
    Copy to Clipboard
    1
    공급자 패키지 이름을 지정합니다. 허용되는 값은 VMware의 경우 io.konveyor.forklift.vmware 및 Red Hat Virtualization의 경우 io.konveyor.forklift.ovirt 입니다.
    2
    concerns 이름 및 Rego 쿼리를 지정합니다.
    3
    concerns name 및 flag 매개변수 값을 지정합니다.
    4
    허용되는 값은 Critical,WarningInformation 입니다.
  2. forklift-controller 배포를 0 으로 스케일링하여 Validation Pod를 중지합니다.

    $ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
    Copy to Clipboard
  3. forklift-controller 배포를 1 로 확장하여 Validation Pod를 시작합니다.

    $ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
    Copy to Clipboard
  4. Validation Pod 로그를 확인하여 Pod가 시작되었는지 확인합니다.

    $ oc logs -f <validation_pod>
    Copy to Clipboard

    사용자 정의 규칙이 기본 규칙과 충돌하면 Validation Pod가 시작되지 않습니다.

  5. 소스 공급자를 제거합니다.

    $ oc delete provider <provider> -n openshift-mtv
    Copy to Clipboard
  6. 소스 공급자를 추가하여 새 규칙을 적용합니다.

    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <provider>
      namespace: openshift-mtv
    spec:
      type: <provider_type> 
    1
    
      url: <api_end_point> 
    2
    
      secret:
        name: <secret> 
    3
    
        namespace: openshift-mtv
    EOF
    Copy to Clipboard
    1
    허용되는 값은 ovirt,vsphere, openstack 입니다.
    2
    API 엔드포인트 URL을 지정합니다(예: vSphere의 경우 https://<vCenter_host>/sdk, RHV의 경우 https://<engine_host>/ovirt-engine/api 또는 OpenStack의 경우 https://<identity_service>/v 3).
    3
    공급자 Secret CR의 이름을 지정합니다.

인벤토리 서비스에서 변경 사항을 감지하고 VM의 유효성을 검사하도록 사용자 지정 규칙을 생성한 후 규칙 버전을 업데이트해야 합니다.

6.2.4. 인벤토리 규칙 버전 업데이트

공급자 인벤토리 서비스에서 변경 사항을 감지하고 검증 서비스를 트리거하도록 규칙을 업데이트할 때마다 인벤토리 규칙 버전을 업데이트해야 합니다.

규칙 버전은 각 공급자에 대한 rules_version.rego 파일에 기록됩니다.

프로세스

  1. 현재 규칙 버전을 검색합니다.

    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 
    1
    Copy to Clipboard

    출력 예

    {
       "result": {
           "rules_version": 5
       }
    }
    Copy to Clipboard

  2. Validation Pod의 터미널에 연결합니다.

    $ oc rsh <validation_pod>
    Copy to Clipboard
  3. /usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego 파일에서 규칙 버전을 업데이트합니다.
  4. Validation Pod 터미널에서 로그아웃합니다.
  5. 업데이트된 규칙 버전을 확인합니다.

    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 
    1
    Copy to Clipboard

    출력 예

    {
       "result": {
           "rules_version": 6
       }
    }
    Copy to Clipboard

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat