13.10. 로컬 영역 서브넷이 있는 기존 VPC에 클러스터 설치
AWS(Amazon Web Services)의 기존 Amazon VPC(Virtual Private Cloud)에 클러스터를 설치할 수 있습니다. 설치 프로그램이 나머지 필수 인프라를 프로비저닝하며, 이후에 추가로 사용자 지정할 수 있습니다. 설치를 사용자 지정하려면 클러스터를 설치하기 전에 install-config.yaml
파일에서 매개변수를 수정합니다.
AWS의 클러스터를 기존 VPC에 설치하려면 AWS Local Zones를 사용하여 Cloud Infrastructure의 에지로 작업자를 확장해야 합니다.
로컬 영역 서브넷은 일반 작업자의 노드를 에지 네트워크로 확장합니다. 각 엣지 작업자 노드는 사용자 워크로드를 실행합니다. AWS(Amazon Web Service) 로컬 영역 환경을 생성하고 클러스터를 배포한 후 에지 작업자 노드를 사용하여 로컬 영역 서브넷에서 사용자 워크로드를 생성할 수 있습니다.
제공된 CloudFormation 템플릿을 사용하여 VPC 및 퍼블릭 서브넷을 생성할 수 있습니다. 또한 템플릿을 수정하여 인프라를 사용자 지정하거나 포함된 정보를 사용하여 회사의 정책에 따라 AWS 오브젝트를 생성할 수 있습니다.
프라이빗 서브넷을 생성하려면 제공된 CloudFormation 템플릿을 수정하거나 고유한 템플릿을 생성해야 합니다.
13.10.1. AWS에서 VPC 생성
OpenShift Container Platform 클러스터의 AWS(Amazon Web Services)에서 각 로컬 영역 위치에 대한 서브넷과 가상 프라이빗 클라우드(VPC)를 생성하여 작업자 노드를 에지 위치로 확장할 수 있습니다. VPN, 라우팅 테이블 및 초기 배포에 포함되지 않은 새 로컬 영역 서브넷을 추가하는 요구 사항을 충족하도록 VPC를 추가로 사용자 지정할 수 있습니다.
제공된 CloudFormation 템플릿과 사용자 정의 매개변수 파일을 사용하여 VPC를 나타내는 AWS 리소스 스택을 생성할 수 있습니다.
AWS 인프라를 생성하는 데 제공된 CloudFormation 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- AWS 계정을 구성했습니다.
-
aws 구성
을 실행하여 AWS 키와 리전을 로컬 AWS 프로필에 추가하셨습니다. - AWS 계정의 AWS 로컬 영역을 선택했습니다.
프로세스
템플릿에 필요한 매개변수 값이 포함된 JSON 파일을 생성합니다.
[ { "ParameterKey": "VpcCidr", 1 "ParameterValue": "10.0.0.0/16" 2 }, { "ParameterKey": "AvailabilityZoneCount", 3 "ParameterValue": "3" 4 }, { "ParameterKey": "SubnetBits", 5 "ParameterValue": "12" 6 } ]
- 이 항목의 VPC 섹션에 대한 CloudFormation 템플릿섹션에서 템플릿을 복사하여 컴퓨터에 YAML 파일로 저장합니다. 이 템플릿은 클러스터에 필요한 VPC를 설명합니다.
CloudFormation 템플릿을 시작하여 다음 명령을 실행하여 VPC를 나타내는 AWS 리소스 스택을 생성합니다.
중요명령은 한 줄로 입력해야 합니다.
$ aws cloudformation create-stack --stack-name <name> \ 1 --template-body file://<template>.yaml \ 2 --parameters file://<parameters>.json 3
출력 예
arn:aws:cloudformation:us-east-1:123456789012:stack/cluster-vpc/dbedae40-2fd3-11eb-820e-12a48460849f
다음 명령을 실행하여 템플릿 구성 요소가 있는지 확인합니다.
$ aws cloudformation describe-stacks --stack-name <name>
StackStatus
에CREATE_COMPLETE
이 표시된 후 다음 매개변수의 출력 값이 표시됩니다. 클러스터를 생성하기 위해 실행하는 다른 CloudFormation 템플릿에 이러한 매개변수 값을 제공해야 합니다.VpcId
VPC의 ID입니다.
PublicSubnetIds
새 퍼블릭 서브넷의 ID입니다.
PrivateSubnetIds
새 프라이빗 서브넷의 ID입니다.
PublicRouteTableId
새 공용 경로 테이블 ID의 ID입니다.
13.10.2. AWS 로컬 영역에서 서브넷 생성
OpenShift Container Platform 클러스터에 대한 작업자 머신 세트를 구성하기 전에 AWS 로컬 영역에 서브넷을 생성해야 합니다.
작업자 노드를 배포할 각 로컬 영역에 대해 다음 프로세스를 반복해야 합니다.
제공된 CloudFormation 템플릿과 사용자 정의 매개변수 파일을 사용하여 서브넷을 나타내는 AWS 리소스 스택을 생성할 수 있습니다.
AWS 인프라를 생성하는 데 제공된 CloudFormation 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- AWS 계정을 구성했습니다.
-
aws 구성
을 실행하여 AWS 키와 리전을 로컬 AWS 프로필에 추가하셨습니다. - 로컬 영역 그룹을 선택했습니다.
프로세스
템플릿에 필요한 매개변수 값이 포함된 JSON 파일을 생성합니다.
[ { "ParameterKey": "VpcId", "ParameterValue": "<value_of_VpcId>" 1 }, { "ParameterKey": "PublicRouteTableId", "ParameterValue": "<value_of_PublicRouteTableId>" 2 }, { "ParameterKey": "ZoneName", "ParameterValue": "<value_of_ZoneName>" 3 }, { "ParameterKey": "SubnetName", "ParameterValue": "<value_of_SubnetName>" }, { "ParameterKey": "PublicSubnetCidr", "ParameterValue": "10.0.192.0/20" 4 } ]
- 1
- VPC ID를 지정합니다. 이는 CloudFormation 템플릿의 출력에서
VpcID
값인 VPC ID를 지정합니다. - 2
- VPC의 CloudFormation 스택에서
PublicRouteTableId
의 값인 Route Table ID를 지정합니다. - 3
- "AWS Local Zones" 섹션에서 검색한
AvailabilityZones
오브젝트의ZoneName
필드 값인 AWS 로컬 영역 이름을 지정합니다. - 4
- Local Zone 서브넷을 생성하는 데 사용되는 CIDR 블록을 지정합니다. 이 블록은 VPC CIDR 블록
VpcCidr
의 일부여야 합니다.
- 이 항목의 서브넷 섹션에 대한 CloudFormation 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에 YAML 파일로 저장합니다. 이 템플릿은 클러스터에 필요한 VPC를 설명합니다.
CloudFormation 템플릿을 시작하여 다음 명령을 실행하여 VPC를 나타내는 AWS 리소스 스택을 생성합니다.
중요명령은 한 줄로 입력해야 합니다.
$ aws cloudformation create-stack --stack-name <subnet_stack_name> \ 1 --template-body file://<template>.yaml \ 2 --parameters file://<parameters>.json 3
출력 예
arn:aws:cloudformation:us-east-1:123456789012:stack/<subnet_stack_name>/dbedae40-2fd3-11eb-820e-12a48460849f
다음 명령을 실행하여 템플릿 구성 요소가 있는지 확인합니다.
$ aws cloudformation describe-stacks --stack-name <subnet_stack_name>
StackStatus
에CREATE_COMPLETE
이 표시된 후 다음 매개변수의 출력 값이 표시됩니다. 클러스터를 생성하기 위해 실행하는 다른 CloudFormation 템플릿에 이러한 매개변수 값을 제공해야 합니다.PublicSubnetIds
새 퍼블릭 서브넷의 ID입니다.
13.10.3. VPC용 CloudFormation 템플릿
다음 CloudFormation 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 VPC를 배포할 수 있습니다.
예 13.2. VPC용 CloudFormation 템플릿
AWSTemplateFormatVersion: 2010-09-09 Description: Template for Best Practice VPC with 1-3 AZs Parameters: VpcCidr: AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24. Default: 10.0.0.0/16 Description: CIDR block for VPC. Type: String AvailabilityZoneCount: ConstraintDescription: "The number of availability zones. (Min: 1, Max: 3)" MinValue: 1 MaxValue: 3 Default: 1 Description: "How many AZs to create VPC subnets for. (Min: 1, Max: 3)" Type: Number SubnetBits: ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/19-27. MinValue: 5 MaxValue: 13 Default: 12 Description: "Size of each subnet to create within the availability zones. (Min: 5 = /27, Max: 13 = /19)" Type: Number Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: "Network Configuration" Parameters: - VpcCidr - SubnetBits - Label: default: "Availability Zones" Parameters: - AvailabilityZoneCount ParameterLabels: AvailabilityZoneCount: default: "Availability Zone Count" VpcCidr: default: "VPC CIDR" SubnetBits: default: "Bits Per Subnet" Conditions: DoAz3: !Equals [3, !Ref AvailabilityZoneCount] DoAz2: !Or [!Equals [2, !Ref AvailabilityZoneCount], Condition: DoAz3] Resources: VPC: Type: "AWS::EC2::VPC" Properties: EnableDnsSupport: "true" EnableDnsHostnames: "true" CidrBlock: !Ref VpcCidr PublicSubnet: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: !Select [0, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]] AvailabilityZone: !Select - 0 - Fn::GetAZs: !Ref "AWS::Region" PublicSubnet2: Type: "AWS::EC2::Subnet" Condition: DoAz2 Properties: VpcId: !Ref VPC CidrBlock: !Select [1, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]] AvailabilityZone: !Select - 1 - Fn::GetAZs: !Ref "AWS::Region" PublicSubnet3: Type: "AWS::EC2::Subnet" Condition: DoAz3 Properties: VpcId: !Ref VPC CidrBlock: !Select [2, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]] AvailabilityZone: !Select - 2 - Fn::GetAZs: !Ref "AWS::Region" InternetGateway: Type: "AWS::EC2::InternetGateway" GatewayToInternet: Type: "AWS::EC2::VPCGatewayAttachment" Properties: VpcId: !Ref VPC InternetGatewayId: !Ref InternetGateway PublicRouteTable: Type: "AWS::EC2::RouteTable" Properties: VpcId: !Ref VPC PublicRoute: Type: "AWS::EC2::Route" DependsOn: GatewayToInternet Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway PublicSubnetRouteTableAssociation: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PublicSubnet RouteTableId: !Ref PublicRouteTable PublicSubnetRouteTableAssociation2: Type: "AWS::EC2::SubnetRouteTableAssociation" Condition: DoAz2 Properties: SubnetId: !Ref PublicSubnet2 RouteTableId: !Ref PublicRouteTable PublicSubnetRouteTableAssociation3: Condition: DoAz3 Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PublicSubnet3 RouteTableId: !Ref PublicRouteTable PrivateSubnet: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VPC CidrBlock: !Select [3, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]] AvailabilityZone: !Select - 0 - Fn::GetAZs: !Ref "AWS::Region" PrivateRouteTable: Type: "AWS::EC2::RouteTable" Properties: VpcId: !Ref VPC PrivateSubnetRouteTableAssociation: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PrivateSubnet RouteTableId: !Ref PrivateRouteTable NAT: DependsOn: - GatewayToInternet Type: "AWS::EC2::NatGateway" Properties: AllocationId: "Fn::GetAtt": - EIP - AllocationId SubnetId: !Ref PublicSubnet EIP: Type: "AWS::EC2::EIP" Properties: Domain: vpc Route: Type: "AWS::EC2::Route" Properties: RouteTableId: Ref: PrivateRouteTable DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: Ref: NAT PrivateSubnet2: Type: "AWS::EC2::Subnet" Condition: DoAz2 Properties: VpcId: !Ref VPC CidrBlock: !Select [4, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]] AvailabilityZone: !Select - 1 - Fn::GetAZs: !Ref "AWS::Region" PrivateRouteTable2: Type: "AWS::EC2::RouteTable" Condition: DoAz2 Properties: VpcId: !Ref VPC PrivateSubnetRouteTableAssociation2: Type: "AWS::EC2::SubnetRouteTableAssociation" Condition: DoAz2 Properties: SubnetId: !Ref PrivateSubnet2 RouteTableId: !Ref PrivateRouteTable2 NAT2: DependsOn: - GatewayToInternet Type: "AWS::EC2::NatGateway" Condition: DoAz2 Properties: AllocationId: "Fn::GetAtt": - EIP2 - AllocationId SubnetId: !Ref PublicSubnet2 EIP2: Type: "AWS::EC2::EIP" Condition: DoAz2 Properties: Domain: vpc Route2: Type: "AWS::EC2::Route" Condition: DoAz2 Properties: RouteTableId: Ref: PrivateRouteTable2 DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: Ref: NAT2 PrivateSubnet3: Type: "AWS::EC2::Subnet" Condition: DoAz3 Properties: VpcId: !Ref VPC CidrBlock: !Select [5, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]] AvailabilityZone: !Select - 2 - Fn::GetAZs: !Ref "AWS::Region" PrivateRouteTable3: Type: "AWS::EC2::RouteTable" Condition: DoAz3 Properties: VpcId: !Ref VPC PrivateSubnetRouteTableAssociation3: Type: "AWS::EC2::SubnetRouteTableAssociation" Condition: DoAz3 Properties: SubnetId: !Ref PrivateSubnet3 RouteTableId: !Ref PrivateRouteTable3 NAT3: DependsOn: - GatewayToInternet Type: "AWS::EC2::NatGateway" Condition: DoAz3 Properties: AllocationId: "Fn::GetAtt": - EIP3 - AllocationId SubnetId: !Ref PublicSubnet3 EIP3: Type: "AWS::EC2::EIP" Condition: DoAz3 Properties: Domain: vpc Route3: Type: "AWS::EC2::Route" Condition: DoAz3 Properties: RouteTableId: Ref: PrivateRouteTable3 DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: Ref: NAT3 S3Endpoint: Type: AWS::EC2::VPCEndpoint Properties: PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: '*' Action: - '*' Resource: - '*' RouteTableIds: - !Ref PublicRouteTable - !Ref PrivateRouteTable - !If [DoAz2, !Ref PrivateRouteTable2, !Ref "AWS::NoValue"] - !If [DoAz3, !Ref PrivateRouteTable3, !Ref "AWS::NoValue"] ServiceName: !Join - '' - - com.amazonaws. - !Ref 'AWS::Region' - .s3 VpcId: !Ref VPC Outputs: VpcId: Description: ID of the new VPC. Value: !Ref VPC PublicSubnetIds: Description: Subnet IDs of the public subnets. Value: !Join [ ",", [!Ref PublicSubnet, !If [DoAz2, !Ref PublicSubnet2, !Ref "AWS::NoValue"], !If [DoAz3, !Ref PublicSubnet3, !Ref "AWS::NoValue"]] ] PrivateSubnetIds: Description: Subnet IDs of the private subnets. Value: !Join [ ",", [!Ref PrivateSubnet, !If [DoAz2, !Ref PrivateSubnet2, !Ref "AWS::NoValue"], !If [DoAz3, !Ref PrivateSubnet3, !Ref "AWS::NoValue"]] ] PublicRouteTableId: Description: Public Route table ID Value: !Ref PublicRouteTable
13.10.4. AWS 보안 그룹
기본적으로 설치 프로그램은 보안 그룹을 생성하고 컨트롤 플레인 및 컴퓨팅 시스템에 연결합니다. 기본 보안 그룹과 연결된 규칙은 수정할 수 없습니다.
그러나 기존 VPC와 연결된 기존 AWS 보안 그룹을 컨트롤 플레인 및 컴퓨팅 머신에 적용할 수 있습니다. 사용자 지정 보안 그룹을 적용하면 이러한 시스템의 수신 또는 발신 트래픽을 제어해야 하는 경우 조직의 보안 요구 사항을 충족하는 데 도움이 될 수 있습니다.
설치 프로세스의 일부로 클러스터를 배포하기 전에 install-config.yaml
파일을 수정하여 사용자 지정 보안 그룹을 적용합니다.
자세한 내용은 "Edge 컴퓨팅 풀 및 AWS Local Zones"를 참조하십시오.
13.10.5. AWS 로컬 영역을 사용하는 서브넷의 CloudFormation 템플릿
다음 CloudFormation 템플릿을 사용하여 AWS Local Zones를 사용하는 OpenShift Container Platform 클러스터에 필요한 서브넷을 배포할 수 있습니다.
예 13.3. 서브넷용 CloudFormation 템플릿
# CloudFormation template used to create Local Zone subnets and dependencies AWSTemplateFormatVersion: 2010-09-09 Description: Template for create Public Local Zone subnets Parameters: VpcId: Description: VPC Id Type: String ZoneName: Description: Local Zone Name (Example us-east-1-nyc-1a) Type: String SubnetName: Description: Local Zone Name (Example cluster-public-us-east-1-nyc-1a) Type: String PublicRouteTableId: Description: Public Route Table ID to associate the Local Zone subnet Type: String PublicSubnetCidr: AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$ ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24. Default: 10.0.128.0/20 Description: CIDR block for Public Subnet Type: String Resources: PublicSubnet: Type: "AWS::EC2::Subnet" Properties: VpcId: !Ref VpcId CidrBlock: !Ref PublicSubnetCidr AvailabilityZone: !Ref ZoneName Tags: - Key: Name Value: !Ref SubnetName - Key: kubernetes.io/cluster/unmanaged Value: "true" PublicSubnetRouteTableAssociation: Type: "AWS::EC2::SubnetRouteTableAssociation" Properties: SubnetId: !Ref PublicSubnet RouteTableId: !Ref PublicRouteTableId Outputs: PublicSubnetIds: Description: Subnet IDs of the public subnets. Value: !Join ["", [!Ref PublicSubnet]]
추가 리소스
- AWS CloudFormation 콘솔로 이동하여 생성하는 CloudFormation 스택에 대한 세부 정보를 볼 수 있습니다.
13.10.6. AWS 로컬 영역 서브넷을 사용하도록 설치 구성 파일 수정
AWS 로컬 영역 서브넷을 포함하도록 install-config.yaml
파일을 수정합니다.
사전 요구 사항
- "AWS 로컬 영역에서 서브넷 생성" 절차를 사용하여 서브넷을 생성했습니다.
-
"설치 구성 파일 생성" 절차를 사용하여
install-config.yaml
파일을 생성했습니다.
프로세스
다음 예와 같이
platform.aws.subnets
속성에 로컬 영역 서브넷을 지정하여install-config.yaml
구성 파일을 수정합니다.... platform: aws: region: us-west-2 subnets: 1 - publicSubnetId-1 - publicSubnetId-2 - publicSubnetId-3 - privateSubnetId-1 - privateSubnetId-2 - privateSubnetId-3 - publicSubnetId-LocalZone-1 ...
- 1
- 가용성 및 로컬 영역에서 생성된 서브넷 목록입니다.
추가 리소스
- AWS 프로필 및 인증 정보 구성에 대한 자세한 내용은 AWS 문서의 구성 및 인증 정보 파일 설정을 참조하십시오.