AWS에 대한 관리 클러스터 구성

클러스터 구성 파일을 생성하려면 이전 배포에 대한 기존 구성 파일을 AWS(Amazon Web Services)에 복사하여 업데이트할 수 있습니다. 또는 빈 템플릿을 사용하여 파일을 처음부터 생성할 수 있습니다.

관리 클러스터 구성 템플릿

아래 템플릿에는 AWS에서 관리 클러스터를 배포하는 것과 관련된 모든 옵션이 포함되어 있습니다. 이 템플릿을 복사하여 관리 클러스터를 AWS에 배포하도록 사용할 수 있습니다.

  • 모든 대상 플랫에 공통되는 설정을 업데이트하는 방법에 대한 자세한 내용은 관리 클러스터 구성 파일 생성을 참조하십시오.

  • 모든 구성 파일 변수에 대한 자세한 내용은 Tanzu CLI 구성 파일 변수 참조를 참조하십시오.

  • vSphere 설정을 구성하는 방법에 대한 예는 템플릿 아래의 섹션을 참조하십시오.

필수 옵션의 주석 처리를 제거했습니다. 선택 사항 설정을 주석 처리했습니다. 기본값은 해당되는 경우 포함됩니다.

#! ---------------------------------------------------------------------
#! Basic cluster creation configuration
#! ---------------------------------------------------------------------

CLUSTER_NAME:
CLUSTER_PLAN: dev
INFRASTRUCTURE_PROVIDER: aws
# CLUSTER_API_SERVER_PORT:
ENABLE_CEIP_PARTICIPATION: true
ENABLE_AUDIT_LOGGING: true
CLUSTER_CIDR: 100.96.0.0/11
SERVICE_CIDR: 100.64.0.0/13
# CAPBK_BOOTSTRAP_TOKEN_TTL: 30m

#! ---------------------------------------------------------------------
#! Node configuration
#! AWS-only MACHINE_TYPE settings override cloud-agnostic SIZE settings.
#! ---------------------------------------------------------------------

# SIZE:
# CONTROLPLANE_SIZE:
# WORKER_SIZE:
CONTROL_PLANE_MACHINE_TYPE: t3.large
NODE_MACHINE_TYPE: m5.large
# OS_NAME: ""
# OS_VERSION: ""
# OS_ARCH: ""

#! ---------------------------------------------------------------------
#! AWS configuration
#! ---------------------------------------------------------------------

AWS_REGION:
AWS_NODE_AZ: ""
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
AWS_SSH_KEY_NAME:
BASTION_HOST_ENABLED: true
# AWS_NODE_AZ_1: ""
# AWS_NODE_AZ_2: ""
# AWS_VPC_ID: ""
# AWS_PRIVATE_SUBNET_ID: ""
# AWS_PUBLIC_SUBNET_ID: ""
# AWS_PUBLIC_SUBNET_ID_1: ""
# AWS_PRIVATE_SUBNET_ID_1: ""
# AWS_PUBLIC_SUBNET_ID_2: ""
# AWS_PRIVATE_SUBNET_ID_2: ""
# AWS_PRIVATE_NODE_CIDR: 10.0.0.0/24
# AWS_PUBLIC_NODE_CIDR: 10.0.1.0/24
# AWS_PRIVATE_NODE_CIDR_1: 10.0.2.0/24
# AWS_PUBLIC_NODE_CIDR_1: 10.0.3.0/24
# AWS_PRIVATE_NODE_CIDR_2: 10.0.4.0/24
# AWS_PUBLIC_NODE_CIDR_2: 10.0.5.0/24
# AWS_SECURITY_GROUP_BASTION: sg-12345
# AWS_SECURITY_GROUP_CONTROLPLANE: sg-12346
# AWS_SECURITY_GROUP_APISERVER_LB: sg-12347
# AWS_SECURITY_GROUP_NODE: sg-12348
# AWS_SECURITY_GROUP_LB: sg-12349
# DISABLE_TMC_CLOUD_PERMISSIONS: false # Deactivates IAM permissions required for TMC enablement

#! ---------------------------------------------------------------------
#! Image repository configuration
#! ---------------------------------------------------------------------

# TKG_CUSTOM_IMAGE_REPOSITORY: ""
# TKG_CUSTOM_IMAGE_REPOSITORY_CA_CERTIFICATE: ""

