4장. 호스트된 컨트롤 플레인 배포


4.1. AWS에 호스팅된 컨트롤 플레인 배포

호스팅 클러스터는 관리 클러스터에서 호스팅되 는 API 끝점 및 컨트롤 플레인이 있는 OpenShift Container Platform 클러스터입니다. 호스트된 클러스터에는 컨트롤 플레인과 해당 데이터 플레인이 포함됩니다. 온프레미스에서 호스팅되는 컨트롤 플레인을 구성하려면 관리 클러스터에 Kubernetes Operator용 다중 클러스터 엔진을 설치해야 합니다. hypershift-addon 관리 클러스터 애드온을 사용하여 기존 관리 클러스터에 HyperShift Operator를 배포하면 해당 클러스터를 관리 클러스터로 활성화하고 호스팅된 클러스터를 생성할 수 있습니다. 로컬 클러스터 관리 클러스터에 대해 하이퍼shift-addon 관리 클러스터 애드온은 기본적으로 활성화되어 있습니다.

다중 클러스터 엔진 Operator 콘솔 또는 호스팅된 컨트롤 플레인 CLI(명령줄 인터페이스), hcp 를 사용하여 호스팅된 클러스터를 생성할 수 있습니다. 호스팅된 클러스터는 관리 클러스터로 자동으로 가져옵니다. 그러나 이 자동 가져오기 기능을 다중 클러스터 엔진 Operator로 비활성화 할 수 있습니다.

4.1.1. AWS에 호스팅된 컨트롤 플레인 배포 준비

AWS(Amazon Web Services)에 호스팅된 컨트롤 플레인을 배포할 준비가 되면 다음 정보를 고려하십시오.

  • 각 호스트 클러스터에는 클러스터 전체 이름이 있어야 합니다. 호스트된 클러스터 이름은 다중 클러스터 엔진 Operator가 이를 관리하기 위해 기존 관리 클러스터와 같을 수 없습니다.
  • 클러스터를 호스팅 클러스터 이름으로 사용하지 마십시오.
  • 호스팅된 컨트롤 플레인의 동일한 플랫폼에서 관리 클러스터 및 작업자를 실행합니다.
  • 호스트된 클러스터는 다중 클러스터 엔진 Operator 관리 클러스터의 네임스페이스에서 생성할 수 없습니다.

4.1.1.1. 관리 클러스터를 구성하기 위한 사전 요구 사항

관리 클러스터를 구성하려면 다음 사전 요구 사항이 있어야 합니다.

  • OpenShift Container Platform 클러스터에 Kubernetes Operator 2.5 이상을 위한 다중 클러스터 엔진을 설치했습니다. RHACM(Red Hat Advanced Cluster Management)을 설치할 때 multicluster engine Operator가 자동으로 설치됩니다. 멀티 클러스터 엔진 Operator는 OpenShift Container Platform OperatorHub의 Operator로 RHACM 없이 설치할 수도 있습니다.
  • 다중 클러스터 엔진 Operator에 대해 하나 이상의 관리형 OpenShift Container Platform 클러스터가 있어야 합니다. local-cluster 는 다중 클러스터 엔진 Operator 버전 2.5 이상에서 자동으로 가져옵니다. 다음 명령을 실행하여 허브 클러스터의 상태를 확인할 수 있습니다.

    $ oc get managedclusters local-cluster
    Copy to Clipboard Toggle word wrap
  • aws CLI(명령줄 인터페이스) 를 설치했습니다.
  • 호스팅된 컨트롤 플레인 CLI( hcp )를 설치했습니다.

4.1.2. Amazon Web Services S3 버킷 및 S3 OIDC 시크릿 생성

AWS(Amazon Web Services)에서 호스팅된 클러스터를 생성하고 관리하려면 S3 버킷 및 S3 OIDC 시크릿을 생성해야 합니다.

