EKS를 통한 kubernetes 운영 환경 구성 Part 5

 

번개장터

안녕하세요. 번개장터 백엔드 엔지니어 박상조입니다. 이제 EKS를 이용해 k8s 운영환경을 구성하는 마지막 포스팅입니다. 이번 포스팅은 실제로 ALB ingress를 k8s에서 사용하는 방법에 대한 포스팅입니다.

아래 문서를 참고했습니다.

https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/controller/setup/

ALB ingress controller 설치

ALB ingress controller는 크게 두 가지 설치 방법이 있습니다. 하나는 직접 각각의 k8s object들을 하나하나 추가하는 방법이고 다른 하나는 Helm을 이용하는 방법입니다. 저희는 이번 포스팅에서 Helm을 이용해 설치하겠습니다. 다른 설치방법이 궁금하시다면 위 링크의 문서를 참고해 주시기 바랍니다.

Helm을 이용한 설치
  1. Helm에 저장소를 추가합니다.
    helm repo add incubator https://storage.googleapis.com/kubernetes-charts-incubator
    
  2. ALB ingress controller를 설치합니다.
     helm install incubator/aws-alb-ingress-controller \
    --set clusterName=MysClusterName \
    --set autoDiscoverAwsRegion=true \
    --set autoDiscoverAwsVpcID=true \
    --set extraArgs."feature-gates"='waf=false' \
    --name NAME \
    --namespace kube-system
    

    extraArgs.”feature-gates”=’waf=false’ 부분은 원래 자동으로 설정돼야 하는데 일부 지역에선 이슈가 있어 수동으로 꺼줘야 합니다.

    NAME은 Helm에서 사용하실 이름을 넣으시면 됩니다.

  3. ALB ingress controller가 잘 설치됐는지 확인합니다.
    kubectl get po -l app.kubernetes.io/name=aws-alb-ingress-controller -n kube-system
    

    문제가 없다면 현재 실행 중인 ALB ingress contoller Pod를 보실 수 있습니다.

ALB 정책 추가

이제 ALB ingress Controller가 생성됐습니다. 하지만 ALB ingress Controller가 실제로 ALB를 생성하고 관리하기 위해서는 권한이 필요합니다. ALB와 관련된 권한을 작업자 노드의 IAM에 추가해 보도록 하겠습니다.

  1. IAM 콘솔을 엽니다. (https://console.aws.amazon.com/iam/)
  2. Polices를 선택합니다.
  3. Create policy를 선택합니다.
  4. JSON을 선택하고 아래 링크의 내용을 붙여넣은 후 Review policy를 선택합니다.

    https://kubernetes-sigs.github.io/aws-alb-ingress-controller/examples/iam-policy.json

  5. 정책의 이름을 입력하고 Create policy를 선택합니다.
  6. 생성이 완료되면 Roles를 선택합니다.
  7. Attach policies를 선택합니다.

  8. 방금 생성한 정책을 선택하고 Attach policy를 선택합니다.

이제 작업자 노드에서 ALB를 생성, 관리할 수 있습니다.

ALB ingress 생성

이제 실제로 ALB ingress를 생성하고 사용할 수 있습니다. 다른 오브젝트와 같은 방법으로 ingress를 생성할 수 있습니다. 예시로 아래와 같은 yaml 파일을 만들어 ingress를 사용할 수도 있습니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: YOUR INGRESS NAME
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/subnets: YOUR SUBNET 1, YOUR SUBNET 2
    alb.ingress.kubernetes.io/healthcheck-path: /
    alb.ingress.kubernetes.io/success-codes: "200"
spec:
  backend:
    serviceName: YOUR SVC NAME
    servicePort: YOUR SVC PORT

target-type은 앞선 포스트에서 말씀드렸던 ingress의 연결 방식입니다. healthcheck-path는 말 그대로 ALB가 헬스체크를 할 path를 말하고 success-codes는 성공으로 간주할 코드를 말합니다. 헬스체크를 하는 로직이 없다면 404를 추가해 헬스체크를 회피할 수 있습니다. 위처럼 spec에 바로 backend를 정의하면 이 ingress는 조건 없이 하나의 서비스에만 연결합니다. 더 자세한 내용은 아래 링크를 참고하시길 바랍니다.

https://github.com/kubernetes-sigs/aws-alb-ingress-controller

생성된 yaml 파일을 이용해 ingress를 생성합니다.

kubectl create -f 파일명.yaml

이렇게 생성된 ingress는 describe 명령어를 통해 상태를 확인하고 할당받은 주소를 확인할 수 있습니다.

kubectl describe ing

아래와 같이 주소를 확인할 수 있으며 접속해서 서비스에 연결하실 수 있습니다.

이상으로 EKS를 활용한 k8s 환경 구축에 대한 포스팅을 마칩니다. 저는 이후 배포와 Auto scaling 관련해서 기회가 되면 다시 포스팅하도록 하겠습니다. 부족한 포스팅 봐주셔서 감사합니다.

기업문화 엿볼 때, 더팀스

로그인

/