☸️ 쿠버네티스에서 애플리케이션을 노출하는 방법(서비스)에 대해서 알아보자.
쿠버네티스에서 애플리케이션을 외부로 노출하는 방법
사실 이 말은 일정부분 맞고, 일정부분 틀리다.
외부로 노출하는 방법(로드밸런서, 노드 포트)또한 분명 서비스가 맞으나, 내부에서 파드를 로드밸런싱 하는 방법(Cluster IP)또한 서비스에 포함되어 있기 때문이다.
☸️ 서비스의 종류
1. ClusterIP (기본 형태 - 내부 구성 )
2. NodePort
3. LoadBalancer
4. ExternalName
하지만, 이번 실습에서는 보편적인 "외부로 노출하기 위해 사용하는 서비스"의 의미로 생각하고 보도록 하자.
자세한 내용은 아래 Reference
부분을 참고.
따라서, 쿠버네티스 클러스터의 외부에서 클러스터 내부로 접속할 수 있는 서비스는 마치 "문"과 같은 역할을 한다.
포트 포워딩은 실습에서 사용되는 클러스터 환경에서도 이미 사용 되고있다.
워커노드 1번으로 사용되는 가상 머신(호스트)를 보자.
원격으로 내부 네트워크(가상화된 환경)에 접속하기 위해서 60101번
포트로 SSH 접속을 요청하면, 워커노드 1번 가상 머신의 22번
포트(SSH 서버)로 요청을 전달하여 가상 머신에 접속하게 된다.
SuperPutty의 Session 정보를 확인해 보면 다음과 같이 포트포워딩과 SSH 프로토콜을 통해 각 호스트에 접속하는 것을 확인할 수 있다.
k port-forward fwd-chk-hn 80:80
Forwarding from 127.0.0.1:80 -> 80
아무것도 입력하지 않으면 기본적으로 localhost 주소로 포트 포워딩 된다.
즉, 마스터 노드에서 127.0.0.1로 보내는 80번 웹 요청은 fwd-chk-hn
파드의 80번으로 요청이 보낸다는 의미이다.
이제 curl 명령어를 통해서 마스터노드에서 웹 요청(80포트)을 보내보자.
리눅스의 curl?
http 메세지를 Shell 상에서 요청하는 명령어
특정 URL에 웹 요청을 하는 명령어이다.
curl 127.0.0.1
80번 포트로의 핸들링이 일어났다는 메시지가 도착하며, curl을 통해서 워커노드 3번(그림은 1번)에 배포된 fwd-chk-hn
의 이름이 return 된 것을 확인할 수 있다.
마스터 노드에서 보내는 모든 주소에 대해서 워커노드의 80번 포트로 포트포워딩 되도록 해보자. --address 옵션을 넣어주면 된다.
k port-forward --address 0.0.0.0 fwd-chk-hn 80:80
이제 마스터 노드 자신의 IP(192.168.1.10)에 대해서 요청을 보냈는데, 포트포워딩 되어 워커노드에 배포된 fwd-chk-hn
가 응답하는 것을 확인할 수 있다.
이러한 포트포워딩은 파드가 종료되고, 시작되면서 초기화 되기 쉬워 테스트용도나 확인 용도로 주로 사용이 된다.
사용자는 워커노드들 중 어디에 배포되었는지 알아야한다.
이후 해당 노드의 IP주소:8080 포트로 접속하게 되면 애플리케이션의 80포트로 접속할 수 있게 된다.
이 또한 파드가 어디에 배포되었는지 알아야한다.
hostNetwork : True
옵션을 넣어주면, 자동으로 노드 내 컨테이너의 80번 포트로의 접속이 허용되고, 사용자가 해당 노드의 80포트로 접속하게되면 컨테이너 내부의 80번에 접속할 수 있게 된다.
하지만 이는 호스트 네트워크 IP 자체가 점유되어 버린다.
(IP에 대한 포트가 80번 고정으로, 더 이상 다른 포트의 접속 및 사용은 불가능)
따라서..💌
호스트 포트와 호스트 네트워크는 어디에 디플로이된지 알아야하고, 여러 문제가 많아 사용되지 않고, 현재는 개념적으로만 남아있다.