알았어, 태기야! 업데이트된 내용까지 모두 확인했어. 제안했던 큰 주제들 대신, 작지만 쿠버네티스를 이해하는 데 정말 정말 중요한 핵심 개념 하나를 먼저 짚고 넘어가 보자.
바로 쿠버네티스의 모든 오브젝트들을 연결하는 **영혼의 단짝, 레이블(Labels)과 셀렉터(Selectors)**에 대해서야! 네가 작성한 Deployment나 Service YAML 파일에도 이 친구들이 항상 등장했었지? 오늘은 이 둘이 어떻게 마법처럼 서로를 찾아내는지 그 원리를 파헤쳐 볼게! 😄
제목: ✅ [개념정리] 쿠버네티스의 영혼의 단짝, 레이블과 셀렉터! 🏷️ (오브젝트를 연결하는 법)
부제 (선택): Service는 어떻게 내 Pod를 찾아낼까? 쿠버네티스 연결의 비밀! 🔎
[들어가며: 어떻게 서로를 알아볼까?]
우리가 지난 실습에서
Deployment로 여러 개의 톰캣 파드(Pod)를 만들고, Service를 통해 외부로 노출시켰던 거 기억나? 여기서 한 가지 궁금증이 생겨.
"파드는 언제든 죽고 새로 생기면서 IP가 계속 바뀌는데, 서비스는 어떻게 용케 자기가 담당해야 할 파드들을 정확히 찾아내서 트래픽을 전달하는 걸까?"
이 질문에 대한 해답이 바로 오늘 우리가 배울 **레이블(Labels)**과 **셀렉터(Selectors)**에 있어. 이 둘은 쿠버네티스에서 분리된 오브젝트들을 논리적으로 연결해 주는 아주 간단하면서도 강력한 '꼬리표'와 '찾기' 기능이야.
Part 1: 레이블 (Labels) 이란? – 내 오브젝트에 이름표 붙이기 🏷️
레이블은 말 그대로 쿠버네티스 오브젝트(파드, 디플로이먼트, 서비스 등)에 붙이는 키-값(Key-Value) 쌍의 이름표야.
- 목적: 오브젝트들을 정리하고 분류하기 위해 사용돼. 이 이름표 자체가 오브젝트의 동작에 직접적인 영향을 주지는 않지만, 우리가 특정 조건에 맞는 오브젝트 그룹을 쉽게 찾아 선택할 수 있도록 도와주지.
위 코드에서YAML# tomcatdep.yaml ... spec: replicas: 2 selector: ... template: # <-- 이 template이 바로 파드를 만드는 설계도! metadata: labels: app: tomcat # <-- 바로 이거! 이 디플로이먼트가 만드는 모든 파드에 이 이름표를 붙여줘! ...env: production, tier: backend처럼 여러 개의 이름표를 동시에 붙일 수도 있어.- .template.metadata.labels 부분은 이 디플로이먼트가 생성하는 모든 파드에게 app: tomcat이라는 이름표(레이블)를 붙여주라는 의미야 . 물론
- 예시: 네가 작성했던 tomcatdep.yaml 파일을 다시 볼까?
Part 2: 셀렉터 (Selectors) 란? – 원하는 이름표를 가진 친구 찾기 🔎
셀렉터는 레이블이 붙은 오브젝트들을 찾아내고 선택하기 위한 필터링 규칙이야. "이런이런 이름표를 가진 친구들만 모여봐!" 하고 외치는 역할이지.
- 역할: 서비스(Service)는 셀렉터를 사용해서 자신과 연결될 파드 그룹을 찾고, 디플로이먼트(Deployment)는 셀렉터를 사용해서 자신이 관리해야 할 파드 그룹을 식별해.
위 코드에서 .spec.selector 부분이 바로 셀렉터야.YAML# nodeport.yaml apiVersion: v1 kind: Service metadata: name: tc-svc spec: selector: app: tomcat # <-- 바로 이거! 이름표가 'app: tomcat'인 파드들을 찾아줘! ports: ... type: NodePortapp: tomcat이라는 이름표를 가진 모든 파드를 찾아서, 그 파드들에게 트래픽을 보내줘!"**라고 알려주는 거야.- app: tomcat이라고 적혀있지? 이건 이 서비스에게 **"클러스터 내에서
- 예시: 이번엔 네가 작성한 서비스 YAML 파일 nodeport.yaml을 보자.
Part 3: 전체 흐름 연결하기 – 영혼의 단짝이 만나는 과정 🤝
이제 레이블과 셀렉터가 어떻게 함께 작동하며 디플로이먼트와 서비스를 연결하는지 전체 흐름을 정리해 보자.
- [파드 생성] 개발자가 kubectl apply -f tomcatdep.yaml 명령을 실행하면, 디플로이먼트는 자신의 template에 정의된 대로 app: tomcat이라는 레이블이 붙은 파드들을 replicas 수만큼 생성하고 관리하기 시작해.
- [연결 대상 탐색] 동시에, tc-svc라는 서비스는 자신의 selector에 정의된 app: tomcat이라는 조건에 맞는 파드들을 클러스터 내에서 계속 찾아다녀.
- [엔드포인트 목록화] 서비스는 app: tomcat 레이블을 가진 파드들을 발견하면, 그 파드들의 내부 IP 주소와 포트 정보를 자신의 엔드포인트(Endpoints) 목록에 자동으로 등록하고 계속 최신 상태로 유지해.
- [트래픽 전달] 외부에서 로드 밸런서를 통해 이 서비스로 트래픽이 들어오면, 서비스는 자신의 엔드포인트 목록에 있는 건강한 파드 중 하나를 골라 트래픽을 안전하게 전달해 주는 거야!
이처럼 레이블과 셀렉터 덕분에, 파드가 죽고 새로 생겨서 IP가 바뀌더라도 서비스는 전혀 신경 쓸 필요 없이 **오직 이름표(레이블)**만 보고 대상을 찾아낼 수 있어. 디플로이먼트와 서비스가 서로의 존재를 직접 알지 못해도(느슨한 결합, Loose Coupling), 레이블과 셀렉터라는 중매쟁이를 통해 완벽하게 협력할 수 있는 거지!
[마무리하며 ✨]
오늘은 쿠버네티스의 모든 오브젝트를 연결하는 가장 기본적이면서도 강력한 접착제, 레이블과 셀렉터에 대해 알아봤어. 이 간단한 '이름표 붙이고 찾기' 메커니즘이 바로 쿠버네티스가 복잡한 마이크로서비스 환경을 유연하고 탄력적으로 관리할 수 있게 해주는 핵심 비결 중 하나야.
앞으로 쿠버네티스 매니페스트 파일을 작성할 때, 이 레이블과 셀렉터를 어떻게 의미 있게 설계하고 활용할지 고민해 보는 것도 좋은 습관이 될 거야! 😊
'02. 클라우드 보안 공부 > 개념정리' 카테고리의 다른 글
| ✅ [개념정리] 쉘 스크립트의 작은따옴표('')와 큰따옴표(""), 결정적 차이! (2) | 2025.07.29 |
|---|---|
| ✅ [개념정리] Dockerfile의 CMD와 ENTRYPOINT, 뭐가 다를까? 🤔 (헷갈리는 개념 바로잡기) (0) | 2025.07.29 |
| ✅ [개념정리] 쉘 스크립트의 마법 주문, set -eux! 🧙♂️ (스크립트 디버깅 & 안정성 높이기) (2) | 2025.07.21 |
| ✅ [개념정리] 파드, 컨테이너, 도커, 쿠버네티스: 핵심 관계 완전 정복!🏗️ (0) | 2025.05.23 |
| ✅ [개념정리] DevOps 환경 구축과 클라우드 인프라 관리 (0) | 2025.05.19 |