프로세스

  1. 다음 명령을 실행하여 클러스터의 호스트 OIDC 검색 문서에 액세스할 수 있는 S3 버킷을 생성합니다.

    $ aws s3api create-bucket --bucket <bucket_name> \
    1
    
      --create-bucket-configuration LocationConstraint=<region> \
    2
    
      --region <region> 
    3
    Copy to Clipboard Toggle word wrap
    1
    & lt;bucket_name >을 생성 중인 S3 버킷의 이름으로 바꿉니다.
    2 3
    us-east-1 리전 이외의 리전에서 버킷을 생성하려면 이 행을 포함하고 < region >을 사용하려는 리전으로 교체합니다. us-east-1 리전에 버킷을 생성하려면 이 행을 생략합니다.
    $ aws s3api delete-public-access-block --bucket <bucket_name> 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;bucket_name >을 생성 중인 S3 버킷의 이름으로 바꿉니다.
    $ echo '{
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::<bucket_name>/*" 
    1
    
            }
        ]
    }' | envsubst > policy.json
    Copy to Clipboard Toggle word wrap
    1
    & lt;bucket_name >을 생성 중인 S3 버킷의 이름으로 바꿉니다.
    $ aws s3api put-bucket-policy --bucket <bucket_name> \
    1
    
      --policy file://policy.json
    Copy to Clipboard Toggle word wrap
    1
    & lt;bucket_name >을 생성 중인 S3 버킷의 이름으로 바꿉니다.
    참고

    Mac 컴퓨터를 사용하는 경우 정책이 작동하려면 버킷 이름을 내보내야 합니다.

  2. HyperShift Operator에 대해 hypershift-operator-oidc-provider-s3-credentials 라는 OIDC S3 시크릿을 생성합니다.
  3. 로컬 클러스터 네임스페이스에 시크릿을 저장합니다.
  4. 다음 표를 참조하여 보안에 다음 필드가 포함되어 있는지 확인합니다.

    Expand
    표 4.1. AWS 시크릿의 필수 필드
    필드 이름설명

    bucket

    호스팅된 클러스터에 대한 호스트 OIDC 검색 문서에 대한 공용 액세스 권한이 있는 S3 버킷이 포함되어 있습니다.

    credentials

    버킷에 액세스할 수 있는 기본 프로필의 자격 증명이 포함된 파일에 대한 참조입니다. 기본적으로 HyperShift는 기본 프로필만 사용하여 버킷 을 작동합니다.

    region

    S3 버킷의 리전을 지정합니다.

  5. AWS 시크릿을 생성하려면 다음 명령을 실행합니다.

    $ oc create secret generic <secret_name> \
      --from-file=credentials=<path>/.aws/credentials \
      --from-literal=bucket=<s3_bucket> \
      --from-literal=region=<region> \
      -n local-cluster
    Copy to Clipboard Toggle word wrap
    참고

    보안에 대한 재해 복구 백업은 자동으로 활성화되지 않습니다. 재해 복구를 위해 hypershift-operator-oidc-provider-s3-credentials 시크릿을 백업할 수 있는 레이블을 추가하려면 다음 명령을 실행합니다.

    $ oc label secret hypershift-operator-oidc-provider-s3-credentials \
      -n local-cluster cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap

4.1.3. 호스팅된 클러스터에 대해 라우팅 가능한 퍼블릭 영역 생성

호스팅된 클러스터의 애플리케이션에 액세스하려면 라우팅 가능한 퍼블릭 영역을 구성해야 합니다. 퍼블릭 영역이 있는 경우 이 단계를 건너뜁니다. 그렇지 않으면 퍼블릭 영역이 기존 기능에 영향을 미칩니다.

프로세스

  • DNS 레코드에 대해 라우팅 가능한 퍼블릭 영역을 생성하려면 다음 명령을 입력합니다.

    $ aws route53 create-hosted-zone \
      --name <basedomain> \
    1
    
      --caller-reference $(whoami)-$(date --rfc-3339=date)
    Copy to Clipboard Toggle word wrap
    1
    & lt;basedomain& gt;을 기본 도메인으로 바꿉니다(예: www.example.com ).

4.1.4. AWS IAM 역할 및 STS 인증 정보 생성

AWS(Amazon Web Services)에서 호스팅된 클러스터를 생성하기 전에 AWS IAM 역할 및 STS 인증 정보를 생성해야 합니다.

프로세스

  1. 다음 명령을 실행하여 사용자의 Amazon 리소스 이름(ARN)을 가져옵니다.

    $ aws sts get-caller-identity --query "Arn" --output text
    Copy to Clipboard Toggle word wrap

    출력 예

    arn:aws:iam::1234567890:user/<aws_username>
    Copy to Clipboard Toggle word wrap

    다음 단계에서 이 출력을 < arn&gt;의 값으로 사용합니다.

  2. 역할에 대한 신뢰 관계 구성이 포함된 JSON 파일을 생성합니다. 다음 예제를 참조하십시오.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": "<arn>" 
    1
    
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
    1
    & lt;arn >을 이전 단계에서 언급한 사용자의 ARN으로 바꿉니다.
  3. 다음 명령을 실행하여 IAM(Identity and Access Management) 역할을 생성합니다.

    $ aws iam create-role \
      --role-name <name> \
    1
    
      --assume-role-policy-document file://<file_name>.json \
    2
    
      --query "Role.Arn"
    Copy to Clipboard Toggle word wrap
    1
    &lt ;name& gt;을 역할 이름(예: hcp-cli-role )으로 바꿉니다.
    2
    & lt;file_name >을 이전 단계에서 생성한 JSON 파일의 이름으로 바꿉니다.

    출력 예

    arn:aws:iam::820196288204:role/myrole
    Copy to Clipboard Toggle word wrap

  4. 역할에 대한 다음 권한 정책이 포함된 policy.json 이라는 JSON 파일을 생성합니다.

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "EC2",
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateDhcpOptions",
                    "ec2:DeleteSubnet",
                    "ec2:ReplaceRouteTableAssociation",
                    "ec2:DescribeAddresses",
                    "ec2:DescribeInstances",
                    "ec2:DeleteVpcEndpoints",
                    "ec2:CreateNatGateway",
                    "ec2:CreateVpc",
                    "ec2:DescribeDhcpOptions",
                    "ec2:AttachInternetGateway",
                    "ec2:DeleteVpcEndpointServiceConfigurations",
                    "ec2:DeleteRouteTable",
                    "ec2:AssociateRouteTable",
                    "ec2:DescribeInternetGateways",
                    "ec2:DescribeAvailabilityZones",
                    "ec2:CreateRoute",
                    "ec2:CreateInternetGateway",
                    "ec2:RevokeSecurityGroupEgress",
                    "ec2:ModifyVpcAttribute",
                    "ec2:DeleteInternetGateway",
                    "ec2:DescribeVpcEndpointConnections",
                    "ec2:RejectVpcEndpointConnections",
                    "ec2:DescribeRouteTables",
                    "ec2:ReleaseAddress",
                    "ec2:AssociateDhcpOptions",
                    "ec2:TerminateInstances",
                    "ec2:CreateTags",
                    "ec2:DeleteRoute",
                    "ec2:CreateRouteTable",
                    "ec2:DetachInternetGateway",
                    "ec2:DescribeVpcEndpointServiceConfigurations",
                    "ec2:DescribeNatGateways",
                    "ec2:DisassociateRouteTable",
                    "ec2:AllocateAddress",
                    "ec2:DescribeSecurityGroups",
                    "ec2:RevokeSecurityGroupIngress",
                    "ec2:CreateVpcEndpoint",
                    "ec2:DescribeVpcs",
                    "ec2:DeleteSecurityGroup",
                    "ec2:DeleteDhcpOptions",
                    "ec2:DeleteNatGateway",
                    "ec2:DescribeVpcEndpoints",
                    "ec2:DeleteVpc",
                    "ec2:CreateSubnet",
                    "ec2:DescribeSubnets"
                ],
                "Resource": "*"
            },
            {
                "Sid": "ELB",
                "Effect": "Allow",
                "Action": [
                    "elasticloadbalancing:DeleteLoadBalancer",
                    "elasticloadbalancing:DescribeLoadBalancers",
                    "elasticloadbalancing:DescribeTargetGroups",
                    "elasticloadbalancing:DeleteTargetGroup"
                ],
                "Resource": "*"
            },
            {
                "Sid": "IAMPassRole",
                "Effect": "Allow",
                "Action": "iam:PassRole",
                "Resource": "arn:*:iam::*:role/*-worker-role",
                "Condition": {
                    "ForAnyValue:StringEqualsIfExists": {
                        "iam:PassedToService": "ec2.amazonaws.com"
                    }
                }
            },
            {
                "Sid": "IAM",
                "Effect": "Allow",
                "Action": [
                    "iam:CreateInstanceProfile",
                    "iam:DeleteInstanceProfile",
                    "iam:GetRole",
                    "iam:UpdateAssumeRolePolicy",
                    "iam:GetInstanceProfile",
                    "iam:TagRole",
                    "iam:RemoveRoleFromInstanceProfile",
                    "iam:CreateRole",
                    "iam:DeleteRole",
                    "iam:PutRolePolicy",
                    "iam:AddRoleToInstanceProfile",
                    "iam:CreateOpenIDConnectProvider",
                    "iam:ListOpenIDConnectProviders",
                    "iam:DeleteRolePolicy",
                    "iam:UpdateRole",
                    "iam:DeleteOpenIDConnectProvider",
                    "iam:GetRolePolicy"
                ],
                "Resource": "*"
            },
            {
                "Sid": "Route53",
                "Effect": "Allow",
                "Action": [
                    "route53:ListHostedZonesByVPC",
                    "route53:CreateHostedZone",
                    "route53:ListHostedZones",
                    "route53:ChangeResourceRecordSets",
                    "route53:ListResourceRecordSets",
                    "route53:DeleteHostedZone",
                    "route53:AssociateVPCWithHostedZone",
                    "route53:ListHostedZonesByName"
                ],
                "Resource": "*"
            },
            {
                "Sid": "S3",
                "Effect": "Allow",
                "Action": [
                    "s3:ListAllMyBuckets",
                    "s3:ListBucket",
                    "s3:DeleteObject",
                    "s3:DeleteBucket"
                ],
                "Resource": "*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 실행하여 policy.json 파일을 역할에 연결합니다.

    $ aws iam put-role-policy \
      --role-name <role_name> \
    1
    
      --policy-name <policy_name> \
    2
    
      --policy-document file://policy.json 
    3
    Copy to Clipboard Toggle word wrap
    1
    & lt;role_name >을 역할 이름으로 바꿉니다.
    2
    &lt ;policy_name&gt;을 정책 이름으로 바꿉니다.
    3
    policy.json 파일에는 역할에 대한 권한 정책이 포함되어 있습니다.
  6. 다음 명령을 실행하여 sts-creds.json 이라는 JSON 파일에서 STS 자격 증명을 검색합니다.

    $ aws sts get-session-token --output json > sts-creds.json
    Copy to Clipboard Toggle word wrap

    sts-creds.json 파일의 예

    {
        "Credentials": {
            "AccessKeyId": "<access_key_id",
            "SecretAccessKey": "<secret_access_key>”,
            "SessionToken": "<session_token>",
            "Expiration": "<time_stamp>"
        }
    }
    Copy to Clipboard Toggle word wrap

4.1.6. AWS에서 호스팅되는 제어 평면에 대한 외부 DNS 활성화

호스팅된 제어 평면에서는 제어 평면과 데이터 평면이 분리됩니다. 두 개의 독립적인 영역에서 DNS를 구성할 수 있습니다.

  • *.apps.service-consumer-domain.com 과 같은 호스팅된 클러스터 내의 워크로드에 대한 수신.
  • 서비스 공급자 도메인을 통한 API 또는 OAuth 엔드포인트와 같은 관리 클러스터 내의 서비스 엔드포인트에 대한 수신: *.service-provider-domain.com .

hostedCluster.spec.dns 에 대한 입력은 호스팅 클러스터 내의 워크로드에 대한 수신을 관리합니다. hostedCluster.spec.services.servicePublishingStrategy.route.hostname 에 대한 입력은 관리 클러스터 내의 서비스 엔드포인트에 대한 수신을 관리합니다.

외부 DNS는 LoadBalancer 또는 Route 의 게시 유형을 지정하고 해당 게시 유형에 대한 호스트 이름을 제공하는 호스팅된 클러스터 서비스 에 대한 이름 레코드를 생성합니다. Private 또는 PublicAndPrivate 엔드포인트 액세스 유형이 있는 호스팅 클러스터의 경우 APIServerOAuth 서비스만 호스트 이름을 지원합니다. 개인 호스팅 클러스터의 경우 DNS 레코드는 VPC의 Virtual Private Cloud(VPC) 엔드포인트의 개인 IP 주소로 확인됩니다.

호스팅된 제어 평면은 다음 서비스를 제공합니다.

  • APIServer
  • OIDC

HostedCluster 사양의 servicePublishingStrategy 필드를 사용하여 이러한 서비스를 노출할 수 있습니다. 기본적으로 servicePublishingStrategyLoadBalancerRoute 유형의 경우 다음 방법 중 하나로 서비스를 게시할 수 있습니다.

  • LoadBalancer 유형의 서비스 상태에 있는 로드 밸런서의 호스트 이름을 사용합니다.
  • Route 리소스의 status.host 필드를 사용합니다.

그러나 관리형 서비스 컨텍스트에서 호스팅된 제어 평면을 배포하는 경우 해당 방법은 기본 관리 클러스터의 수신 하위 도메인을 노출하고 관리 클러스터 수명 주기 및 재해 복구에 대한 옵션을 제한할 수 있습니다.

DNS 간접 설정이 LoadBalancer경로 게시 유형에 적용되는 경우 관리 서비스 운영자는 서비스 수준 도메인을 사용하여 모든 공용 호스팅 클러스터 서비스를 게시할 수 있습니다. 이 아키텍처를 사용하면 DNS 이름을 새로운 LoadBalancer 또는 경로 로 다시 매핑할 수 있으며 관리 클러스터의 수신 도메인을 노출하지 않습니다. 호스팅된 제어 평면은 외부 DNS를 사용하여 간접 계층을 구현합니다.

관리 클러스터의 HyperShift 네임스페이스에서 HyperShift Operator와 함께 external-dns를 배포할 수 있습니다. 외부 DNS는 external-dns.alpha.kubernetes.io/hostname 주석이 있는 서비스경로 를 감시합니다. 해당 주석은 A 레코드와 같은 Service 를 가리키는 DNS 레코드나 CNAME 레코드와 같은 Route를 가리키는 DNS 레코드를 만드는 데 사용됩니다.

외부 DNS는 클라우드 환경에서만 사용할 수 있습니다. 다른 환경에서는 DNS 및 서비스를 수동으로 구성해야 합니다.

외부 DNS에 대한 자세한 내용은 외부 DNS를 참조하세요.

4.1.6.1. 사전 요구 사항

Amazon Web Services(AWS)에서 호스팅된 제어 평면에 대한 외부 DNS를 설정하려면 먼저 다음 필수 구성 요소를 충족해야 합니다.

  • 외부 공개 도메인을 생성했습니다.
  • AWS Route53 관리 콘솔에 액세스할 수 있습니다.
  • 호스팅된 제어 평면에 대해 AWS PrivateLink를 활성화했습니다.

4.1.6.2. 호스팅된 제어 평면에 대한 외부 DNS 설정

외부 DNS 또는 서비스 수준 DNS를 사용하여 호스팅된 제어 평면을 프로비저닝할 수 있습니다.

  1. HyperShift Operator에 대한 Amazon Web Services(AWS) 자격 증명 비밀을 만들고 로컬 클러스터 네임 스페이스에 hypershift-operator-external-dns-credentials라는 이름을 지정합니다.
  2. 다음 표를 참조하여 비밀번호에 필수 필드가 있는지 확인하세요.

    Expand
    표 4.3. AWS 비밀에 대한 필수 필드
    필드 이름설명선택사항 또는 필수사항

    provider

    서비스 수준 DNS 영역을 관리하는 DNS 공급자입니다.

    필수 항목

    domain-filter

    서비스 수준 도메인.

    필수 항목

    credentials

    모든 외부 DNS 유형을 지원하는 자격 증명 파일입니다.

    AWS 키를 사용하는 경우 선택 사항

    aws-access-key-id

    자격 증명 액세스 키 ID입니다.

    AWS DNS 서비스를 사용하는 경우 선택 사항

    aws-secret-access-key

    자격 증명 액세스 키 비밀번호입니다.

    AWS DNS 서비스를 사용하는 경우 선택 사항

  3. AWS 비밀번호를 생성하려면 다음 명령을 실행하세요.

    $ oc create secret generic <secret_name> \
      --from-literal=provider=aws \
      --from-literal=domain-filter=<domain_name> \
      --from-file=credentials=<path_to_aws_credentials_file> -n local-cluster
    Copy to Clipboard Toggle word wrap
    참고

    비밀에 대한 재해 복구 백업이 자동으로 활성화되지 않습니다. 재해 복구를 위해 비밀번호를 백업하려면 다음 명령을 입력하여 hypershift-operator-external-dns-credentials를 추가합니다.

    $ oc label secret hypershift-operator-external-dns-credentials \
      -n local-cluster \
      cluster.open-cluster-management.io/backup=""
    Copy to Clipboard Toggle word wrap

4.1.6.3. 공개 DNS 호스팅 영역 생성

외부 DNS 운영자는 공개 DNS 호스팅 영역을 사용하여 공개 호스팅 클러스터를 생성합니다.

외부 DNS 도메인 필터로 사용할 공개 DNS 호스팅 영역을 만들 수 있습니다. AWS Route 53 관리 콘솔에서 다음 단계를 완료하세요.

프로세스

  1. Route 53 관리 콘솔에서 호스팅 영역 만들기를 클릭합니다.
  2. 호스팅 영역 구성 페이지에서 도메인 이름을 입력하고 유형으로 공용 호스팅 영역이 선택되어 있는지 확인한 다음 호스팅 영역 만들기를 클릭합니다.
  3. 영역이 생성된 후, 레코드 탭에서 값/경로 트래픽 열의 값을 기록해 둡니다.
  4. 기본 도메인에서 DNS 요청을 위임된 영역으로 리디렉션하기 위해 NS 레코드를 만듭니다. 필드에 이전 단계에서 기록한 값을 입력합니다.
  5. 레코드 만들기를 클릭합니다.
  6. 다음 예와 같이 새 하위 영역에 테스트 항목을 만들고 dig 명령으로 테스트하여 DNS 호스팅 영역이 작동하는지 확인합니다.

    $ dig +short test.user-dest-public.aws.kerberos.com
    Copy to Clipboard Toggle word wrap

    출력 예

    192.168.1.1
    Copy to Clipboard Toggle word wrap

  7. LoadBalancerRoute 서비스에 대한 호스트 이름을 설정하는 호스팅 클러스터를 만들려면 다음 명령을 입력하세요.

    $ hcp create cluster aws --name=<hosted_cluster_name> \
      --endpoint-access=PublicAndPrivate \
      --external-dns-domain=<public_hosted_zone> ... 
    1
    Copy to Clipboard Toggle word wrap
    1
    <public_hosted_zone>을 사용자가 만든 공개 호스팅 영역으로 바꾸세요.

    호스팅 클러스터에 대한 서비스 블록 예

      platform:
        aws:
          endpointAccess: PublicAndPrivate
    ...
      services:
      - service: APIServer
        servicePublishingStrategy:
          route:
            hostname: api-example.service-provider-domain.com
          type: Route
      - service: OAuthServer
        servicePublishingStrategy:
          route:
            hostname: oauth-example.service-provider-domain.com
          type: Route
      - service: Konnectivity
        servicePublishingStrategy:
          type: Route
      - service: Ignition
        servicePublishingStrategy:
          type: Route
    Copy to Clipboard Toggle word wrap

제어 평면 운영자는 서비스경로 리소스를 생성하고 여기에 external-dns.alpha.kubernetes.io/hostname 주석을 추가합니다. 서비스경로 의 경우, 제어 평면 운영자는 서비스 엔드포인트에 대한 servicePublishingStrategy 필드의 호스트 이름 매개변수 값을 사용합니다. DNS 레코드를 생성하려면 외부 DNS 배포와 같은 메커니즘을 사용할 수 있습니다.

공개 서비스에 대해서만 서비스 수준 DNS 간접 설정을 구성할 수 있습니다. 개인 서비스는 hypershift.local 개인 영역을 사용하기 때문에 호스트 이름을 설정할 수 없습니다.

다음 표는 서비스와 엔드포인트 조합에 대한 호스트 이름을 설정하는 것이 유효한 경우를 보여줍니다.

Expand
표 4.4. 호스트 이름을 설정하기 위한 서비스 및 엔드포인트 조합
서비스퍼블릭PublicAndPrivate프라이빗

APIServer

Y

Y

N

OAuthServer

Y

Y

N

연결성

Y

N

N

Ignition

Y

N

N

4.1.6.4. AWS의 외부 DNS를 사용하여 호스팅 클러스터 만들기

Amazon Web Services(AWS)에서 PublicAndPrivate 또는 Public 게시 전략을 사용하여 호스팅 클러스터를 생성하려면 관리 클러스터에 다음 아티팩트를 구성해야 합니다.

  • 공개 DNS 호스팅 영역
  • 외부 DNS 운영자
  • HyperShift 연산자

hcp 명령줄 인터페이스(CLI)를 사용하여 호스팅된 클러스터를 배포할 수 있습니다.

프로세스

  1. 관리 클러스터에 액세스하려면 다음 명령을 입력하세요.

    $ export KUBECONFIG=<path_to_management_cluster_kubeconfig>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 외부 DNS 운영자가 실행 중인지 확인하세요.

    $ oc get pod -n hypershift -lapp=external-dns
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                            READY   STATUS    RESTARTS   AGE
    external-dns-7c89788c69-rn8gp   1/1     Running   0          40s
    Copy to Clipboard Toggle word wrap

  3. 외부 DNS를 사용하여 호스팅 클러스터를 생성하려면 다음 명령을 입력하세요.

    $ hcp create cluster aws \
        --role-arn <arn_role> \ 
    1
    
        --instance-type <instance_type> \ 
    2
    
        --region <region> \ 
    3
    
        --auto-repair \
        --generate-ssh \
        --name <hosted_cluster_name> \ 
    4
    
        --namespace clusters \
        --base-domain <service_consumer_domain> \ 
    5
    
        --node-pool-replicas <node_replica_count> \ 
    6
    
        --pull-secret <path_to_your_pull_secret> \ 
    7
    
        --release-image quay.io/openshift-release-dev/ocp-release:<ocp_release_image> \ 
    8
    
        --external-dns-domain=<service_provider_domain> \ 
    9
    
        --endpoint-access=PublicAndPrivate 
    10
    
        --sts-creds <path_to_sts_credential_file> 
    11
    Copy to Clipboard Toggle word wrap
    1
    Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ).
    2
    인스턴스 유형을 지정합니다(예: m6i.xlarge ).
    3
    AWS 지역을 지정합니다(예: us-east-1) .
    4
    호스팅된 클러스터 이름을 지정합니다(예: my-external-aws ) .
    5
    서비스 소비자가 소유한 공개 호스팅 영역을 지정합니다(예: service-consumer-domain.com ).
    6
    노드 복제본 수를 지정합니다(예: 2 ).
    7
    풀 시크릿 파일의 경로를 지정하세요.
    8
    사용하려는 지원되는 OpenShift Container Platform 버전을 지정합니다(예: 4.19.0-multi ).
    9
    서비스 제공자가 소유한 공개 호스팅 영역(예: service-provider-domain.com )을 지정합니다.
    10
    PublicAndPrivate 로 설정합니다. 공개 또는 PublicAndPrivate 구성에서만 외부 DNS를 사용할 수 있습니다.
    11
    AWS STS 자격 증명 파일의 경로를 지정합니다(예: /home/user/sts-creds/sts-creds.json ).

4.1.6.5. 사용자 정의 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.1.7. AWS에서 호스팅 클러스터 생성

hcp 명령줄 인터페이스(CLI)를 사용하여 Amazon Web Services(AWS)에서 호스팅 클러스터를 만들 수 있습니다.

기본적으로 Amazon Web Services(AWS)의 호스팅 제어 평면에서는 AMD64 호스팅 클러스터를 사용합니다. 하지만 호스팅된 제어 평면을 ARM64 호스팅 클러스터에서 실행하도록 설정할 수 있습니다. 자세한 내용은 "ARM64 아키텍처에서 호스팅된 클러스터 실행"을 참조하세요.

노드 풀과 호스팅 클러스터의 호환 조합은 다음 표를 참조하세요.

Expand
표 4.5. 노드 풀 및 호스팅 클러스터에 적합한 아키텍처
호스팅 클러스터노드 풀

AMD64

AMD64 또는 ARM64

ARM64

ARM64 또는 AMD64

사전 요구 사항

  • 호스팅된 제어 평면 CLI인 hcp를 설정했습니다.
  • 로컬 클러스터 관리 클러스터를 관리 클러스터로 활성화했습니다.
  • AWS Identity and Access Management(IAM) 역할과 AWS Security Token Service(STS) 자격 증명을 생성했습니다.

프로세스

  1. AWS에서 호스팅 클러스터를 만들려면 다음 명령을 실행하세요.

    $ hcp create cluster aws \
        --name <hosted_cluster_name> \
    1
    
        --infra-id <infra_id> \
    2
    
        --base-domain <basedomain> \
    3
    
        --sts-creds <path_to_sts_credential_file> \
    4
    
        --pull-secret <path_to_pull_secret> \
    5
    
        --region <region> \
    6
    
        --generate-ssh \
        --node-pool-replicas <node_pool_replica_count> \
    7
    
        --namespace <hosted_cluster_namespace> \
    8
    
        --role-arn <role_name> \
    9
    
        --render-into <file_name>.yaml 
    10
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    인프라 이름을 지정하세요. <hosted_cluster_name><infra_id> 에 동일한 값을 제공해야 합니다. 그렇지 않으면 클러스터가 Kubernetes Operator 콘솔의 멀티클러스터 엔진에 올바르게 나타나지 않을 수 있습니다.
    3
    기본 도메인을 지정하세요(예: example.com ).
    4
    AWS STS 자격 증명 파일의 경로를 지정합니다(예: /home/user/sts-creds/sts-creds.json ).
    5
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    6
    AWS 지역 이름을 지정합니다(예: us-east-1) .
    7
    노드 풀 복제본 수를 지정합니다(예: 3 ).
    8
    기본적으로 모든 HostedClusterNodePool 사용자 정의 리소스는 클러스터 네임스페이스에 생성됩니다. --namespace <네임스페이스> 매개변수를 사용하면 특정 네임스페이스에 HostedClusterNodePool 사용자 정의 리소스를 만들 수 있습니다.
    9
    Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ).
    10
    EC2 인스턴스가 공유 또는 단일 테넌트 하드웨어에서 실행되는지 여부를 표시하려면 이 필드를 포함합니다. --render-into 플래그는 이 필드에 지정한 YAML 파일에 Kubernetes 리소스를 렌더링합니다. 그런 다음 다음 단계로 진행하여 YAML 파일을 편집합니다.
  2. 이전 명령에 --render-into 플래그를 포함한 경우 지정된 YAML 파일을 편집합니다. 다음 예와 유사하게 EC2 인스턴스를 공유 또는 단일 테넌트 하드웨어에서 실행해야 하는지 여부를 나타내기 위해 YAML 파일에서 NodePool 사양을 편집합니다.

    YAML 파일 예시

    apiVersion: hypershift.openshift.io/v1beta1
    kind: NodePool
    metadata:
      name: <nodepool_name> 
    1
    
    spec:
      platform:
        aws:
          placement:
            tenancy: "default" 
    2
    Copy to Clipboard Toggle word wrap

    1
    NodePool 리소스의 이름을 지정합니다.
    2
    테넌시에 유효한 값을 지정하세요: "기본" , "전용" 또는 "호스트" . 노드 풀 인스턴스가 공유 하드웨어에서 실행되는 경우 "기본값"을 사용합니다. 각 노드 풀 인스턴스가 단일 테넌트 하드웨어에서 실행되는 경우 "전용"을 사용합니다. 노드 풀 인스턴스가 사전 할당된 전용 호스트에서 실행되는 경우 "호스트"를 사용합니다.

검증

  1. 호스팅된 클러스터의 상태를 확인하여 AVAILABLE 값이 True 인지 확인하세요. 다음 명령을 실행합니다.

    $ oc get hostedclusters -n <hosted_cluster_namespace>
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 노드 풀 목록을 가져옵니다.

    $ oc get nodepools --namespace <hosted_cluster_namespace>
    Copy to Clipboard Toggle word wrap

4.1.7.1. AWS에서 호스팅된 클러스터에 액세스

리소스에서 직접 kubeconfig 파일과 kubeadmin 자격 증명을 가져와서 호스팅된 클러스터에 액세스할 수 있습니다.

호스팅된 클러스터의 액세스 비밀을 알고 있어야 합니다. 호스팅 클러스터 네임스페이스에는 호스팅 클러스터 리소스가 포함되고, 호스팅 제어 플레인 네임스페이스는 호스팅 제어 플레인이 실행되는 곳입니다. 비밀 이름 형식은 다음과 같습니다.

  • kubeconfig 비밀: <호스트 클러스터 네임스페이스>-<이름>-admin-kubeconfig . 예를 들어, clusters-hypershift-demo-admin-kubeconfig .
  • kubeadmin 비밀번호: <hosted-cluster-namespace>-<name>-kubeadmin-password . 예를 들어, clusters-hypershift-demo-kubeadmin-password .

프로세스

  • kubeconfig 비밀에는 Base64로 인코딩된 kubeconfig 필드가 포함되어 있으며, 이를 디코딩하여 다음 명령으로 파일에 저장하여 사용할 수 있습니다.

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    kubeadmin 비밀번호도 Base64로 인코딩되었습니다. 이를 디코딩하고 비밀번호를 사용하여 호스팅된 클러스터의 API 서버나 콘솔에 로그인할 수 있습니다.

Amazon Web Services(AWS)에서 호스팅 클러스터를 생성한 후에는 kubeconfig 파일, 액세스 비밀, kubeadmin 자격 증명을 가져와서 호스팅 클러스터에 액세스할 수 있습니다.

호스팅된 클러스터 네임스페이스에는 호스팅된 클러스터 리소스와 액세스 비밀이 포함되어 있습니다. 호스팅된 제어 평면은 호스팅된 제어 평면 네임스페이스에서 실행됩니다.

비밀 이름 형식은 다음과 같습니다.

  • kubeconfig 비밀: <hosted_cluster_namespace>-<name>-admin-kubeconfig . 예를 들어, clusters-hypershift-demo-admin-kubeconfig .
  • kubeadmin 비밀번호: <hosted_cluster_namespace>-<name>-kubeadmin-password . 예를 들어, clusters-hypershift-demo-kubeadmin-password .
참고

kubeadmin 비밀번호 비밀은 Base64로 인코딩되어 있고 kubeconfig 비밀에는 Base64로 인코딩된 kubeconfig 구성이 포함되어 있습니다. Base64로 인코딩된 kubeconfig 구성을 디코딩하여 <hosted_cluster_name>.kubeconfig 파일에 저장해야 합니다.

프로세스

  • 디코딩된 kubeconfig 구성이 포함된 <hosted_cluster_name>.kubeconfig 파일을 사용하여 호스팅 클러스터에 액세스합니다. 다음 명령을 실행합니다.

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    API 서버나 호스팅된 클러스터의 콘솔에 로그인하려면 kubeadmin 비밀번호 시크릿을 디코딩해야 합니다.

4.1.7.3. hcp CLI를 사용하여 AWS에서 호스팅된 클러스터에 액세스

hcp 명령줄 인터페이스(CLI)를 사용하여 호스팅된 클러스터에 액세스할 수 있습니다.

프로세스

  1. 다음 명령을 입력하여 kubeconfig 파일을 생성합니다.

    $ hcp create kubeconfig --namespace <hosted_cluster_namespace> \
      --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
    Copy to Clipboard Toggle word wrap
  2. kubeconfig 파일을 저장한 후 다음 명령을 입력하여 호스팅된 클러스터에 액세스합니다.

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

4.1.8. 호스팅된 클러스터에서 사용자 정의 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 과 같은 도구를 사용하여 인증서 세부 정보를 확인하세요.

4.1.9. AWS의 여러 영역에 호스팅 클러스터 생성

hcp 명령줄 인터페이스(CLI)를 사용하여 Amazon Web Services(AWS)의 여러 영역에 호스팅된 클러스터를 만들 수 있습니다.

사전 요구 사항

  • AWS Identity and Access Management(IAM) 역할과 AWS Security Token Service(STS) 자격 증명을 생성했습니다.

프로세스

  • 다음 명령을 실행하여 AWS의 여러 영역에 호스팅된 클러스터를 만듭니다.

    $ hcp create cluster aws \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas=<node_pool_replica_count> \
    2
    
      --base-domain <basedomain> \
    3
    
      --pull-secret <path_to_pull_secret> \
    4
    
      --role-arn <arn_role> \
    5
    
      --region <region> \
    6
    
      --zones <zones> \
    7
    
      --sts-creds <path_to_sts_credential_file> 
    8
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    노드 풀 복제본 수를 지정합니다(예: 2 ).
    3
    기본 도메인을 지정하세요(예: example.com ).
    4
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    5
    Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ).
    6
    AWS 지역 이름을 지정합니다(예: us-east-1) .
    7
    AWS 지역 내에서 가용성 영역을 지정합니다(예: us-east-1aus-east-1b) .
    8
    AWS STS 자격 증명 파일의 경로를 지정합니다(예: /home/user/sts-creds/sts-creds.json ).

지정된 각 구역에 대해 다음과 같은 인프라가 생성됩니다.

  • 공개 서브넷
  • 개인 서브넷
  • NAT 게이트웨이
  • 개인 경로 테이블

공개 경로 테이블은 공개 서브넷에서 공유됩니다.

각 영역에 대해 하나의 NodePool 리소스가 생성됩니다. 노드 풀 이름 뒤에는 영역 이름이 붙습니다. zone의 개인 서브넷은 spec.platform.aws.subnet.id 에 설정됩니다.

4.1.9.1. AWS STS 자격 증명을 제공하여 호스팅 클러스터 생성

hcp create cluster aws 명령을 사용하여 호스팅 클러스터를 생성하는 경우 호스팅 클러스터에 대한 인프라 리소스를 생성할 수 있는 권한이 있는 Amazon Web Services(AWS) 계정 자격 증명을 제공해야 합니다.

인프라 리소스에는 다음이 포함됩니다.

  • Virtual Private Cloud (VPC)
  • 서브넷
  • 네트워크 주소 변환(NAT) 게이트웨이

다음 방법 중 하나를 사용하여 AWS 자격 증명을 제공할 수 있습니다.

  • AWS 보안 토큰 서비스(STS) 자격 증명
  • 멀티클러스터 엔진 운영자의 AWS 클라우드 공급자 비밀

프로세스

  • AWS STS 자격 증명을 제공하여 AWS에서 호스팅된 클러스터를 생성하려면 다음 명령을 입력하세요.

    $ hcp create cluster aws \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <node_pool_replica_count> \
    2
    
      --base-domain <basedomain> \
    3
    
      --pull-secret <path_to_pull_secret> \
    4
    
      --sts-creds <path_to_sts_credential_file> \
    5
    
      --region <region> \
    6
    
      --role-arn <arn_role>  
    7
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    노드 풀 복제본 수를 지정합니다(예: 2 ).
    3
    기본 도메인을 지정하세요(예: example.com ).
    4
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    5
    AWS STS 자격 증명 파일의 경로를 지정합니다(예: /home/user/sts-creds/sts-creds.json ).
    6
    AWS 지역 이름을 지정합니다(예: us-east-1) .
    7
    Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ).

4.1.10. ARM64 아키텍처에서 호스팅 클러스터 실행

기본적으로 Amazon Web Services(AWS)의 호스팅 제어 평면에서는 AMD64 호스팅 클러스터를 사용합니다. 하지만 호스팅된 제어 평면을 ARM64 호스팅 클러스터에서 실행하도록 설정할 수 있습니다.

노드 풀과 호스팅 클러스터의 호환 조합은 다음 표를 참조하세요.

Expand
표 4.6. 노드 풀 및 호스팅 클러스터에 적합한 아키텍처
호스팅 클러스터노드 풀

AMD64

AMD64 또는 ARM64

ARM64

ARM64 또는 AMD64

Amazon Web Services(AWS)의 ARM64 OpenShift Container Platform 클러스터에서 호스팅된 클러스터를 실행하려면 기본 릴리스 이미지를 다중 아키텍처 릴리스 이미지로 재정의하면 됩니다.

다중 아키텍처 릴리스 이미지를 사용하지 않으면 노드 풀의 컴퓨트 노드가 생성되지 않고, 호스팅된 클러스터에서 다중 아키텍처 릴리스 이미지를 사용하거나 릴리스 이미지에 따라 NodePool 사용자 지정 리소스를 업데이트할 때까지 노드 풀 조정이 중지됩니다.

사전 요구 사항

  • AWS에 설치된 64비트 ARM 인프라가 있는 OpenShift Container Platform 클러스터가 있어야 합니다. 자세한 내용은 OpenShift 컨테이너 플랫폼 클러스터 만들기: AWS(ARM)를 참조하세요.
  • AWS Identity and Access Management(IAM) 역할과 AWS Security Token Service(STS) 자격 증명을 생성해야 합니다. 자세한 내용은 "AWS IAM 역할 및 STS 자격 증명 만들기"를 참조하세요.

프로세스

  • 다음 명령을 입력하여 ARM64 OpenShift Container Platform 클러스터에 호스팅된 클러스터를 만듭니다.

    $ hcp create cluster aws \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <node_pool_replica_count> \
    2
    
      --base-domain <basedomain> \
    3
    
      --pull-secret <path_to_pull_secret> \
    4
    
      --sts-creds <path_to_sts_credential_file> \
    5
    
      --region <region> \
    6
    
      --release-image quay.io/openshift-release-dev/ocp-release:<ocp_release_image> \
    7
    
      --role-arn <role_name> 
    8
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    노드 풀 복제본 수를 지정합니다(예: 3 ).
    3
    기본 도메인을 지정하세요(예: example.com ).
    4
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    5
    AWS STS 자격 증명 파일의 경로를 지정합니다(예: /home/user/sts-creds/sts-creds.json ).
    6
    AWS 지역 이름을 지정합니다(예: us-east-1) .
    7
    사용하려는 지원되는 OpenShift Container Platform 버전을 지정합니다(예: 4.19.0-multi ). 연결이 끊긴 환경을 사용하는 경우 < ocp_release_image >를 다이제스트 이미지로 교체합니다. OpenShift Container Platform 릴리스 이미지 다이제스트를 추출하려면 "OpenShift Container Platform 릴리스 이미지 다이제스트 추출"을 참조하십시오.
    8
    Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ).

4.1.10.2. AWS 호스팅 클러스터에서 ARM 또는 AMD NodePool 오브젝트 생성

동일한 호스팅 컨트롤 플레인의 64비트 ARM 및 AMD에서 NodePool 오브젝트인 애플리케이션 워크로드를 예약할 수 있습니다. NodePool 사양에 arch 필드를 정의하여 NodePool 오브젝트에 필요한 프로세서 아키텍처를 설정할 수 있습니다. arch 필드에 유효한 값은 다음과 같습니다.

  • arm64
  • amd64

사전 요구 사항

프로세스

  • 다음 명령을 실행하여 ARM 또는 AMD NodePool 오브젝트를 AWS의 호스팅 클러스터에 추가합니다.

    $ hcp create nodepool aws \
      --cluster-name <hosted_cluster_name> \
    1
    
      --name <node_pool_name> \
    2
    
      --node-count <node_pool_replica_count> \
    3
    
      --arch <architecture> 
    4
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다( : ).
    2
    노드 풀 이름을 지정합니다.
    3
    노드 풀 복제본 수를 지정합니다(예: 3 ).
    4
    arm64 또는 amd64 와 같은 아키텍처 유형을 지정합니다. --arch 플래그의 값을 지정하지 않으면 기본적으로 amd64 값이 사용됩니다.

4.1.11. AWS에서 개인 호스트 클러스터 생성

local-cluster 를 호스팅 클러스터로 활성화한 후 AWS(Amazon Web Services)에 호스팅 클러스터 또는 개인 호스팅 클러스터를 배포할 수 있습니다.

기본적으로 호스팅된 클러스터는 퍼블릭 DNS와 관리 클러스터의 기본 라우터를 통해 공개적으로 액세스할 수 있습니다.

AWS의 프라이빗 클러스터의 경우 호스팅 클러스터와의 모든 통신은 AWS PrivateLink를 통해 수행됩니다.

사전 요구 사항

  • AWS PrivateLink를 활성화했습니다. 자세한 내용은 "AWS PrivateLink 활성화"를 참조하십시오.
  • AWS IAM(Identity and Access Management) 역할 및 AWS STS(Security Token Service) 인증 정보를 생성하셨습니다. 자세한 내용은 "AWS IAM 역할 및 STS 인증 정보 생성" 및 "IAM(Identity and Access Management) 권한"을 참조하십시오.
  • AWS에서 배스천 인스턴스를 구성했습니다.

프로세스

  • 다음 명령을 입력하여 AWS에서 개인 호스팅 클러스터를 만듭니다.

    $ hcp create cluster aws \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas=<node_pool_replica_count> \
    2
    
      --base-domain <basedomain> \
    3
    
      --pull-secret <path_to_pull_secret> \
    4
    
      --sts-creds <path_to_sts_credential_file> \
    5
    
      --region <region> \
    6
    
      --endpoint-access Private \
    7
    
      --role-arn <role_name> 
    8
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    노드 풀 복제본 수를 지정합니다(예: 3 ).
    3
    기본 도메인을 지정하세요(예: example.com ).
    4
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    5
    AWS STS 자격 증명 파일의 경로를 지정합니다(예: /home/user/sts-creds/sts-creds.json ).
    6
    AWS 지역 이름을 지정합니다(예: us-east-1) .
    7
    클러스터가 공개인지 비공개인지 정의합니다.
    8
    Amazon 리소스 이름(ARN)을 지정합니다(예: arn:aws:iam::820196288204:role/myrole ). ARN 역할에 대한 자세한 내용은 "IAM(ID 및 액세스 관리) 권한"을 참조하세요.

    호스팅된 클러스터의 다음 API 엔드포인트는 개인 DNS 영역을 통해 액세스할 수 있습니다.

  • api.<hosted_cluster_name>.hypershift.local
  • *.apps.<hosted_cluster_name>.hypershift.local

4.1.11.1. AWS에서 개인 관리 클러스터에 액세스

명령줄 인터페이스(CLI)를 사용하여 개인 관리 클러스터에 액세스할 수 있습니다.

프로세스

  1. 다음 명령을 입력하여 노드의 개인 IP를 찾으세요.

    $ aws ec2 describe-instances \
      --filter="Name=tag:kubernetes.io/cluster/<infra_id>,Values=owned" \
      | jq '.Reservations[] | .Instances[] | select(.PublicDnsName=="") \
      | .PrivateIpAddress'
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 노드에 복사할 수 있는 호스팅된 클러스터에 대한 kubeconfig 파일을 만듭니다.

    $ hcp create kubeconfig > <hosted_cluster_kubeconfig>
    Copy to Clipboard Toggle word wrap
  3. 요새를 통해 노드 중 하나에 SSH를 실행하려면 다음 명령을 입력하세요.

    $ ssh -o ProxyCommand="ssh ec2-user@<bastion_ip> \
      -W %h:%p" core@<node_ip>
    Copy to Clipboard Toggle word wrap
  4. SSH 셸에서 다음 명령을 입력하여 kubeconfig 파일 내용을 노드의 파일에 복사합니다.

    $ mv <path_to_kubeconfig_file> <new_file_name>
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 입력하여 kubeconfig 파일을 내보냅니다.

    $ export KUBECONFIG=<path_to_kubeconfig_file>
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 입력하여 호스팅된 클러스터 상태를 확인하세요.

    $ oc get clusteroperators clusterversion
    Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat