본문으로 건너뛰기

소개

먼저 helm을 사용하여 AWS Load Balancer controller를 설치하겠습니다:

~$helm repo add eks-charts https://aws.github.io/eks-charts
~$helm upgrade --install aws-load-balancer-controller eks-charts/aws-load-balancer-controller \
--version "${LBC_CHART_VERSION}" \
--namespace "kube-system" \
--set "clusterName=${EKS_CLUSTER_NAME}" \
--set "serviceAccount.name=aws-load-balancer-controller-sa" \
--set "serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn"="$LBC_ROLE_ARN" \
--wait
Release "aws-load-balancer-controller" does not exist. Installing it now.
NAME: aws-load-balancer-controller
LAST DEPLOYED: [...]
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
AWS Load Balancer controller installed!

클러스터의 현재 Service 리소스를 살펴보면 마이크로서비스가 내부에서만 접근 가능한지 확인할 수 있습니다:

~$kubectl get svc -l app.kubernetes.io/created-by=eks-workshop -A
NAMESPACE   NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
carts       carts              ClusterIP   172.20.180.149   <none>        80/TCP                                  1h
carts       carts-dynamodb     ClusterIP   172.20.92.137    <none>        8000/TCP                                1h
catalog     catalog            ClusterIP   172.20.83.84     <none>        80/TCP                                  1h
catalog     catalog-mysql      ClusterIP   172.20.181.252   <none>        3306/TCP                                1h
checkout    checkout           ClusterIP   172.20.77.176    <none>        80/TCP                                  1h
checkout    checkout-redis     ClusterIP   172.20.32.208    <none>        6379/TCP                                1h
orders      orders             ClusterIP   172.20.146.72    <none>        80/TCP                                  1h
orders      orders-postgresql  ClusterIP   172.20.54.235    <none>        3306/TCP                                1h
ui          ui                 ClusterIP   172.20.62.119    <none>        80/TCP                                  1h

모든 애플리케이션 컴포넌트가 현재 ClusterIP 서비스를 사용하고 있으며, 이는 동일한 Kubernetes 클러스터의 다른 워크로드에서만 접근할 수 있습니다. 사용자가 애플리케이션에 접근할 수 있도록 하려면 ui 애플리케이션을 노출해야 하며, 이 예제에서는 LoadBalancer 타입의 Kubernetes 서비스를 사용하여 노출하겠습니다.

ui 컴포넌트의 서비스에 대한 현재 사양을 자세히 살펴보겠습니다:

~$kubectl -n ui describe service ui
Name:              ui
Namespace:         ui
Labels:            app.kubernetes.io/component=service
                   app.kubernetes.io/created-by: eks-workshop
                   app.kubernetes.io/instance=ui
                   app.kubernetes.io/managed-by=Helm
                   app.kubernetes.io/name=ui
                   helm.sh/chart=ui-0.0.1
Annotations:       <none>
Selector:          app.kubernetes.io/component=service,app.kubernetes.io/instance=ui,app.kubernetes.io/name=ui
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                172.20.62.119
IPs:               172.20.62.119
Port:              http  80/TCP
TargetPort:        http/TCP
Endpoints:         10.42.105.38:8080
Session Affinity:  None
Events:            <none>

앞서 확인했듯이 현재 ClusterIP 타입을 사용하고 있으며, 이 모듈의 과제는 소매점 사용자 인터페이스가 공개 인터넷을 통해 접근 가능하도록 변경하는 것입니다.