#! ---------------------------------------------------------------------
#! Proxy configuration
#! ---------------------------------------------------------------------

# TKG_HTTP_PROXY: ""
# TKG_HTTPS_PROXY: ""
# TKG_NO_PROXY: ""

#! ---------------------------------------------------------------------
#! Machine Health Check configuration
#! ---------------------------------------------------------------------

ENABLE_MHC:
ENABLE_MHC_CONTROL_PLANE: true
ENABLE_MHC_WORKER_NODE: true
MHC_UNKNOWN_STATUS_TIMEOUT: 5m
MHC_FALSE_STATUS_TIMEOUT: 12m

#! ---------------------------------------------------------------------
#! Identity management configuration
#! ---------------------------------------------------------------------

IDENTITY_MANAGEMENT_TYPE: "none"

#! Settings for IDENTITY_MANAGEMENT_TYPE: "oidc"
# CERT_DURATION: 2160h
# CERT_RENEW_BEFORE: 360h
# OIDC_IDENTITY_PROVIDER_CLIENT_ID:
# OIDC_IDENTITY_PROVIDER_CLIENT_SECRET:
# OIDC_IDENTITY_PROVIDER_GROUPS_CLAIM: groups
# OIDC_IDENTITY_PROVIDER_ISSUER_URL:
# OIDC_IDENTITY_PROVIDER_SCOPES: "email,profile,groups"
# OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM: email

#! The following two variables are used to configure Pinniped JWTAuthenticator for workload clusters
# SUPERVISOR_ISSUER_URL:
# SUPERVISOR_ISSUER_CA_BUNDLE_DATA:

#! Settings for IDENTITY_MANAGEMENT_TYPE: "ldap"
# LDAP_BIND_DN:
# LDAP_BIND_PASSWORD:
# LDAP_HOST:
# LDAP_USER_SEARCH_BASE_DN:
# LDAP_USER_SEARCH_FILTER:
# LDAP_USER_SEARCH_USERNAME: userPrincipalName
# LDAP_USER_SEARCH_ID_ATTRIBUTE: DN
# LDAP_USER_SEARCH_EMAIL_ATTRIBUTE: DN
# LDAP_USER_SEARCH_NAME_ATTRIBUTE:
# LDAP_GROUP_SEARCH_BASE_DN:
# LDAP_GROUP_SEARCH_FILTER:
# LDAP_GROUP_SEARCH_USER_ATTRIBUTE: DN
# LDAP_GROUP_SEARCH_GROUP_ATTRIBUTE:
# LDAP_GROUP_SEARCH_NAME_ATTRIBUTE: cn
# LDAP_ROOT_CA_DATA_B64:

#! ---------------------------------------------------------------------
#! Antrea CNI configuration
#! ---------------------------------------------------------------------

# ANTREA_NO_SNAT: true
# ANTREA_NODEPORTLOCAL: true
# ANTREA_NODEPORTLOCAL_ENABLED: true
# ANTREA_NODEPORTLOCAL_PORTRANGE: 61000-62000
# ANTREA_TRAFFIC_ENCAP_MODE: "encap"
# ANTREA_PROXY: true
# ANTREA_PROXY_ALL: true
# ANTREA_PROXY_LOAD_BALANCER_IPS: false
# ANTREA_PROXY_NODEPORT_ADDRS:
# ANTREA_PROXY_SKIP_SERVICES: ""
# ANTREA_POLICY: true
# ANTREA_TRACEFLOW: true
# ANTREA_DISABLE_UDP_TUNNEL_OFFLOAD: false
# ANTREA_ENABLE_USAGE_REPORTING: false
# ANTREA_EGRESS: true
# ANTREA_EGRESS_EXCEPT_CIDRS: ""
# ANTREA_FLOWEXPORTER: false
# ANTREA_FLOWEXPORTER_COLLECTOR_ADDRESS: "flow-aggregator.flow-aggregator.svc:4739:tls"
# ANTREA_FLOWEXPORTER_POLL_INTERVAL: "5s"
# ANTREA_FLOWEXPORTER_ACTIVE_TIMEOUT: "5s"
# ANTREA_FLOWEXPORTER_IDLE_TIMEOUT: "15s"
# ANTREA_IPAM: false
# ANTREA_KUBE_APISERVER_OVERRIDE: ""
# ANTREA_MULTICAST: false
# ANTREA_MULTICAST_INTERFACES: ""
# ANTREA_NETWORKPOLICY_STATS: true
# ANTREA_SERVICE_EXTERNALIP: true
# ANTREA_TRANSPORT_INTERFACE: ""
# ANTREA_TRANSPORT_INTERFACE_CIDRS: ""

