서비스와 애플리케이션 연결
1. 클러스터에 파드 노출하기
아래와 같이 nginx 배포를 만들고 컨테이너 포트 사양을 확인합니다.
다음을 실행하면 클러스터의 모든 노드에서 액세스 할 수 있습니다.
파드가 실행중인 노드를 확인 합니다.
파드의 IP를 확인합니다.
2. 서비스 생성하기
이제 클러스터 전체 주소 공간에서 nginx가 실행되는 파드를 가지고 있습니다. 이론적으로는 이러한 파드와 직접 대화 할 수 있지만 노드가 죽으면 어떻게 될까요? 파드는 노드와 함께 죽고 Deployment는 다른 IP로 새로운 파드를 생성합니다. 이것이 서비스가 풀어야 하는 문제 입니다.
쿠버네티스 서비스는 클러스터에서 실행되는 논리적 파드 집합을 정의하는 추상화로, 모두 동일한 기능을 제공 합니다. 생성 될 때 각 서비스에는 고유 한 IP 주소 (clusterIP 라고도 함)가 할당 됩니다. 이 주소는 서비스의 수명과 관련이 있으며 서비스가 활성화 된 동안에는 변경 되지 않습니다. 파드는 서비스와 통신 하도록 구성 할 수 있으며 서비스에 대한 통신이 서비스의 구성인 일부 파드에 자동으로 로드 밸런싱 된다는 것을 알 수 있습니다.
kubectl expose를 사용하여 2 개의 nginx replica에 대한 서비스를 생성 할 수 있습니다.
다음과 같은 결과를 확인할 수 있습니다.
이 사양은 run: my-nginx 레이블이 있는 모든 파드에서 TCP 포트 80을 대상으로 하는 서비스를 만들고 추상화 된 서비스 포트 (targetPort : 컨테이너가 트래픽을 허용하는 포트, port:는 추상화 된 서비스 포트로 다른 포드가 서비스에 액세스하는 데 사용하는 포트)에 노출 합니다. 서비스 정의에서 지원되는 필드 목록을 보려면 서비스 API 개체로 확인합니다.
앞서 언급 했듯이 서비스는 파드 그룹에서 지원 되고 이러한 파드는 엔드 포인트를 통해 노출 됩니다. 서비스의 셀렉터는 지속적으로 평가되며 결과는 my-nginx 라고도 하는 엔드 포인트 객체에 게시 됩니다. 파드가 죽으면 엔드 포인트에서 자동으로 제거되고 서비스의 셀렉터와 일치하는 새 파드가 엔드 포인트에 자동으로 추가됩니다.
엔드 포인트를 확인합니다. IP는 첫 번째 단계에서 생성 된 파드와 동일합니다:
이제 클러스터의 모든 파드에서 CLUSTER-IP: PORT의 nginx 서비스를 curl로 확인 할 수 있습니다.
my-nginx Service IP
로 _MyClusterIP_라는 변수를 설정 합니다.
load-generator (컨테이너 내부에 MyClusterIP 변수도 설정 됨)라는 새 배포를 만들고 파드 컨테이너에서 대화형 TTY 셸을 가져 옵니다.
ClusterIP로 nginx의 welcome 페이지에 연결합니다.
결과는 다음과 같습니다.
exit을 입력하고 컨테이너를 빠져 나옵니다:
Last updated
Was this helpful?