4.11. OADP 및 AWS STS


4.11.1. OADP를 사용하여 AWS STS에서 애플리케이션 백업

OADP Operator를 설치하여 AWS(Amazon Web Services)를 사용하여 OADP(OpenShift API for Data Protection)를 설치합니다. Operator는 Velero 1.14 를 설치합니다.

참고

OADP 1.0.4부터 모든 OADP 1.0.z 버전은 Migration Toolkit for Containers Operator의 종속성으로만 사용할 수 있으며 독립 실행형 Operator로 사용할 수 없습니다.

Velero에 대해 AWS를 구성하고, 기본 보안 보안을 생성한 다음 데이터 보호 애플리케이션을 설치합니다. 자세한 내용은 OADP Operator 설치를 참조하십시오.

제한된 네트워크 환경에서 OADP Operator를 설치하려면 먼저 기본 OperatorHub 소스를 비활성화하고 Operator 카탈로그를 미러링해야 합니다. 자세한 내용은 제한된 네트워크에서 Operator Lifecycle Manager 사용을 참조하십시오.

AWS STS(AWS STS) 클러스터에 OADP를 수동으로 설치할 수 있습니다. Amazon AWS는 사용자가 제한된 임시 자격 증명을 요청할 수 있는 웹 서비스로 AWS STS를 제공합니다. STS를 사용하여 신뢰할 수 있는 사용자에게 API 호출, AWS 콘솔 또는 AWS CLI(명령줄 인터페이스)를 통해 리소스에 대한 임시 액세스를 제공합니다.

OADP(OpenShift API for Data Protection)를 설치하기 전에 Amazon Web Services API를 사용할 수 있도록 OADP의 역할 및 정책 자격 증명을 설정해야 합니다.

이 프로세스는 다음 두 단계로 수행됩니다.

  1. AWS 인증 정보를 준비합니다.
  2. OADP Operator를 설치하고 IAM 역할을 부여합니다.

4.11.1.1. OADP의 AWS STS 인증 정보 준비

Amazon Web Services 계정은 OADP(OpenShift API for Data Protection) 설치를 허용하도록 준비하고 구성해야 합니다. 다음 절차를 사용하여 AWS 인증 정보를 준비합니다.

