작성
·
199
·
수정됨
1
안녕하세요, 먼저 좋은 강의 감사합니다.
Ingress-실습 강의를 보면서 진행하던 중 막히는 부분이 있어 질문 남깁니다.
저는 클라우드 환경에서 작업을 하고 있고, 인스턴스 목록은 다음과 같습니다.MS-worker-02 CentOS 7.9 10.2.0.67
MS-worker-01 CentOS 7.9 10.2.0.102
MS-master CentOS 7.9 10.2.0.72
쿠버네티스 서비스는 다음과 같습니다.
[centos@ms-master ~]$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 20h
svc-customer ClusterIP 10.97.122.176 <none> 8080/TCP 5h27m
svc-order ClusterIP 10.96.220.47 <none> 8080/TCP 5h27m
svc-shopping ClusterIP 10.106.190.227 <none> 8080/TCP 5h27m
[centos@ms-master ~]$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx ClusterIP 10.105.252.136 10.2.0.72 80/TCP,443/TCP 43m
ingress-nginx-controller NodePort 10.99.180.38 <none> 80:31167/TCP,443:31190/TCP 5h42m
ingress-nginx-controller-admission ClusterIP 10.105.89.17 <none> 443/TCP
외부에서 ingress를 통해 서비스에 접근하려면 어떻게 해야하나요?
제가 생각하기로는 ingress의 포트가 31167이라고 할 때 로드밸런서 포트, 인스턴스 포트를 (80, 31167)로 가지는 로드밸런서를 만들어주고, <로드밸런서 floating ip>/order 이런식으로 접근하면 결과가 나와야한다고 생각하는데 안돼서요...
서비스를 NodePort 타입으로 만들어주고 로드밸런서를 서비스 자체에 붙이는 경우에는 잘 됩니다.
인스턴스 내부에서 curl <인그레스 주소>:<ingress-controller의 노드 포트>/order처럼 했을 때도 결과가 잘 나오는 걸 봐서는 인그레스 자체는 잘 구성이 된 듯한데, 이를 외부로 어떻게 보낼 수 있을까요?
인그레스 컨트롤러도 결국엔 서비스인데, 왜 안 되는지 모르겠습니다.
혹은 인그레스 컨트롤러 자체를 load balancer 타입으로 만들어주는 게 맞는 것 같기도한데, 저는 클라우드 환경이긴 하지만 직접 노드를 구성하다보니 external IP가 자동으로 생기지는 않더라고요.
외부에서 만든 로드밸런서의 ip나 이런 정보들을 load balancer 타입의 인그레스 컨트롤러 yaml 등에 설정을 직접 해줄 수가 있나요? 혹은 클라우드 환경이라하더라도 쿠버네티스를 직접 구축하는 경우 로드밸런서는 온프레미스 환경과 동일하게 MetalLB를 써야하는 걸까요?
답변 1
0
안녕하세요. 답변이 좀 늦었습니다.
클라우드 내부 VM에서 호출하는게 아닌, 완전히 외부에서 클라우드 내부 VM IP로 통신을 하려는건가요?
직접 쿠버네티스 클러스터를 구성한 경우 nodePort까지 밖에 할 수 있는 게 없습니다.
외부에서 VM(workerNode) IP의 nodePort까지 이어주는 별도의 로드 밸런서를 만들어 줘야 해요.
보통 NLB라고 합니다.
해당 클라우드의 NLB 서비스를 확인해보세요.
아니면 인터넷에 [EKS Service 서비스 외부노출 alb, nlb] 이런 검색을 해보시면 많이 나옵니다.