일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바
- db
- programmers
- 리눅스
- 깃
- 머신러닝
- 정처기
- git
- 알고리즘
- 코딩테스트
- Ai
- 우분투
- Linux
- 프로그래머스
- LV 0
- ubuntu
- Lv 2
- 쿠버네티스
- 자료구조
- 인공지능
- mysql
- 코테
- 파이썬
- Java
- github
- docker
- Kubernetes
- Python
- DevOps
- 데이터베이스
Archives
- Today
- Total
Myo-Kyeong Tech Blog
[Kubernetes] 쿠버네티스 네트워크 통신 오브젝트 : Service 와 Ingress 본문
728x90
반응형
Service
- 각 파드는 고유한 IP를 할당받지만, 동적으로 생성되고 제거되기 때문에 IP 주소가 자주 변경될 수 있음
- Service는 이러한 파드들에 대한 하나의 고정된 IP 주소와 포트를 제공
- 파드의 생성과 소멸에 관계없이 일관된 방식으로 파드에 접근할 수 있음
Service 유형 : ClusterIP, NodePort, LoadBalancer
1. ClusterIP
- 기본 서비스 유형, 클러스터 내부에서만 접근 가능한 내부 IP를 할당받음
- 클러스터 외부에서는 접근할 수 없음
- ClusterIP 주소로 요청하면, 쿠버네티스는 자동으로 연결된 파드 중 하나로 라우팅하여 처리
[ClusterIP 서비스 YAML 파일 예시]
apiVersion: v1
kind: Service
metadata:
name: my-web-service # 서비스 이름
spec:
type: ClusterIP
selector:
app: my-web-app # 어떤 파드들과 연결될지 결정하는 라벨 셀렉터
ports:
- protocol: TCP
port: 80 # 외부에서 접근할 때 사용할 포트
targetPort: 8080 # 서비스 요청을 받을 파드의 포트
2. NodePort
- ClusterIP는 내부에서만 통신할 수 있기 때문에 외부 브라우저로는 접근할 수 없음
- 클러스터 외부에서 파드에 접근하기 위해 사용되는 서비스 유형
- 모든 노드에서 특정 포트를 개방하여, 외부에서 그 포트를 통해 파드에 접근 가능
- NodePort 서비스 생성할 때, 자동으로 30000-32767 범위에서 하나의 포트를 할당하거나, 사용자가 지정한 포트를 사용
- 지정된 포트는 클러스터의 모든 노드에서 동일하게 열림
[NodePort 서비스 YAML 파일 예시]
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30007 # 외부에서 접근할 때 사용할 노드의 포트, 자동할당 원하지 않을 경우 명시적으로 지정
3. LoadBalancer
- 외부 트래픽을 클러스터 파드로 분산시키는 데 도움을 줌
- 모든 파드가 균등한 트래픽을 받아 처리할 수 있게 도와줌
- 대규모 트래픽 처리하는 프로덕션 환경에서 추천
- 특히 클라우드 환경에서 매우 유용
- 대부분의 클라우드 환경에서는 LoadBalancer 타입의 서비스를 쉽게 설정하고 관리 할 수 있음
Ingress
- Service는 IP, 포트로만 접근하는 것이라면 Ingress는 도메인 이름, 도메인 뒤의 path에 따라 접속할 수 있음
[Service + Ingress 서비스 YAML 파일 예시]
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
'my-service'는 ClusterIP 서비스로 구성되어 있어 클러스터 내부에서만 접근 가능하며, 'my-ingress'는 외부에서 'myapp.example.com' 도메인으로 들어오는 요청을 'my-service'로 라우팅한다.
REFERENCE
728x90
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
[Kubernetes] Metric API 오류 해결 방법 : Docker Desktop에 Metrics Server 설치 및 TLS 인증 문제 해결 (1) | 2024.08.11 |
---|---|
[Kubernetes] 쿠버네티스 CronJob으로 작업 스케줄링하기 (3) | 2024.03.06 |
[Kubernetes] Kubernetes Dashboard 설치하기 (0) | 2024.03.02 |
[Kubernetes] Docker Desktop에서 쿠버네티스 사용 설정하기 (0) | 2024.03.02 |
[Kubernetes] 쿠버네티스 오브젝트 - 파드(Pod), 레플리카셋(ReplicaSet), 디플로이먼트(Deployment) (0) | 2024.02.11 |