AWS 연결 설정

AWS 계정과 클러스터를 배포할 지역과 가용성 영역의 정보를 입력하려면 다음 중 하나를 수행합니다.

  • (권장) AWS CLI를 사용하여 AWS 자격 증명 프로필을 구성하고 환경 변수 AWS_PROFILE을 부트스트랩 시스템의 프로필 이름으로 설정합니다.

  • 클러스터 구성 파일에 계정 자격 증명 및 기타 정보를 포함합니다. 예:

    AWS_REGION: eu-west-1
    AWS_NODE_AZ: "eu-west-1a"
    # Only use AWS_PROFILE OR combination of AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, but not both.
    AWS_PROFILE: tkg
    # AWS_ACCESS_KEY_ID:  <encoded:QUtJQVQ[...]SU82TTM=>
    # AWS_SECRET_ACCESS_KEY: <encoded:eGN4RHJmLzZ[...]SR08yY2ticQ==>
    AWS_SSH_KEY_NAME: default
    BASTION_HOST_ENABLED: true
    
    • AWS_PROFILE 또는 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 조합만 사용하며, 둘 다 사용할 수는 없습니다.
    • AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 값은 base64로 인코딩되어야 합니다.

API 서버에 내부 로드 밸런서 사용

기본적으로 Tanzu Kubernetes Grid on AWS는 관리 클러스터의 Kubernetes API 서버에 공용 로드 밸런서를 생성합니다.

에어갭 또는 프록시와 같은 인터넷 제한 환경의 경우 클러스터 구성 파일에서 AWS_LOAD_BALANCER_SCHEME_INTERNALtrue로 설정하여 공용 로드 밸런서를 생성하지 않도록 할 수 있습니다.

AWS_LOAD_BALANCER_SCHEME_INTERNAL: true

이 설정은 내부 체계를 사용하도록 관리 클러스터의 로드 밸런서를 사용자 지정합니다. 즉, Kubernetes API 서버에 액세스할 수 없으며 인터넷을 통해 라우팅되지 않습니다.

노드 크기 구성

Tanzu CLI는 구성 파일에 입력하는 설정에 따라 워크로드 클러스터의 개별 노드를 생성합니다. AWS에서 모든 노드 VM이 미리 정의된 동일한 구성을 가지도록 구성하거나 제어부와 Worker 노드에 미리 정의된 다른 구성을 설정할 수 있습니다. 이러한 설정을 사용하여 관리 클러스터 노드에 구성이 서로 다른 노드가 있는 Tanzu Kubernetes 클러스터를 생성할 수 있습니다. 제어부 노드와 Worker 노드의 구성이 다른 클러스터를 생성할 수도 있습니다.

관리 클러스터를 생성하면 노드 시스템의 인스턴스 유형이 CONTROL_PLANE_MACHINE_TYPENODE_MACHINE_TYPE 옵션에 설정됩니다. 기본적으로 이러한 설정은 워크로드 클러스터에도 사용됩니다. 최소 구성은 CPU 2개와 8GB 메모리입니다. 호환되는 인스턴스 유형 목록은 지역에 따라 다릅니다.

CONTROL_PLANE_MACHINE_TYPE: "t3.large"
NODE_MACHINE_TYPE: "m5.large"

SIZE, CONTROLPLANE_SIZE, WORKER_SIZE 옵션을 사용하여 이러한 설정을 재정의할 수 있습니다. 모든 제어부 및 Worker 노드 VM의 크기가 동일한 Tanzu Kubernetes 클러스터를 생성하려면 SIZE 변수를 지정합니다. SIZE 변수를 설정하면 모든 노드가 사용자가 설정한 구성으로 생성됩니다. Amazon EC2용 다양한 크기의 노드 인스턴스 구성에 대한 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하십시오.

SIZE: "t3.large"

제어부 및 Worker 노드 VM의 크기가 다른 워크로드 클러스터를 생성하려면 CONTROLPLANE_SIZEWORKER_SIZE 옵션을 지정합니다.

CONTROLPLANE_SIZE: "t3.large"
WORKER_SIZE: "m5.xlarge"

