LoadBalancer로 외부에 서비스 노출하기

4riend·2024년 5월 8일
1

CodeMind 프로젝트

목록 보기
19/20
post-thumbnail

이전에는 NodePort로 외부에 서비스를 노출했었다.
이번엔 EKS cluster 내에서 LoadBalancer로 서비스한 과정을 적어본다 🔥


시작 전

사실 흔히 사용하는 ingress로 서비스 노출을 시도 했었다.
그런데 중간에 잘 되지 않아 1~2일을 고생하다 결국 LoadBalancer로 우회하게 되었다 😥
현재는 에러의 원인이 짐작이 가기에 추후 ingress를 통한 서비스 노출도 다뤄 보겠다.


LoadBalancer 배포하기

내가 사용하는 서비스는 이전 글에서 얘기한 것들이다. (streamlit, auth0, hf api)

여기서 streamlit과 auth0가 외부에 노출되어야 하기에 loadbalancer를 각각 만들었다.

streamlit-lb.yaml

apiVersion: v1
kind: Service
metadata:
  name: streamlit-lb
spec:
  type: LoadBalancer
  selector:
    app: streamlit
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8501

auth0-lb.yaml

apiVersion: v1
kind: Service
metadata:
  name: auth0-lb
spec:
  type: LoadBalancer
  selector:
    app: auth0
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

로드밸런서 Service를 배포한 뒤 조회하자

$ kubectl apply -f streamlit-lb.yaml -f auth0-lb.yaml

$ kubectl get svc
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                                                                    PORT(S)        AGE
auth0-lb        LoadBalancer   10.100.155.143   a3120f294fe78438d9479baf19198313-1976181292.ap-northeast-2.elb.amazonaws.com   80:30146/TCP   25h                                                                         8000/TCP       25h
kubernetes      ClusterIP      10.100.0.1       <none>                                                                         443/TCP        2d18h
streamlit-lb    LoadBalancer   10.100.104.64    ae46ebe8b5e9c4eb58d6ee4b08431a0a-1959267954.ap-northeast-2.elb.amazonaws.com   80:30440/TCP   25h

위에서 조회한 로드밸런서의 EXTERNAL-IP를 통해 외부에서 서비스를 접근하면 된다 👍


ingress를 실패했던 이유

당시 작성한 ingress yaml 파일은 아래와 같다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: streamlit-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /streamlit
        pathType: Exact
        backend:
          service:
            name: streamlit-svc # 이곳
            port:
              number: 8501

현재 에러라 생각하는 부분은 service - name의 streamlit-svc라고 생각한다.
그냥 streamlit으로 명시하는게 맞는 것 같은...?
yaml 파일을 작성하다 보면 name을 작성하는 곳이 너무 많아 헷갈린다 🤔

또 나의 경우 ingress-nginx를 사용해서 이 글을 한 번 참고하라는 조언도 얻었는데... configmap에 대한 개념이 부족해 이해하지 못했다.

하루 빨리 테스트로 확인해봐야겠다.


참고 문헌

profile
날씨의 아이, 진격의 거인, 로스트 아크, Java Spring

0개의 댓글