Service
- 파드의 IP 구성정보
-> 파드마다 특정 IP 주소를 할당받음 (고정되지 않음)
매번(재부팅/파드재시작 자동으로 생성) 변경
- 어플리케이션 접근을 위해 고정된 주소가 필요 (어플리케이션 하나 당 IP 주소 하나)
=> 컨트롤러에 의해 실행되는 파드들 전체에 대해 하나
- 개념 : 파드 / 외부 간의 통신을 위해 고정된 IP 주소를 할당하는 오브젝트
-> 노드에 구애받지 않고 여러 파드(동일 컨트롤러)에 주소 하나
파드에 대한 로드벨런싱 기능 등을 제공
파드 하나에 여러 개의 서비스가 연결될 수도 있다.
컨트롤러의 셀렉터 = 파드 레이블
서비스의 셀렉터 = 파드 레이블
컨트롤러의 셀렉터 != 서비스의 셀렉터 ( 꼭 같을 필요는 없음 )
- 종류
1. ClusterIP - 내부용(파드끼리) IP 주소를 사용
내부용 IP 주소를 굳이 사용하는 이유 : 고정IP , 로드밸런싱
파드와 연결 시 label / selector 사용
---------------------------------
2. NodePort - 물리적인 시스템(노드)의 IP 주소를 사용하면서 포트포워딩 설정
3. LoadBalancer - 쿠버네티스 클러스터 외부에 로드벨런싱 장치를 연결해서 구성
=> 클라우드 환경은 자체적인 LB 사용
=> 온프레미스 환경에서는 MetalLB 등을 사용
=> 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서 IP 이용해 접근
--------------------------------- 외부용(쿠버네티스 클러스터 외부에서도 접근 가능)
ExternalName - 안에서 외부로 접근할 때 사용할 이름주소를 제공
내부적으로 사용하는 FQDN 을 통해서 외부의 시스템으로 접근 (CNAME)
- 서비스 FQDN
각 서비스는 이름에 따라 할당된 FQDN 을 보유
SERVICENAME . NAMESPACE . svc . cluster . local
svc : 오브젝트 종류
cluster.local : 쿠버네티스 클러스터의 도메인 이름
Kube-proxy
- 역할 : 파드 간의 통신을 담당 (네트워크 구성)
- 방식 : userspace / iptables / IPVS
userspace -> iptables ( 성능 )
kube-proxy 가 아닌 iptables 를 통해 트래픽을 전달받고 전달하는 방식
kube-proxy 는 iptables 를 관리
C1 = 10.233.101.145
C2 = 10.233.103.86
C1 컨테이너(파드)에서 C2 주소로 요청
C1 컨테이너 -> 브릿지(쿠버네티스) -> 1번 노드(물리인터페이스)
-> Dest IP 주소를 파드에서 노드 변경 ( Netfilter + iptables )
=> 노드는 파드의 주소를 모를 수 있으니까 동일한 네트워크인 노드의 주소로 변경
-> 1번 노드에서 라우터로 전달 -> 라우팅 테이블 확인 -> 해당노드(2번)로 전달
-> Dest IP 주소를 노드에서 파드 변경 ( Netfilter + iptables )
-> 노드 -> 브릿지 -> C2컨테이너
실습
ClusterIP
- yaml 파일 작성
spec.ports.port: 서비스가 생성할 Port
spec.ports.tragetPort: 서비스가 접근할 Pod의 Port (기본 : port랑 동일)
spec.selector: 서비스가 접근할 Pod의 label 조건
spec.type: 서비스 타입; (default: ClusterIP)
spec.clusterIP: 10.0.10.10 (default: 자동설정)
NodePort
LoadBalancer
'MLOps > K8S' 카테고리의 다른 글
컨트롤러 (Daemonset, Statefulset, Job, CronJob) (0) | 2022.03.28 |
---|---|
컨트롤러 (ReplicaSet, Deployment) (0) | 2022.03.26 |
파드 관리 (0) | 2022.03.26 |
아키텍쳐 및 명령어 기본 (0) | 2022.03.26 |