Services
- 네트워크를 통해 외부 또는 내부에서 안정적으로 접근할 수 있도록 하는 추상화된 리소스
- Pod는 일시적인 존재로, IP 주소가 자주 변경되므로, 클러스터 내에서 다른 Pod가 지속적으로 특정 Pod에 접근하기 어렵고, 외부에서도 접근하기 힘들기 때문에 Service를 사용한다.
NodePort
- service가 내부 포트를 Node의 포트에 액세스할 수있게 하는 곳
- 클러스터 외부에서 접근할 수 있도록 Node의 특정 포트를 열어줌
- 외부 트래픽이 이 포트를 통해 들어와 service를 통해 Pod에 전달
- TargetPort
- service가 요청을 전달하는 곳
- Pod에 붙어있음
- Port
- service에 붙어있음
- ClusterIP와 함께 동작(기본적으로 ClusterIP가 생성)
- NodePort
- 웹 서버에 액세스 하는 데 사용- Node에 붙어있음
- 30,000 ~ 32,767의 범위
- TargetPort
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: NodePort
ports:
- targetPort: 80 # ClusterIP에서 사용하는 포트
port: 80(필수) # Pod에서 사용하는 포트
nodePort: 30008 # NodePort에서 사용하는 포트
selector # Pod 정보 작성
app: myapp
type: front-end
- targetPort를 지정하지 않으면 port와 같다.
- nodePort를 지정하지 않으면 유효한 범위에서 자동으로 설정된다.
1. 30008 포트를 열어 외부 트래픽을 받아들인다
2. 이 트래픽은 port를 통해 Service로 전달된다.
3. Service는 targetPort번호로 전달하여 해당 포트를 사용하는 Pod들에게만 전달한다.
4. 선택된 Pod들 중 selector에 맞는 Pod들에게만 트래픽이 전달된다.
- 여러개의 Pod와 연결될 때, 랜덤 알고리즘으로 로드밸런싱
Services Cluster IP
- 클러스터 내부에서만 접근 가능한 IP 주소 할당
- 여러 개의 Pod(ex 백엔드 pod)를 하나로 묶어 단일 인터페이스 제공
- 내부 서비스들간의 통신 담당(외부 접근X)
apiVersion: v1
kind: Service
metadata:
name: back-end
spec:
type: ClusterIP
ports:
- targetPort: 80
port: 80
selector # Pod 정보 작성
app: myapp
type: back-end
Services - Loadbalancer
- 클라우드 환경에서 외부 트래픽을 수신하고 service로 보낼 때 사용
- 외부 트래픽을 여러 서버 또는 인스턴스로 분산(NordPort, ClusterIP로 전달 후 Pod로 도달)
- GCP, AWS, Azure에서 제공
Practice
- Service 수 조회
- kubectl get service
- 세부 조회
- kubectl describe service 이름
- Service 생성
- kubectl create -f 파일명.yaml
- kubectl create service clusterip my-cs --tcp=5678:8080
- kubectl create service clusterip my-cs --clusterip="None"
- kubectl create service nodeport my-ns --tcp=5678:8080
- kubectl create service loadbalancer my-lbs --tcp=5678:8080
뒤에 --dry-run=client -o yaml을 붙이면 yaml파일 정의
- curl http://ip.portnumber : ip 주소에 있는 서버의 portnumber로 HTTP 요청을 보내고, 응답을 터미널에 출력
'CKA' 카테고리의 다른 글
| [Udemy CKA - Core Concepts] Imperative vs Declarative (0) | 2024.08.19 |
|---|---|
| [Udemy CKA - Core Concepts] Namespaces (0) | 2024.08.19 |
| [Udemy CKA - Core Concepts] Deployments (0) | 2024.08.11 |
| [Udemy CKA - Core Concepts] ReplicaSet (0) | 2024.08.10 |
| [Udemy CKA - Core Concepts] Pods (0) | 2024.08.09 |