절차

  1. 다음 명령을 실행하여 cluster_name 환경 변수를 정의합니다.

    $ export CLUSTER_NAME= <AWS_cluster_name> 1
    1
    변수는 임의의 값으로 설정할 수 있습니다.
  2. 다음 명령을 실행하여 AWS_ACCOUNT_ID, OIDC_ENDPOINT 와 같은 클러스터 의 모든 세부 정보를 검색합니다.

    $ export CLUSTER_VERSION=$(oc get clusterversion version -o jsonpath='{.status.desired.version}{"\n"}')
    
    export AWS_CLUSTER_ID=$(oc get clusterversion version -o jsonpath='{.spec.clusterID}{"\n"}')
    
    export OIDC_ENDPOINT=$(oc get authentication.config.openshift.io cluster -o jsonpath='{.spec.serviceAccountIssuer}' | sed 's|^https://||')
    
    export REGION=$(oc get infrastructures cluster -o jsonpath='{.status.platformStatus.aws.region}' --allow-missing-template-keys=false || echo us-east-2)
    
    export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
    
    export ROLE_NAME="${CLUSTER_NAME}-openshift-oadp-aws-cloud-credentials"
  3. 다음 명령을 실행하여 모든 파일을 저장할 임시 디렉터리를 생성합니다.

    $ export SCRATCH="/tmp/${CLUSTER_NAME}/oadp"
    mkdir -p ${SCRATCH}
  4. 다음 명령을 실행하여 수집된 모든 세부 정보를 표시합니다.

    $ echo "Cluster ID: ${AWS_CLUSTER_ID}, Region: ${REGION}, OIDC Endpoint:
    ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
  5. AWS 계정에서 AWS S3에 대한 액세스를 허용하는 IAM 정책을 생성합니다.

    1. 다음 명령을 실행하여 정책이 존재하는지 확인합니다.

      $ export POLICY_NAME="OadpVer1" 1
      1
      변수는 임의의 값으로 설정할 수 있습니다.
      $ POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='$POLICY_NAME'].{ARN:Arn}" --output text)
    2. 다음 명령을 입력하여 정책 JSON 파일을 생성한 다음 정책을 생성합니다.

      참고

      정책 ARN을 찾을 수 없는 경우 명령에서 정책을 생성합니다. 정책 ARN이 이미 존재하는 경우 if 문이 의도적으로 정책 생성을 건너뜁니다.

      $ if [[ -z "${POLICY_ARN}" ]]; then
      cat << EOF > ${SCRATCH}/policy.json
      {
      "Version": "2012-10-17",
      "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:DeleteBucket",
           "s3:PutBucketTagging",
           "s3:GetBucketTagging",
           "s3:PutEncryptionConfiguration",
           "s3:GetEncryptionConfiguration",
           "s3:PutLifecycleConfiguration",
           "s3:GetLifecycleConfiguration",
           "s3:GetBucketLocation",
           "s3:ListBucket",
           "s3:GetObject",
           "s3:PutObject",
           "s3:DeleteObject",
           "s3:ListBucketMultipartUploads",
           "s3:AbortMultipartUpload",
           "s3:ListMultipartUploadParts",
           "ec2:DescribeSnapshots",
           "ec2:DescribeVolumes",
           "ec2:DescribeVolumeAttribute",
           "ec2:DescribeVolumesModifications",
           "ec2:DescribeVolumeStatus",
           "ec2:CreateTags",
           "ec2:CreateVolume",
           "ec2:CreateSnapshot",
           "ec2:DeleteSnapshot"
         ],
         "Resource": "*"
       }
      ]}
      EOF
      
      POLICY_ARN=$(aws iam create-policy --policy-name $POLICY_NAME \
      --policy-document file:///${SCRATCH}/policy.json --query Policy.Arn \
      --tags Key=openshift_version,Value=${CLUSTER_VERSION} Key=operator_namespace,Value=openshift-adp Key=operator_name,Value=oadp \
      --output text) 1
      fi
      1
      SCRATCH 는 파일을 저장하기 위해 생성된 임시 디렉터리의 이름입니다.
    3. 다음 명령을 실행하여 정책 ARN을 확인합니다.

      $ echo ${POLICY_ARN}
  6. 클러스터에 대한 IAM 역할 신뢰 정책을 생성합니다.

    1. 다음 명령을 실행하여 신뢰 정책 파일을 생성합니다.

      $ cat <<EOF > ${SCRATCH}/trust-policy.json
      {
          "Version": "2012-10-17",
          "Statement": [{
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_ENDPOINT}"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "${OIDC_ENDPOINT}:sub": [
                  "system:serviceaccount:openshift-adp:openshift-adp-controller-manager",
                  "system:serviceaccount:openshift-adp:velero"]
              }
            }
          }]
      }
      EOF
    2. 다음 명령을 실행하여 클러스터에 대한 IAM 역할 신뢰 정책을 생성합니다.

      $ ROLE_ARN=$(aws iam create-role --role-name \
        "${ROLE_NAME}" \
        --assume-role-policy-document file://${SCRATCH}/trust-policy.json \
        --tags Key=cluster_id,Value=${AWS_CLUSTER_ID}  Key=openshift_version,Value=${CLUSTER_VERSION} Key=operator_namespace,Value=openshift-adp Key=operator_name,Value=oadp --query Role.Arn --output text)
    3. 다음 명령을 실행하여 역할 ARN을 확인합니다.

      $ echo ${ROLE_ARN}
  7. 다음 명령을 실행하여 IAM 역할에 IAM 정책을 연결합니다.

    $ aws iam attach-role-policy --role-name "${ROLE_NAME}" --policy-arn ${POLICY_ARN}
4.11.1.1.1. Velero CPU 및 메모리 리소스 할당 설정

DataProtectionApplication CR(사용자 정의 리소스) 매니페스트를 편집하여 Velero Pod에 대한 CPU 및 메모리 리소스 할당을 설정합니다.

사전 요구 사항

  • OADP(Data Protection) Operator가 설치되어 있어야 합니다.

절차

  • 다음 예제와 같이 DataProtectionApplication CR 매니페스트의 spec.configuration.velero.podConfig.ResourceAllocations 블록의 값을 편집합니다.

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: <dpa_sample>
    spec:
    ...
      configuration:
        velero:
          podConfig:
            nodeSelector: <node_selector> 1
            resourceAllocations: 2
              limits:
                cpu: "1"
                memory: 1024Mi
              requests:
                cpu: 200m
                memory: 256Mi
    1
    Velero podSpec에 제공할 노드 선택기를 지정합니다.
    2
    나열된 resourceAllocations 는 평균 사용량입니다.
참고

Kopia는 OADP 1.3 이상 릴리스에서 옵션입니다. Kopia를 파일 시스템 백업에 사용할 수 있으며, Kopia는 기본 제공 Data Mover 사례에서만 사용할 수 있습니다.

