이전에는 NodePort로 외부에 서비스를 노출했었다.
이번엔 EKS cluster 내에서 LoadBalancer로 서비스한 과정을 적어본다 🔥
사실 흔히 사용하는 ingress로 서비스 노출을 시도 했었다.
그런데 중간에 잘 되지 않아 1~2일을 고생하다 결국 LoadBalancer로 우회하게 되었다 😥
현재는 에러의 원인이 짐작이 가기에 추후 ingress를 통한 서비스 노출도 다뤄 보겠다.
내가 사용하는 서비스는 이전 글에서 얘기한 것들이다. (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 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에 대한 개념이 부족해 이해하지 못했다.
하루 빨리 테스트로 확인해봐야겠다.