5.1. 네트워크
어떨 때 보는가
- 배포한 애플리케이션에 접속되지 않을 때
- 외부 접속 주소를 확인할 때
- 서비스끼리 통신이 막혀 있을 때
파드 주소는 왜 문제인가
파드는 만들어질 때마다 새 IP 주소를 받습니다. 다시 만들어지면 주소가 바뀌고, 복제본을 늘리면 주소가 여러 개가 됩니다.
| 상황 | 파드 주소 |
|---|---|
| 파드가 다시 시작 | 바뀝니다 |
| 새 버전 배포 | 전부 바뀝니다 |
| 복제본 3개 | 주소가 3개 |
| 노드 이동 | 바뀝니다 |
그래서 파드를 주소로 직접 부르면 안 됩니다. 부르는 쪽이 매번 주소를 알아내야 하고, 여러 개일 때 어디로 보낼지도 정해야 합니다.
Kubernetes 는 이 문제를 Service 로 해결합니다.
네트워크 자원 관계
Service 란
파드 묶음에 고정된 이름과 주소를 주는 자원 입니다.
Service 를 만들면 세 가지가 생깁니다.
| 생기는 것 | 설명 |
|---|---|
| 고정 IP (ClusterIP) | 파드가 바뀌어도 이 주소는 그대로입니다 |
| DNS 이름 | 주소 대신 이름으로 부를 수 있습니다 |
| 부하 분산 | 뒤에 파드가 여럿이면 나눠 보냅니다 |
부르는 쪽은 Service 이름만 알면 됩니다. 뒤에 파드가 몇 개인지, 어느 노드에 있는지, 지금 막 재시작했는지 신경 쓰지 않아도 됩니다.
DNS 이름 규칙은 이렇습니다.
| 부르는 위치 | 쓰는 이름 |
|---|---|
| 같은 네임스페이스 | <서비스이름> |
| 다른 네임스페이스 | <서비스이름>.<네임스페이스> |
| 전체 이름 | <서비스이름>.<네임스페이스>.svc.cluster.local |
Service 가 파드를 찾는 방법
Service 는 파드를 이름으로 지정하지 않습니다. 레이블(label)로 고릅니다.
이 방식이라 파드가 새로 생기거나 사라져도 Service 설정을 고칠 필요가 없습니다. 레이블만 맞으면 자동으로 대상에 들어갑니다.
반대로, 레이블이 한 글자라도 다르면 연결되지 않습니다. 연결 문제의 절반이 여기서 생깁니다.
Service 유형
| 유형 | 접근 범위 | 쓰는 상황 |
|---|---|---|
| ClusterIP | 클러스터 안에서만 | 기본값. 내부 서비스끼리 부를 때 |
| NodePort | 노드의 특정 포트로 외부에서 | 임시 확인, 로드밸런서가 없는 환경 |
| LoadBalancer | 외부 로드밸런서를 통해 | 클라우드 환경 |
| ExternalName | 외부 주소로 넘김 | 클러스터 밖 시스템을 이름으로 부를 때 |
웹 서비스는 보통 ClusterIP + Ingress 조합을 씁니다.
NodePort 는 30000~32767 범위의 포트를 씁니다. 포트 번호를 외워야 하고 노드 주소가 바뀌면 접속 주소도 바뀌므로, 임시 확인 외에는 권하지 않습니다.
Service 목록
네트워킹 > 서비스 로 들어갑니다.

| 열 | 설명 |
|---|---|
| 이름 | Service 이름. 클러스터 안에서 이 이름으로 부릅니다 |
| 네임스페이스 | 속한 네임스페이스 |
| 유형 | 노출 방식 |
| 클러스터 IP | 클러스터 내부 주소 |
| 포트 | 받는 포트와 전달할 포트 |
Service 상세
이름을 누르면 상세 화면이 열립니다.
