-
github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 6부AWS 2023. 4. 5. 16:31
5부 링크
인그레스 컨트롤러를 만들고, 인그레스 리소스를 사용해보겠다.
기존에 서비스 타입을 로드밸런서 형태로 사용했는데, 이번에는 인그레스를 사용해보겠다.
서비스 타입을 로드밸런서 형태로 만드는 것의 단점은, 5부까지 예제를 따라해보면, 아르고cd 로드밸런서 1개와 spring deploy를 서비스 해주는 로드밸런서 1개 해서 2개가 된다.
만약 서비스가 여러개가 있고, 서비스타입을 모두 로드밸런서로 한다면, 서비스 개수만큼 각각의 다른 dns 이름으로 로드밸런서가 생긴다.
이러면 관리하기가 너무 어려워진다.
한마디로 정리하자면 인그레스가 필요한 이유는 하나의 IP주소로 여러개의 서비스에 접근하기 위함이라고 볼 수 있다.
그래서 인그레스를 사용한다.
https://kubernetes.io/docs/concepts/services-networking/ingress/
쿠버네티스 공식문서에 따르면 인그레스는 "An API object that manages external access to the services in a cluster, typically HTTP." 이렇다고 한다. 해석하자면, 클러스터 내부의 서비스를 외부에서 접근하는 것을 관리하는 오브젝트라고 한다.
클라이언트가 요청이 오면 -> 인그레스가 받아서 -> 적절한 서비스로 연결 -> 서비스는 파드로 연결하는 방식이다.
쿠버네티스 문서를 보면
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx-example rules: - http: paths: - path: /testpath pathType: Prefix backend: service: name: test port: number: 80
이런 예제가 있는데, 이거를 eks에서 실행하면 아무것도 안된다.
eks에서는 인그레스를 사용하기 위해 인그레스 컨트롤러가 필요하다.
인그레스 컨트롤러가 왜 필요한지는 아래 블로그에 나와있다.
"인그레스 컨트롤러(Ingress Controller)는 클러스터에서 실행되고 수신 리소스에 따라 HTTP 로드 밸런서를 구성하는 응용 프로그램이다."
kind를 인그레스로 하고 생성하면, 외부에서 연결 할 수 있는 ip, 즉 로드밸런서가 생성되지 않는다. 그래서 인그레스리소스를 생성하고, 외부에서 연결가능한 ip 를 얻기 위해서는 인그레스 컨트롤러가 필요하다.
이제 eks 에서 인그레스 컨트롤러를 어떻게 설치하는지 알아보겠다.
워크샵 내용을 잘 따라하면 되는데, 우리는 클러스터를 만들 때 --with-oidc 옵션을 사용했으므로 oidc가 이미 있다.확인하기 위해 iam 에 가서 자격증명관리자에 가면 있는거를 볼 수 있다.나머지는 그대로 따라하면 잘 작동한다.
워크샵 내용중에서 아래 명령어들만 입력하면 된다.
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.4/docs/install/iam_policy.json aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam-policy.json eksctl create iamserviceaccount \ --cluster eks-demo \ --namespace kube-system \ --name aws-load-balancer-controller \ --attach-policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml wget https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.4/v2_4_4_full.yaml
이렇게 하고, v2_4_4_full.yaml 파일에서 cluster-name 수정하고, 서비스 어카운트는 위에 명령어에서 만들었으므로 서비스 어카운트 부분 지워주고 아래 명령어치면 끝이다.
kubectl apply -f v2_4_4_full.yaml
ingress를 생성해주자. aws route53과 certification manager에서 받은 인증서를 사용해서 https 를 적용시킨다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: "ingress" namespace: default annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing alb.ingress.kubernetes.io/target-type: ip alb.ingress.kubernetes.io/group.name: eks-demo-group alb.ingress.kubernetes.io/group.order: '1' alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}' alb.ingress.kubernetes.io/certificate-arn: 인증서 arn 복사해서 붙이세요. spec: rules: - http: paths: - path: /module1 pathType: Prefix backend: service: name: "module1-service" port: number: 8030 - path: /module2 pathType: Prefix backend: service: name: "module2-service" port: number: 8040 - path: /consumer pathType: Prefix backend: service: name: "consumer-service" port: number: 8020 - path: /producer pathType: Prefix backend: service: name: "producer-service" port: number: 8010
4개의 서비스를 하나의 로드밸런서가 잘 통제해준다.
기존에 만든 eks 클러스터는 t3.medium 이었는데 파드 개수가 17개까지여서, 더이상 파드를 못만든다.
https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt
그래서 이번에는 t3.large로 만들고, argocd 연결해서 잘 작동하는지 확인하겠다.
다음은 헬름차트를 이용해서 카프카를 로컬에서 올려보고, eks에도 올려보겠다.
'AWS' 카테고리의 다른 글
github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 8부 (0) 2023.04.08 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 7부 (0) 2023.04.05 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 5부 (0) 2023.04.03 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 4부 (0) 2023.04.03 github actions, kustomize와 argocd를 EKS에서 kafka랑 사용하기 3부 (0) 2023.04.03