안녕하세요. 번개장터 백엔드 엔지니어 박상조입니다. 이제 EKS를 이용해 k8s 운영환경을 구성하는 마지막 포스팅입니다. 이번 포스팅은 실제로 ALB ingress를 k8s에서 사용하는 방법에 대한 포스팅입니다.
아래 문서를 참고했습니다.
https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/controller/setup/
ALB ingress controller는 크게 두 가지 설치 방법이 있습니다. 하나는 직접 각각의 k8s object들을 하나하나 추가하는 방법이고 다른 하나는 Helm을 이용하는 방법입니다. 저희는 이번 포스팅에서 Helm을 이용해 설치하겠습니다. 다른 설치방법이 궁금하시다면 위 링크의 문서를 참고해 주시기 바랍니다.
helm repo add incubator https://storage.googleapis.com/kubernetes-charts-incubator
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에서 사용하실 이름을 넣으시면 됩니다.
kubectl get po -l app.kubernetes.io/name=aws-alb-ingress-controller -n kube-system
문제가 없다면 현재 실행 중인 ALB ingress contoller Pod를 보실 수 있습니다.
이제 ALB ingress Controller가 생성됐습니다. 하지만 ALB ingress Controller가 실제로 ALB를 생성하고 관리하기 위해서는 권한이 필요합니다. ALB와 관련된 권한을 작업자 노드의 IAM에 추가해 보도록 하겠습니다.
JSON을 선택하고 아래 링크의 내용을 붙여넣은 후 Review policy를 선택합니다.
https://kubernetes-sigs.github.io/aws-alb-ingress-controller/examples/iam-policy.json
Attach policies를 선택합니다.
이제 작업자 노드에서 ALB를 생성, 관리할 수 있습니다.
이제 실제로 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 관련해서 기회가 되면 다시 포스팅하도록 하겠습니다. 부족한 포스팅 봐주셔서 감사합니다.