AWS EKS 안에서 LB (Service, Ingress) 생성 및 사용을 위해서는 LB Controller (LBC) 를 설치 해야 한다

 

→ 기본적으로 LBC 가 없어도 LB 생성은 가능하나, AWS 에서 제공하는 ALB 및 추가 옵션들을 사용하기 위해서는 LBC 가 있어야 한다.

→  AWS 에서는 EKS 에내장된 툴을 사용하여 LB 생성 및 사용을 권장하지 않고, 사용자가 LBC 를 설치해서 사용하는것을 권장 한다

 

순서 요약

1. EKS 에 대한 OIDC 생성

2. LBC 생성을 위한 IAM role, policy 생성

3. LBC Install

4. 설치 확인


상세 내용

 

1. EKS 에 대한 OIDC 생성

#export cluster name 수정
export cluster_name=my-cluster
oidc_id=$(aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)


#OIDC 가 이미 존재 하는지 확인
aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4

#OIDC 생성
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve

 

2. LBC 생성을 위한 IAM role, policy 생성

#정책 문서 다운로드
curl-O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json

#정책 생성
aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
    
#Role 생성
#cluster 수정, attach-policy arn 수정
eksctl create iamserviceaccount \
  --cluster=my-cluster \
  --namespace=kube-system \
  --name=aws-load-balancer-controller \
  --role-name AmazonEKSLoadBalancerControllerRole \
  --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
  --approve

3. LBC Install

#helm repo 추가 및 업데이트
helm repo add eks https://aws.github.io/eks-charts
helm repo update eks

#helm install
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=my-cluster \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller

4. 설치 확인

kubectl get deployment -n kube-system aws-load-balancer-controller

 

 

'AWS' 카테고리의 다른 글

EKS fargate 생성을 위한 설정  (0) 2023.12.18
AWS EC2 종료 Lambda with EventBridge  (0) 2023.11.28
AWS EC2/RDS Instance 정보 조회 Lambda 코드  (0) 2023.09.24
Route53 라우팅 정책  (0) 2023.08.05
AWS Route53 DNA Type  (0) 2023.07.22

AWS EC2 / RDS 의 인스턴스 정보를 조회하는 boto3 코드

  • 태그값을 지정하여 원하는 태그를 추출 가능

 

import json
import boto3

def lambda_handler(event, context):
    # TODO implement
    ec2_asset()
    rds_asset()


######EC2#####################################################
def ec2_asset():
    ec2 = boto3.client('ec2')   
    #ec2_info = []
    
    describe_ec2_instance = ec2.describe_instances()
    print("################EC2 Instance Info####################")
    for reservation in describe_ec2_instance['Reservations']:
        for instance in reservation['Instances']:
            instance_id = instance['InstanceId']
            instance_type = instance['InstanceType']
            tagName = None
            tagComponent = None
            for instance_Tags in instance['Tags']:
                               
                if instance_Tags['Key'] == 'Name':
                    tagName = instance_Tags['Value']
                    
                
                if instance_Tags['Key'] == 'Component':
                    tagComponent = instance_Tags['Value']
            print(instance_id,"\t", instance_type,"\t", tagName,"\t", tagComponent)    

                

######RDS#####################################################
def rds_asset():
    rds = boto3.client('rds')
    print("################RDS Instance Info####################")
    describe_rds_instance = rds.describe_db_instances()
    for dbInstances in describe_rds_instance['DBInstances']:
        for instance in dbInstances['DBInstanceIdentifier']:
            instance_zone = dbInstances['AvailabilityZone']
            instance_type = dbInstances['DBInstanceClass']            
            instance_endpoint = dbInstances['Endpoint']['Address']
            instance_engine = dbInstances['Engine']
            instance_enginevesion = dbInstances['EngineVersion']
            
            tagName = None
            tagComponent = None
            for instance_Tags in dbInstances['TagList']:
                if instance_Tags['Key'] == 'Name':
                    tagName = instance_Tags['Value']
                if instance_Tags['Key'] == 'Component':
                    tagComponent = instance_Tags['Value']

        print(tagName ,"\t",tagComponent,"\t", instance_type,"\t", instance_zone, "\t",instance_engine,"\t",instance_enginevesion,"\t",instance_endpoint)

 

 

'AWS' 카테고리의 다른 글

AWS EC2 종료 Lambda with EventBridge  (0) 2023.11.28
AWS EKS LB Controller Install  (0) 2023.09.29
Route53 라우팅 정책  (0) 2023.08.05
AWS Route53 DNA Type  (0) 2023.07.22
AWS Gateway Endpoint  (0) 2023.07.21

Job / Cron Job 은 일반적으로 시스템의 batch 에 해당하는 항목이다.

Job 은 단순 batch 파일 / Cron Job 은 Cron Job 에 해당

 

<Sample> Job : 파이의 주기율을 2000번째까지 구하는 코드

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl:5.34.0
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4

일반적으로 사용되는 옵션 설멍

restartPolicy = OnFailure : 파드가 비정상적으로 종료 되었을때, 파드는 실패한 노드에서 재실행 

restartPolicy = Never : Job 완료 시 다시 실행 하지 않음, 작업이 실패 되었을때 스케줄러에 의해 재실행

backoffLimit = N : 작업 실패 시 N 번만큼만 재실행

parallelism = N : Job 파드를 병렬로 N 개 실행 한다(동시에 N 개 까지 수행 가능)

completions = N : 작업 완료된 후 N 번 수행(완료 -> 재실행 -> 완료 -> 재실행 -> .....-> N 번)

