Cloud/AWS

EKS 클러스터 구성

beomzh 2023. 7. 18. 13:10
728x90
반응형

사전준비

1.Bastion 서버 접속

1-1 적절한 사용자 권한이 있는 계정

(AutoScalingRole 생성 조회,CloudFormation 생성 권한 )

 

2.AWS 프로파일 설정

2-1 --profile 옵션을 인식할 있게 신규 구성 클러스터에 대한 프로파일 등록

2-2 vi ~/.aws/config 에서 프로파일 추가

[profile [계정명]]

role_arn = [arn정보]

source_profile = security

region = ap-northeast-2

output = json

 

CLI 설정 확인법

aws sts get-caller-identity --profile [계정명] 명령어 실행시 JSON형태의 UserId,Accout,Arn 정보가 보이면 정상

 

3.AWS 명령어 이용 endpoint 오류가 나는 경우,외부 망과 연결된 계정으로 proxy 설정을 해준다.

3-1 프록시 설정법

export proxy=[ip주소:port번호]

export https_proxy=$proxy

export http_proxy=$proxy

 

KMS 설정

1.AutoScaling Role 생성되어 있는지 확인 생성

확인

aws iam get-role-name AWSServiceRoleForAutoScaling --profile [계정명]

생성

aws iam create-service-linked-role --aws-service-name autoscaling.amazonaws.com --profile [계정명]

 

2.AutoScaling Role을 계정 역할 부여

key -id : AWS 콘손 ->KMS ->Customer managed keys에서 이름 검색

  • AWS Role 적용해 상태면 콘솔에서 role 해제해야 key 보임

 

해제방법 : AWS 콘솔 우측 상단 role 이름 클릭 -> back to 본인 계정

--grantee-principal arn:aws:iam  (다음 콜론 두개주의)

--profile [계정명]

 

클러스터 생성

1.  ClusterConfig.yaml 명세 작성

-문서에서 붉은 표시된 부분 알맞게 수정

.vpc.subnets : AWS 콘솔의 VPC/Subnets 에서 app 포함된 서브넷의 ID(2)

.managedNodeGroups.ami : Cloud TA 부터 받은 AMI ID

.managedNodeGroups.volumeKmsKeyID : Cloud TA 부터 받은 KMS

.managedNodeGroups.ssh.publicKeyName : Cloud TA 부터 받은 keypair

.managedNodeGroups.ssh.overrideBootstrapCommand : 이하는 단계에서 수정 X

Bootstrap 부분은 추후 AMI 이미지로 이동해 설정할 필요가 없어질 예정

taml 에서 CLUSTER_NAME= AAA처럼 값과 = 사이에 띄어쓰기가 있으면 오류가 발생하므로 주의한다.

 

2. 클러스터 생성

eksctl create nodegroup -f config.yaml --profile [계정명]

 

생성 정상 확인

: 콘솔 EKS ->Cluster ->clusterName ->Configuration->Compute 에서 Status = Active

 

만약!

EKS ->Clusters ->Health Issues 에서 워커 노드 Join 안되었다는 메시지가 나오면 worker node 접속후

  • ps -ef | grep kubelet 명령어로 정상 실행중인지 체크
  • kubelt config 값이 정상적용인지 확인
  • journalctl -u kubelet 명령어로 kubelet 로그 확인

 

오류가 발생해 워커 노드를 다시 만들때 CloudFormation 에서 기존 생성 중인 항목을 삭제해주고, 다시

eksctl create nodegroup 명령어를 실행해야 한다.

 

3. IAM Switch 역할 권한 추가해주기

sdev 환경의 jenkins, admin, swa 역할 권한 추가

 

4. 개발자 권한 부여 수행

  • ClusterRole, ClusterRoleBinding 오브젝트를 생성해 읽기 권한(get, list) 부여한다

 

5. endpoint 설정 public/private ->private 권한 변경

5-1 CLI 방법

  • aws eks update-cluster-config --name [clusterName] --resources-vpc-config endpointPublicAccess=false, endpointPrivateAccess=true --profile [계정명]

5-2 웹콘솔 방법

  • 콘솔 EKS ->Clusters ->ClusterName ->Networking ->Manage Networking에서 public and private Private으로 변경

 

6 kubectl 연결 alias 설정

  • 처음 접속시에는 aws eks update 명령어 실행
  • kubectl config user-context 매번 컨텍스트를 입력하기 번거로우므로 alias 설정
      • vi ~/.bashrc 에서 항목추가
        • alias [이름] = "kubectl config use-context arn:aws:ap-northeast-2:[AccountID]:cluster/[ClusterName]"
      • source ~/.bashrc 적용
        • 작업시 항상 context 스위칭해 실수로 다른 환경에서 작업하지 않도록 주의
        • kubectl config current-context 명령으로 현재 context 확인할 있다.

 

7 기본 컨테이너 추가 설치

필요시 Amazon ECR에서 이미지 다운

 

Secondary IP 설정

1. 태그수정

  • VPC -Subnets -이름에 k8s 포함된 SubnetID 클릭 (secondary subnet) - Tags에서 아래 태그 추가
  • k8s 포함된 서브넷 둘다 수정해 주어야 한다.
key value
kubernetes.io/cluster/[ClusterName] shared

2. 환경 변수 설정

  • kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true

 

3. AWS 콘솔 -EC2 - '-node' 끝나는 인스턴스 Terminate

 

4. ENIConfig 추가

name: [Name]

subnet: VPC - Subnets -k8s 포함된 항목 ( ENIConfig 하나씩)

securityGroup: AWS 콘솔 -EC2 -'-node' 끝나는 인스턴스 -Security 탭의 Security Groups 아래 sg- 시작하는 항목 ( ENIConfig )

 

5. 다시 환경 변수 설정

  • kubectl set env daemonset aws-node-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone
  • 확인 방법
    • kubectl get po -o wide -n kube-system
    • kube-proxy aws-node Pod 제외하고 나머지 Pod IP Secondary IP 대역으로 바뀌었는지 확인

 

Istio 설치

1. 설치 준비

  • VPC -Subnets 이름에 app 포함된 SubnetID클릭 (primary subnet) -Tags 에서 아래 태그추가
  • app 포함된 서브넷 수정해야 한다.
key value
kubernetes.io/cluster/[ClusterName] shared
kubernetes.io/role/internal-elb 1

2. Istio yaml 명세 수정

  • 별첨의 istio manifest yaml 파일을 수정한다.
    • .spec.hub: AWS ECR 경로로 수정 (share 역할로 스위칭 상태) AWS 콘솔 -ECR -ecr-cm-share-nuis/istio 검색  - URL 경로 확인
  • 설정한 매니페스트 파일로 Istio 설치
    • istioctl install -f [manifest파일명]
  • 태그 수정 없이 생성시 대처법
    • istio-gateway 서비스 제거
      • kubectl delete svc istio-ingressgateway -n istio-system
    • tag 수정
    • istioctl install -f [manifest파일명]
728x90
반응형

'Cloud > AWS' 카테고리의 다른 글

API를 통한 AWS 접근설정  (0) 2023.07.26
eksctl  (0) 2023.07.18
KMS(Key Management Service)  (0) 2023.07.18
EKS(Elastic Kubernetes Service)  (0) 2023.07.18