Ruff! Ruff!
[오픈소스] - 서비스 본문
서비스 타입 종류
- ClusterIP : 타입을 지정하지 않으면 기본으로 설정되며, 클러스터 내부의 파드에서 서비스의 이름으로 접근 가능
- 헤드리스 모드 가능 : 대표 IP 주소 없이 서비스 동작 -> 스테이트풀셋에서 활용
- NodePart : ClusterIP의 접근 범위뿐만 아니라 K8s 클러스터 외부에서도 노드의 IP주소와 포트번호로 접근 가능
- ClusterIP 기능 + 노드의 IP 주소의 포트 공개
- 클러스터 외부에서 내부의 파드에 요청 보낼 수 있음
- 정식 서비스에 사용하진 않음
- LoadBalancer : NodePort의 접근 범위뿐만 아니라 K8s 클러스터 외부에서 대표 IP 주소로 접근 가능
- NodePort 기능 + 외부에서 대표 IP 주소로 접근 가능
- ExternalName : K8s 클러스터 내의 파드에서 외부 IP 주소에 서비스의 이름으로 접근 가능
- 파드에서 클러스터 외부의 엔드포인트에 접속하기 위한 이름을 해결
서비스와 파드의 연결
- 서비스가 요청 전송 파드 결정하는 방법
- 셀럭터의 라벨과 일치하는 파드를 etcd로부터 선택
- 라벨이 중복되지 않도록 주의
서비스의 매니페스트 작성법
- 디플로이먼트의 매니페스트
## 디플로이먼트
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deploy
spec:
replicas: 3
selector: # 디플로이먼트와 파드를 매핑하는 설정
matchLabels:
app: web
template: # 파드 템플릿
metadata:
labels:
app: web # 파드에 부여할 라벨
spec:
containers:
- name: nginx
image: nginx: latest
- 서비스의 매니페스트
## 서비스
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
- 서비스 API
- kind : Service 설정
- apiVersion : v1 설정
- metadata : name에 네임스페이스 내 유일한 이름을 설정. 여기서 설정한 이름은 내부 DNS에 등록되며, IP주소 해결에 사용. 또한 이후 기동된 피드의 환경 변수에 설정
- spec : 서비스의 사양
- type : 서비스 공개 방법을 설정. 선택이 가능한 타입은 ClusterIP, NodePort, LoadBalancer, ExternalName
- ports : 서비스에 의해 공개되는 포트번호
- selector : 여기서 설정한 라벨과 일치하는 파드에 요청을 전송. 서비스 타입이 ClusterIP, NodePort, LoadBalancer인 경우에 해당하며 ExternalName인 경우는 무시. 이 항목을 설정하지 않는 경우 외부에서 관리하는 엔드포인트를 가진 것으로 간주
- sessionAffinity : 설정이 가능한 세션 어피니티는 ClientIP. 생략 시 none으로 설정
- clusterIP : 이 항목을 생략하면 대표 IP주소가 자동으로 할당. none을 설정하면 헤드리스로 동작
- name : port가 하나인 경우는 생략 가능. 여러 개인 경우는 필수 설정 필요. 각 포트의 이름은 서비스 스펙 내에서 유일해야 함
- protocol : 생략 시에는 TCP가 설정됨. (TCP or UDP)
- nodePort : 생략 시에는 시스템이 자동으로 할당. type이 NodePort나 LoadBalancer인 경우 모든 노드에서 포트를 공개. 설정한 포트가 이미 사용 중인 경우 오브젝트 생성에 실패
- targetPort : 생략 시에는 port와 동일한 값이 사용됨. selector에 의해 대응되는 파드가 공개하는 포트번호 또는 포트 이름을 설정함
'CS' 카테고리의 다른 글
[오픈소스] - 컨테이너 오케스트레이션과 Kubernetes (1) | 2024.10.29 |
---|---|
[오픈소스] - CI 환경 구축 (0) | 2024.10.22 |
[오픈소스] - Docker를 활용한 개발 (1) | 2024.10.15 |
[오픈소스] - Docker 사용법 (3) | 2024.10.08 |
[오픈소스] - 컨테이너와 도커 (1) | 2024.10.01 |