activeDeadlineSeconds : 제한시간

 

CronJob Schedule : "* * * * *"

  • Min
  • Hours
  • Day
  • Month
  • Da of the week (요일)

 

 

https://kubernetes.io/ko/docs/concepts/workloads/controllers/job/

 

잡에서 하나 이상의 파드를 생성하고 지정된 수의 파드가 성공적으로 종료될 때까지 계속해서 파드의 실행을 재시도한다. 파드가 성공적으로 완료되면, 성공적으로 완료된 잡을 추적한다. 지정

kubernetes.io

 

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]Docker image build  (0) 2023.09.09

Docker Image Build

  사용자가 원하는 Docker image 를 생성하기 위해 Dockerfile 로 직접 만들 수 있다.

 

 

Dockerfile 생성

  vi dockerfile 로 아래와 같은 구문의 텍스트 작성

FROM centos:7.5.1804
RUN yum install httpd -y
RUN echo "hello" > /var/www/html/index.html
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

   명령어 참고

  • From : docker 를 생성할 base image 로써 일반적으로 dockerhub 에 있는 이미지를 주로 사용(centos, ubuntu, nodejs, python 등)
  • WORKDIR : 쉘의 cd 명령어와 동일한 기능으로, 작업 디렉토리를 정할때 사용
  • RUN : 쉘에서 커맨드를 실행하는 것과 동일한 기능
  • ENTRYPOINT : 컨테이너가 실행될때 수행되는 커맨드를 지정할때 사용. 이 커맨드로 실행된 프로세스가 죽을때 컨테이너가 같이 종료됨
  • CMD : 이미지를 컨테이너로 띄울때 실행할 커맨드를 지정
  • EXPOSE : 컨테이너 리스닝 포트를 지정할때 사용. docker run -p 옵션과 동일한 기능

 

Docker image buld

  Dockerfile 이 있는 경로에서 아래 명령어 수행

  -t 옵션으로 태그를 지정할 수 있다

docker build -t web:v1 .

  명령어 수행 후 이미지 생성 확인

 

Docker run

  생성한 이미지가 정상적으로 실행 되는지 확인

##web 이미지 실행
docker run -d --name web web:v1

##web 이미지 실행 확인
docker ps -a | grep web

##web 이미지 IP 정보 확인
docker inspect web | grep -i ipaddress

  curl 명령어를 사용하여 이미지 검증

'k8s > CKAD' 카테고리의 다른 글

ingress 개념 정리  (1) 2024.01.21
NetworkPolicy 개념 정리  (0) 2024.01.20
[CKAD] Secret 생성 후 Pod 에 env 로 사용  (0) 2023.12.01
[CKAD]k8s Job / CronJob  (0) 2023.09.10

ECMP는 equal-cost multi-path routing의 약자로 하나의 목적지로 패킷 라우팅을 수행하면서 여러 개의 경로를 선택하는 라우팅 기법이다. ECMP는 다음 홉에 대한 선택을 단일 라우터로 국한시킬 수 있기 때문에 대부분의 라우팅 프로토콜과 결합하여 사용할 수 있다. ECMP는 다중 경로를 통해 트래픽을 분산시킴으로써 잠재적으로 대역폭의 증가를 가져온다.

 

ECMP는 해시 ECMP 알고리즘과 라우팅 메트릭 계산을 기반으로 동일한 비용의 다음 홉 경로를 식별하고 사용하는 원칙에 따라 트래픽을 라우팅하는 방법입니다. 네트워크는 동일한 비용, 동일한 메트릭 값, 네트워크 비용 및 기본 설정의 여러 최상의 경로를 제공합니다. 그런 다음 라우팅 테이블을 통한 ECMP 프로세스는 라우터 집합, ECMP(동일 비용 다중 경로) 집합을 식별하며 각각은 대상에 대한 동일한 비용 다음 홉 주소입니다. ECMP는 각 라우터가 독립적으로 주소를 지정하는 다음 홉 대상에 대해서만 로컬 홉별 결정을 요구하기 때문에 ECMP와 대부분의 라우팅 프로토콜을 함께 사용할 수 있습니다.

ECMP는 비용이 동일한 여러 최상의 경로에서 트래픽 로드 밸런싱을 통해 대역폭을 크게 늘릴 수 있지만 실제로는 올바른 결정을 내리지 않으면 배포에 문제가 있을 수 있습니다

 

https://ko.wikipedia.org/wiki/ECMP

 

ECMP - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. IEEE 802.1aq 프로토콜을 이용한 ECMP 애니메이션 ECMP는 equal-cost multi-path routing의 약자로 하나의 목적지로 패킷 라우팅을 수행하면서 여러 개의 경로를 선택하는 라

ko.wikipedia.org

 

https://avinetworks.com/glossary/equal-cost-multi-path-routing-ecmp/

 

What is Equal-Cost Multi-Path Routing (ECMP)? | Avi Networks

Learn the definition of Equal-Cost Multi-Path Routing (ECMP) and get answers to FAQs regarding: ECMP load balancing, ECMP routing, and more.

avinetworks.com

 

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

AWS DX MACsec 설정  (0) 2023.08.06
AWS VPN 터널 시작 옵션  (0) 2023.08.05
AWS Gateway Load Balancer(GWLB)  (0) 2023.07.30
AWS Traffic Mirroring  (0) 2023.07.30
Amazon Route 53 Resolver  (0) 2023.07.16

+ Recent posts