Kopia는 Restic보다 리소스 집약적이므로 그에 따라 CPU 및 메모리 요구 사항을 조정해야 할 수 있습니다.

4.11.1.2. OADP Operator 설치 및 IAM 역할 제공

AWS STS(보안 토큰 서비스)는 IAM 또는 페더레이션 사용자를 위한 단기 자격 증명을 제공하는 글로벌 웹 서비스입니다. 이 문서에서는 AWS STS 클러스터에 OADP(OpenShift API for Data Protection)를 수동으로 설치하는 방법을 설명합니다.

중요

Restic 및 Kopia는 OADP AWS STS 환경에서 지원되지 않습니다. Restic 및 Kopia 노드 에이전트가 비활성화되어 있는지 확인합니다. 볼륨 백업의 경우 AWS STS의 OADP는 기본 스냅샷 및 CSI(Container Storage Interface) 스냅샷만 지원합니다.

STS 인증을 사용하는 AWS 클러스터에서는 다른 AWS 리전에서 백업 데이터를 복원할 수 없습니다.

데이터 Mover 기능은 현재 AWS STS 클러스터에서 지원되지 않습니다. 데이터 이동을 위해 기본 AWS S3 툴을 사용할 수 있습니다.

사전 요구 사항

  • 필요한 액세스 및 토큰이 있는 OpenShift Container Platform AWS STS 클러스터 자세한 내용은 OADP에 대한 AWS 인증 정보 준비 절차를 참조하십시오. 백업 및 복원을 위해 두 개의 다른 클러스터를 사용하려면 각 클러스터에 대해 ROLE_ARN 을 포함한 AWS 인증 정보를 준비해야 합니다.

