Search
Duplicate
📒

[Kubernetes Infra] 03-2. 네트워킹 - Service

상태
완료
수업
Kubernetes Infra
주제
연관 노트
3 more properties
참고

Service

NOTE
Service오브젝트는 Pod의 계속 변화하는 IP주소를 일정한 값으로 유지하기 위해 사용한다!
각 Service의 타입들이 통신하는 방법
k expose pod/deployment [이름] \ --type=ClusterIP \ --port=[사용 포트] \ --target-port=[파드 포트] # 생략시 port와 동일 k expose pod/deployment [이름] \ --type=NodePort \ --name=my-nodeport-service \ --port=[사용 포트] \ --node-port=[노드 포트] \ --target-port=[파드 포트] # 생략시 port와 동일 k expose deploy front-end \ # expose는 --dry-run으로 하면 svc yaml이 출력됨 --name=front-end-svc \ --type=NodePort \ --port=80 --dry-run \ -o yaml > 6-svc.yaml
Bash
복사
expose를 통한 명령형 방식
Service는 파드들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출시키는 가상의 컴포넌트입니다. 파드는 언제든 다른 노드로 옮겨지거나 삭제되며 새로운 IP를 할당받게 되어 통신이 어려워지기 때문에이러한 문제를 극복하기 위해 파드가 고정적인 IP를 할당받아 통신할 수 있는 서비스를 사용합니다.
Service는 네트워크 부분을 담당하는 객체로, ClusterIP, NodePort, LoadBalancer라는 세 가지 유형이 있습니다.

ClusterIP

NOTE
ClusterIP는 쿠버네티스 클러스터 내부에서만 접근할 수 있는 내부 IP주소를 Service에 할당한다!
pod 업데이트 시 pod가 죽고 새로 뜨게된다. 이 때 pod의 ip는 언제든지 바뀌게 되므로 ClusterIP를 사용한다.
서비스를 지원하는 Pod는 여러개일 수 있으며, Selector를 통해 서비스와 연결될 Pod를 정의한다.
1개의 서비스 Object는 Deployment로 생성된 다수의 Pod와 연동될 수 있으며, kube-proxy가 로드 밸런싱을 진행해준다.
apiVersion: v1 kind: Service metadata: name: redis labels: name: redis-service app: demo-voting-app spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-pod app: demo-voting-app
YAML
복사
예시 코드

NodePort

NOTE
NodePort는 ClusterIP의 모든 기능을 포함하며, 추가로 외부에서 접근하는 방법을 제공한다!
apiVersion: v1 kind: Service metadata: name: myapp-service spec: type: NodePort ports: - port: 80 # Service port targetPort: 80 # pod port nodePort: 30004 # external port selector: app: myapp
YAML
복사
app: myapp (pod)는 외부 30004 pod에서 연결가능하다. ex) http://<노드의 주소>:30004로 접속하면 내부에서 myapp pod에 80:80port로 통신한다.