CONTROLPLANE_SIZEWORKER_SIZE 옵션을 SIZE 옵션과 결합할 수 있습니다. 예를 들어 SIZE: "t3.large"WORKER_SIZE: "m5.xlarge"와 함께 지정하면 제어부 노드는 t3.large로 설정되고 Worker 노드는 m5.xlarge로 설정됩니다.

SIZE: "t3.large"
WORKER_SIZE: "m5.xlarge"

VPC 구성

다음 행의 주석 처리를 제거하고 업데이트하여 독립형 관리 클러스터에서 호스팅하고 사용할 VPC 및 기타 AWS 인프라를 지정합니다.

AWS_REGION:
AWS_NODE_AZ:
AWS_PRIVATE_SUBNET_ID:
AWS_PUBLIC_SUBNET_ID:
AWS_SSH_KEY_NAME:
AWS_VPC_ID:
BASTION_HOST_ENABLED:
CONTROL_PLANE_MACHINE_TYPE:
NODE_MACHINE_TYPE:
SERVICE_CIDR:
CLUSTER_CIDR:

운영 관리 클러스터를 배포하는 경우 주석 처리를 제거하고 두 개의 제어부 노드에 다음을 입력합니다.

AWS_NODE_AZ_1:
AWS_NODE_AZ_2:
AWS_PRIVATE_SUBNET_ID_1:
AWS_PRIVATE_SUBNET_ID_2:
AWS_PUBLIC_SUBNET_ID_1:
AWS_PUBLIC_SUBNET_ID_2:

예를 들어 기존 VPC의 프로덕션 관리 클러스터 구성은 다음과 같을 수 있습니다.

AWS_REGION: us-west-2
AWS_NODE_AZ: us-west-2a
AWS_NODE_AZ_1: us-west-2b
AWS_NODE_AZ_2: us-west-2c
AWS_PRIVATE_SUBNET_ID: subnet-ID
AWS_PRIVATE_SUBNET_ID_1: subnet-ID
AWS_PRIVATE_SUBNET_ID_2: subnet-ID
AWS_PUBLIC_SUBNET_ID: subnet-ID
AWS_PUBLIC_SUBNET_ID_1: subnet-ID
AWS_PUBLIC_SUBNET_ID_2: subnet-ID
AWS_SSH_KEY_NAME: tkg
AWS_VPC_ID: vpc-ID
BASTION_HOST_ENABLED: "true"
CONTROL_PLANE_MACHINE_TYPE: m5.large
NODE_MACHINE_TYPE: m5.large
SERVICE_CIDR: 100.64.0.0/13
CLUSTER_CIDR: 100.96.0.0/11

기본적으로 Tanzu Kubernetes Grid는 제어부, Worker 노드, 로드 밸런서를 연결하기 위해 새 보안 그룹을 생성합니다. 사용자 지정 규칙이 필요한 경우 아래에 설명된 대로 보안 그룹을 미리 프로비저닝하고, 규칙 집합을 추가하고, 사용자 지정 보안 그룹을 사용하도록 클러스터를 구성할 수 있습니다.

사용자 지정 보안 그룹 구성

기본적으로 Tanzu Kubernetes Grid VPC 내에 5개의 보안 그룹을 생성합니다.

Tanzu Kubernetes Grid가 새 보안 그룹을 생성하지 못하게 하고 사용자 지정 규칙 집합과 함께 미리 프로비저닝된 기존 보안 그룹을 사용하려면 다음을 수행합니다.

  • 사용자 지정 규칙 집합을 사용하여 보안 그룹을 생성하고 기본 규칙 집합을 가능한 한 가깝게 일치합니다.
  • AWS_SECURITY_GROUP_* 변수를 보안 그룹 이름으로 설정하여 클러스터 구성 파일에서 사용자 지정 보안 그룹을 지정합니다. 예:

    AWS_SECURITY_GROUP_BASTION: sg-12345
    