절차

  1. 다음 명령을 입력하여 AWS 토큰 파일에서 OpenShift Container Platform 시크릿을 생성합니다.

    1. 인증 정보 파일을 생성합니다.

      $ cat <<EOF > ${SCRATCH}/credentials
        [default]
        role_arn = ${ROLE_ARN}
        web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
      EOF
    2. OADP의 네임스페이스를 생성합니다.

      $ oc create namespace openshift-adp
    3. OpenShift Container Platform 시크릿을 생성합니다.

      $ oc -n openshift-adp create secret generic cloud-credentials \
        --from-file=${SCRATCH}/credentials
      참고

      OpenShift Container Platform 버전 4.14 이상에서 OADP Operator는 OLM(Operator Lifecycle Manager) 및 CCO(Cloud Credentials Operator)를 통해 새로운 표준화된 STS 워크플로를 지원합니다. 이 워크플로우에서는 OpenShift Container Platform 웹 콘솔을 사용하여 OLM 관리 Operator를 설치하는 동안 위의 시크릿을 생성할 필요가 없습니다. 자세한 내용은 웹 콘솔을 사용하여 OperatorHub에서 설치를 참조하십시오.

      이전 시크릿은 CCO에 의해 자동으로 생성됩니다.

  2. OADP Operator를 설치합니다.

    1. OpenShift Container Platform 웹 콘솔에서 Operator OperatorHub 로 이동합니다.
    2. OADP Operator 를 검색합니다.
    3. role_ARN 필드에 이전에 생성한 role_arn을 붙여넣고 설치를 클릭합니다.
  3. 다음 명령을 입력하여 AWS 인증 정보를 사용하여 AWS 클라우드 스토리지를 생성합니다.

    $ cat << EOF | oc create -f -
      apiVersion: oadp.openshift.io/v1alpha1
      kind: CloudStorage
      metadata:
        name: ${CLUSTER_NAME}-oadp
        namespace: openshift-adp
      spec:
        creationSecret:
          key: credentials
          name: cloud-credentials
        enableSharedConfig: true
        name: ${CLUSTER_NAME}-oadp
        provider: aws
        region: $REGION
    EOF
  4. 다음 명령을 입력하여 애플리케이션의 스토리지 기본 스토리지 클래스를 확인합니다.

    $ oc get pvc -n <namespace>

    출력 예

    NAME     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    applog   Bound    pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8   1Gi        RWO            gp3-csi        4d19h
    mysql    Bound    pvc-16b8e009-a20a-4379-accc-bc81fedd0621   1Gi        RWO            gp3-csi        4d19h

  5. 다음 명령을 실행하여 스토리지 클래스를 가져옵니다.

    $ oc get storageclass

    출력 예

    NAME                PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2                 kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   true                   4d21h
    gp2-csi             ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   4d21h
    gp3                 ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   4d21h
    gp3-csi (default)   ebs.csi.aws.com         Delete          WaitForFirstConsumer   true                   4d21h

    참고

    다음 스토리지 클래스가 작동합니다.

    • gp3-csi
    • gp2-csi
    • gp3
    • gp2

    백업 중인 애플리케이션 또는 애플리케이션이 모두 CSI(Container Storage Interface)를 사용하는 PV(영구 볼륨)를 사용하는 경우 OADP DPA 구성에 CSI 플러그인을 포함하는 것이 좋습니다.

  6. DataProtectionApplication 리소스를 만들어 백업 및 볼륨 스냅샷이 저장되는 스토리지에 대한 연결을 구성합니다.

    1. CSI 볼륨만 사용하는 경우 다음 명령을 입력하여 데이터 보호 애플리케이션을 배포합니다.

      $ cat << EOF | oc create -f -
        apiVersion: oadp.openshift.io/v1alpha1
        kind: DataProtectionApplication
        metadata:
          name: ${CLUSTER_NAME}-dpa
          namespace: openshift-adp
        spec:
          backupImages: true 1
          features:
            dataMover:
              enable: false
          backupLocations:
          - bucket:
              cloudStorageRef:
                name: ${CLUSTER_NAME}-oadp
              credential:
                key: credentials
                name: cloud-credentials
              prefix: velero
              default: true
              config:
                region: ${REGION}
          configuration:
            velero:
              defaultPlugins:
              - openshift
              - aws
              - csi
            restic:
              enable: false
      EOF
      1
      이미지 백업을 사용하지 않으려면 이 필드를 false 로 설정합니다.
  1. CSI 또는 비 CSI 볼륨을 사용하는 경우 다음 명령을 입력하여 데이터 보호 애플리케이션을 배포합니다.

    $ cat << EOF | oc create -f -
      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        name: ${CLUSTER_NAME}-dpa
        namespace: openshift-adp
      spec:
        backupImages: true 1
        features:
          dataMover:
             enable: false
        backupLocations:
        - bucket:
            cloudStorageRef:
              name: ${CLUSTER_NAME}-oadp
            credential:
              key: credentials
              name: cloud-credentials
            prefix: velero
            default: true
            config:
              region: ${REGION}
        configuration:
          velero:
            defaultPlugins:
            - openshift
            - aws
          nodeAgent: 2
            enable: false
            uploaderType: restic
        snapshotLocations:
          - velero:
              config:
                credentialsFile: /tmp/credentials/openshift-adp/cloud-credentials-credentials 3
                enableSharedConfig: "true" 4
                profile: default 5
                region: ${REGION} 6
              provider: aws
    EOF
    1
    이미지 백업을 사용하지 않으려면 이 필드를 false 로 설정합니다.
    2
    nodeAgent 속성과 관련된 중요한 노트를 참조하십시오.
    3
    credentialsFile 필드는 Pod에 버킷 인증 정보의 마운트된 위치입니다.
    4
    enableSharedConfig 필드를 사용하면 snapshotLocations 에서 버킷에 대해 정의된 인증 정보를 공유하거나 재사용할 수 있습니다.
    5
    AWS 인증 정보 파일에 설정된 프로필 이름을 사용합니다.
    6
    리전을 AWS 리전 으로 지정합니다. 이는 클러스터 리전과 동일해야 합니다.

    이제 애플리케이션 백업에 설명된 대로 OpenShift Container Platform 애플리케이션을 백업 하고 복원할 준비가 되었습니다.

중요

OADP 1.2를 사용하는 경우 이 구성을 교체합니다.

nodeAgent:
  enable: false
  uploaderType: restic

다음 구성에서는 다음을 수행합니다.

restic:
  enable: false

백업 및 복원을 위해 두 개의 다른 클러스터를 사용하려면 클라우드 스토리지 CR과 OADP DataProtectionApplication 구성 둘 다에 동일한 AWS S3 스토리지 이름이 있어야 합니다.

4.11.1.3. 선택적 정리를 사용하여 OADP AWS STS에서 워크로드 백업

4.11.1.3.1. OADP 및 AWS STS로 백업 수행

다음 예제 hello-world 애플리케이션에는 PV(영구 볼륨)가 연결되어 있지 않습니다. AWS(Amazon Web Services)를 사용하여 OADP(OpenShift API for Data Protection)로 백업을 수행합니다.

