728x90
쿠버네티스 (Kubernetes) 서비스
쿠버네티스 네트워크
- Pod Network
: CNI에서 관리하는 Pod 간 통신에 사용되는 클러스터의 전체 네트워크
- Service Network
: Service discovery를 위해 Kube-proxy가 관리하는 Cluster-wide 범위의 Virtual IP
🔎 CNI
: 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준
- 컨테이너들의 네트워크를 연결
- 컨테이너 삭제 시 할당된 자원을 제거
쿠버네티스 서비스
- 파드를 통해 실행되고 있는 어플리케이션을 네트워크에 노출 시키는 가상의 컴포넌트
- 파드가 외부와 통신할 수 있도록 클러스터 내부에서 고정적인 IP를 갖는 서비스를 이용할 수 있음
쿠버네티스 서비스 유형
1️⃣ ClusterIP (Private LoadBalancer, Default)
- Pod 그룹의 단일 진입점 (Virtual IP) 생성
- 10.96.0.0/12 (10.96.0.0 ~ 10.111.255.255) 범위 내에서 Random한 IP 할당
- 클러스터 내부에서만 사용 가능
CLI
kubectl expose rs rs-appjs --type ClusterIP --port 80 --target-port 8080 \
--name svc-appjs
kubectl get services
curl [ip]
Yaml
- dry run으로 Yaml 파일 생성
kubectl expose rs rs-appjs --type ClusterIP --port 80 --target-port 8080 --name \
svc-appjs --dry-run=client -o yaml > svc-appjs-lab.yaml
- Label이 기준이기 때문에 잘 설정해야 함
vi svc-appjs-lab.yaml
~
apiVersion: v1
kind: Service
metadata:
name: svc-appjs
spec:
type: ClusterIP
clusterIP: 10.100.100.100
selector:
app: appjs
ports:
- port: 80
🔎 Session Affinity
: 특정 클라이언트에서 생성된 모든 요청을 매번 같은 Pod로 연결
None과 ClientIP Type이 있음
apiVersion: v1
kind: Service
metadata:
name: svc-session
spec:
type: ClusterIP
clusterIP: 10.100.100.101
sessionAffinity: ClientIP
selector:
app: appjs
ports:
- port: 80
protocol: TCP
targetPort: 8080
🔎 ExternalPort
: 노드의 IP에 Port를 열어줌
apiVersion: v1
kind: Service
metadata:
name: svc-external
spec:
type: ClusterIP
clusterIP: 10.100.100.103
selector:
app: appjs
externalIPs:
- 172.31.14.246 #Node1의 IP
ports:
- port: 80
protocol: TCP
targetPort: 8080
2️⃣ NodePort(외부에서 접속 가능한 Port)
- ClusterIP가 생성된 후 모든 WorkerNode에 외부에서 접속 가능 한 포트가 예약
- ClusterIP + NodePort 오픈(30000 - 32767)
apiVersion: v1
kind: Service
metadata:
name: svc-nodeport
spec:
type: NodePort
selector:
app: appjs
ports:
- port: 80
protocol: TCP
targetPort: 8080
nodePort: 30123
3️⃣ LoadBalancer
- 클라우드 인프라스트럭처나 오픈스택 클라우드에 적용
- LoadBalancer를 자동으로 프로 비전하는 기능 지원
apiVersion: v1
kind: Service
metadata:
name: svc-lb
spec:
type: LoadBalancer
selector:
app: appjs
ports:
- port: 80
protocol: TCP
targetPort: 8080
4️⃣ ExternalName
- 클러스터 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용
- 클러스터 도메인이 실제 외부 도메인으로 치환되어 동작
apiVersion: v1
kind: Service
metadata:
name: custom-svc
spec:
type: ExternalName
externalName: www.bespinglobal.com
반응형
'🐳 Container > K8S' 카테고리의 다른 글
[K8s] 쿠버네티스(Kubernetes) Volume 관리 (0) | 2023.04.09 |
---|---|
[K8s] 쿠버네티스(Kubernetes) Ingress (0) | 2023.04.03 |
[K8s] 쿠버네티스(Kubernetes) 컨트롤러 (2) (0) | 2023.03.28 |
[K8s] 쿠버네티스(Kubernetes) 컨트롤러 (1) (0) | 2023.03.27 |
[K8s] 쿠버네티스(Kubernetes) 레이블(Labels) (0) | 2023.03.27 |