쿠버네티스 클러스터 안에서 파드의 집합(주로 레플리카세트)에 대한 경로나 서비스 디스커버리(API 주소가 동적으로 바뀌어도 클라이언트가 대상을 바꾸지않고 접근할 수 있음)를 제공하는 리소스이다. 서비스의 대상이 되는 파드는 서비스에서 정의하는 레이블 셀렉터로 정해진다. spec.selector 속성값으로 특정 파트의 레이블값을 설정하여 특정 파드만 접근할 수 있도록 yaml파일을 작성해보자.
1 | apiVersion: v1 |
위의 서비스를 실행하고 컨테이너 안에 존재하는 아무 컨테이너에 들어가서 curl http://echo
를 입력하면 잘 동작하는것을 확인할 수 있다.
1 | $ kubectl exec -it 파드명 bash |
다음명령어를 통해 로그를 summer안에서 생기는 로그를 확인할 수 있다.
1 | $ kubeclt logs -f echo-summer-dtblk -c echo |
쿠버네티스 클러스터는 서비스명.네임스페이스명.svc.local
로 연결해준다.
1 | $ curl http://echo.default.svc.local |
ClusterIP 서비스
서비스의 종류는 여러가지가 있고 기본값은 ClusterIP 서비스이다. ClusterIP를 통해 클러스터 내부 IP 주소에 서비스를 공개할 수 있다.
NodePort 서비스
이는 클러스터 외부에서 접근할 수 있는 서비스이다. ClusterIP를 만든다는 점은 ClusterIP 서비스와 같다. 각 노드에서 서비스 포트로 접속하기 위한 글로벌 포트를 개방하는것이 차이점이다.
1 | apiVersion: v1 |
다음 명령어를 통해 포트를 알아내고 curl요청을 보낼 수 있다.
1 | $ kubectl get svc echo |
LoadBalancer 서비스
이는 각 클라우드 플랫폼에서 제공하는 로드밸런서와 연동하기 위해 사용된다.
ExternalName 서비스
이는 셀렉터도 포트 정의도 없는 특이한 서비스다. 쿠버네티스 클러스터에서 외부 호스트를 네임 레졸루션 하기위한 별칭을 제공한다.
아래의 경우 gihyo.jp를 gihyo로 참조할 수 있게해준다.
1 | apiVersion: v1 |