DPA(Data Protection Application) 구성이 작동합니다.

  1. 다음 명령을 실행하여 백업할 워크로드를 생성합니다.

    $ oc create namespace hello-world
    $ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
  2. 다음 명령을 실행하여 경로를 노출합니다.

    $ oc expose service/hello-openshift -n hello-world
  3. 다음 명령을 실행하여 애플리케이션이 작동하는지 확인합니다.

    $ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`

    출력 예

    Hello OpenShift!

  4. 다음 명령을 실행하여 워크로드를 백업합니다.

    $ cat << EOF | oc create -f -
      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        name: hello-world
        namespace: openshift-adp
      spec:
        includedNamespaces:
        - hello-world
        storageLocation: ${CLUSTER_NAME}-dpa-1
        ttl: 720h0m0s
    EOF
  5. 백업이 완료될 때까지 기다린 후 다음 명령을 실행합니다.

    $ watch "oc -n openshift-adp get backup hello-world -o json | jq .status"

    출력 예

    {
      "completionTimestamp": "2022-09-07T22:20:44Z",
      "expiration": "2022-10-07T22:20:22Z",
      "formatVersion": "1.1.0",
      "phase": "Completed",
      "progress": {
        "itemsBackedUp": 58,
        "totalItems": 58
      },
      "startTimestamp": "2022-09-07T22:20:22Z",
      "version": 1
    }

  6. 다음 명령을 실행하여 데모 워크로드를 삭제합니다.

    $ oc delete ns hello-world
  7. 다음 명령을 실행하여 백업에서 워크로드를 복원합니다.

    $ cat << EOF | oc create -f -
      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: hello-world
        namespace: openshift-adp
      spec:
        backupName: hello-world
    EOF
  8. 다음 명령을 실행하여 복원이 완료될 때까지 기다립니다.

    $ watch "oc -n openshift-adp get restore hello-world -o json | jq .status"

    출력 예

    {
      "completionTimestamp": "2022-09-07T22:25:47Z",
      "phase": "Completed",
      "progress": {
        "itemsRestored": 38,
        "totalItems": 38
      },
      "startTimestamp": "2022-09-07T22:25:28Z",
      "warnings": 9
    }

  9. 다음 명령을 실행하여 워크로드가 복원되었는지 확인합니다.

    $ oc -n hello-world get pods

    출력 예

    NAME                              READY   STATUS    RESTARTS   AGE
    hello-openshift-9f885f7c6-kdjpj   1/1     Running   0          90s

  10. 다음 명령을 실행하여 JSONPath를 확인합니다.

    $ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`

    출력 예

    Hello OpenShift!

참고

문제 해결 팁은 OADP 팀의 문제 해결 설명서를 참조하십시오.

4.11.1.3.2. OADP 및 AWS STS를 사용하여 백업 후 클러스터 정리

이 예제에서 OADP(OpenShift API for Data Protection) Operator를 백업 및 S3 버킷과 함께 설치 제거해야 하는 경우 다음 지침을 따르십시오.

절차

  1. 다음 명령을 실행하여 워크로드를 삭제합니다.

    $ oc delete ns hello-world
  2. 다음 명령을 실행하여 DPA(데이터 보호 애플리케이션)를 삭제합니다.

    $ oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa
  3. 다음 명령을 실행하여 클라우드 스토리지를 삭제합니다.

    $ oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp
    중요

    이 명령이 중단되면 다음 명령을 실행하여 종료자를 삭제해야 할 수 있습니다.

    $ oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge
  4. Operator가 더 이상 필요하지 않은 경우 다음 명령을 실행하여 Operator를 제거합니다.

    $ oc -n openshift-adp delete subscription oadp-operator
  5. 다음 명령을 실행하여 Operator에서 네임스페이스를 제거합니다.

    $ oc delete ns openshift-adp
  6. 백업 및 복원 리소스가 더 이상 필요하지 않은 경우 다음 명령을 실행하여 클러스터에서 해당 리소스를 제거합니다.

    $ oc delete backup hello-world
  7. AWS S3에서 백업, 복원 및 원격 오브젝트를 삭제하려면 다음 명령을 실행합니다.

    $ velero backup delete hello-world
  8. 더 이상 CRD(Custom Resource Definitions)가 필요하지 않은 경우 다음 명령을 실행하여 클러스터에서 해당 정의를 제거하십시오.

    $ for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done
  9. 다음 명령을 실행하여 AWS S3 버킷을 삭제합니다.

    $ aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive
    $ aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp
  10. 다음 명령을 실행하여 역할에서 정책을 분리합니다.

    $ aws iam detach-role-policy --role-name "${ROLE_NAME}"  --policy-arn "${POLICY_ARN}"
  11. 다음 명령을 실행하여 역할을 삭제합니다.

    $ aws iam delete-role --role-name "${ROLE_NAME}"
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.