5개의 보안 그룹, 기본 규칙, 해당 클러스터 구성 변수가 아래에 나열되어 있습니다.

  • 그룹: CLUSTER-NAME-bastion

    클러스터 구성 변수 AWS_SECURITY_GROUP_BASTION와 함께 설정합니다.

    규칙:

    설명 프로토콜 포트에서 포트로 다음에서 수신 허용 필수
    SSH TCP 22 22 0.0.0.0/0 아니요
  • 그룹: CLUSTER-NAME-node

    클러스터 구성 변수 AWS_SECURITY_GROUP_NODE와 함께 설정합니다.

    규칙:

    설명 프로토콜 포트에서 포트로 다음에서 수신 허용 필수
    SSH TCP 22 22 보안 그룹 <cluster-name>-bastion 아니요
    노드 포트 서비스 TCP 30000 32767 0.0.0.0/0 아니요(아래 참고 사항 참조)
    Kubelet API TCP 10250 10250 보안 그룹 <cluster-name>-controlplane 및 <cluster-name>-node
    Antrea CNI TCP 10349-10351 10349-10351 보안 그룹 <cluster-name>-node
    GENEVE UDP 6081 6081 보안 그룹 <cluster-name>-node
    참고

    0.0.0.0/0은 VPC, 피어링된 VPC 및 VPN 또는 DirectConnect를 통해 연결된 모든 네트워크에서만 인바운드입니다. 0.0.0.0/0은 인터넷에 액세스할 수 있는 것으로 해석되어서는 안 됩니다. 관리자가 클러스터의 작동에 사용되지 않는 한 노드 포트 서비스의 포트 범위와 수신 규칙을 모두 변경할 수 있습니다.

  • 그룹: CLUSTER-NAME-controlplane

    클러스터 구성 변수 AWS_SECURITY_GROUP_CONTROLPLANE와 함께 설정합니다.

    규칙:

    설명 프로토콜 포트에서 포트로 다음에서 수신 허용 필수
    SSH TCP 22 22 보안 그룹 <cluster-name>-bastion 아니요
    Kubernetes API TCP 6443* 6443* 보안 그룹 <cluster-name>-apiserver-lb, <cluster-name>-apiserver-controlplane, <cluster-name>-apiserver-node
    etcd TCP 2379 2379 보안 그룹 <cluster-name>-controlplane
    etcd 피어 TCP 2380 2380 보안 그룹 <cluster-name>-controlplane
    addons-manager TCP 9865 9865 보안 그룹 <cluster-name>-controlplane
    kapp-controller TCP 10100 10100 보안 그룹 <cluster-name>-controlplane

    * CLUSTER_API_SERVER_PORT를 설정한 경우 6443 변수에 설정한 포트 번호로 바꿉니다.

  • 그룹: CLUSTER-NAME-apiserver-lb

    클러스터 구성 변수 AWS_SECURITY_GROUP_APISERVER_LB와 함께 설정합니다.

    규칙:

    설명 프로토콜 포트에서 포트로 다음에서 수신 허용 필수
    Kubernetes API TCP 6443* 6443* 0.0.0.0/0 아니요(아래 참고 사항 참조)

    * CLUSTER_API_SERVER_PORT를 설정한 경우 6443 변수에 설정한 포트 번호로 바꿉니다.

    참고

    기본적으로 0.0.0.0/0 규칙은 로드 밸런서를 내부적으로 프로비저닝하도록 지정되지 않은 경우 인터넷에 액세스할 수 있습니다. 로드 밸런서가 내부인 경우 관리 클러스터(워크로드 클러스터용) 또는 부트스트랩 시스템(관리 클러스터용)에서 액세스할 수 있어야 합니다. 이 규칙은 잠글 수 있지만 이 경우 다음 규칙을 추가해야 합니다.

    설명 프로토콜 포트에서 포트로 다음에서 수신 허용 필수
    클러스터의 Kubernetes API TCP 6443* 6443* 보안 그룹 <cluster-name>-controlplane 및 <cluster-name>-node

    * CLUSTER_API_SERVER_PORT를 설정한 경우 6443 변수에 설정한 포트 번호로 바꿉니다.

  • 그룹: CLUSTER-NAME-lb

    클러스터 구성 변수 AWS_SECURITY_GROUP_LB와 함께 설정합니다.

    이 보안 그룹은 워크로드 로드 밸런서에 사용됩니다. 이 보안 그룹에 추가된 규칙이 없으며 AWS 관리자는 애플리케이션 워크로드에 필요한 대로 규칙 집합을 사용자 지정해야 합니다.

후속 작업

관리 클러스터 구성 파일 업데이트를 완료한 후 구성 파일에서 관리 클러스터 배포 지침에 따라 관리 클러스터를 생성합니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon