반응형

본 글은 인프런 강의 "대세는 쿠버네티스 [초급~중급]" 를 듣고 요약 및 실습 정리한 내용입니다.

 

Service

  • 기본적으로 자신의 cluster ip를 가짐

 

 

  • Service를 Pod에 연결하면 Service IP를 통해 Pod에 접근 가능
  • Pod는 재생성될 때 IP가 변경되기 때문에 신뢰성이 떨어짐

Service의 종류는 3가지가 있음

1) ClusterIP

  • 외부 (External)에서 접근 불가
  • Cluster 내에서 접근 가능
  • Service의 9000 포트로 요청이 들어오면 Pod의 8080 포트와 연결이 됨

 

  • 하나의 Service에 여러개의 Pod를 연결시킬 수 있고 서비스가 트래픽을 분산해서 Pod에 전달해줌
  • 활용: 인가된 사용자, 내부 대쉬보드, pod의 서비스상태 디버깅

Service yaml 파일

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    app: pod
    ports:
      - port: 9000 # Service port 
      - targetPort: 8080 # Service에 연결된 Pod port
		type: ClusterIP # default로 생략가능

 

Pod yaml 파일

apiVersion: v1
kind: Pod
metadata:
  name: pod-1
labels:
  app: pod
spec:
  containers:
  - name: container
    image: tmkube/app
    ports:
    - containerPort: 8080
  • Service yaml파일의 targetPort와 pod yaml파일의 containerPort가 같아야 함

 

2) NodePort

  • 서비스에 clusterIP가 할당됨
  • 쿠버네티스에 할당된 모든 Node에 똑같은 Port가 할당됨
  • 외부에서 어떤 노드든 간에 접속이 되면 Service에 연결이 됨
  • 서비스는 자신과 연결된 Pod에 트래픽을 전달

 

주의할점

  • pod가 있는 node만 port가 할당되는게 아니라 모든 Node에 포트가 할당됨
  • 활용: 내부망 연결, 데모나 임시 연결용
apiVersion: v1
kind: Service
metadata:
  name: svc-2
spec:
  selector:
    app: pod
  ports:
  - port: 9000
    targetPort: 8080
    nodePort: 30000 # 30000 ~ 32767
  type: NodePort
  • externalTrafficPolicy: Local을 통해 각 Node에 속한 pod로 트래픽이 분산됨

3) Load Balancer (외부 시스템 노출용)

  • NodePort의 성격을 그대로 가지고 있고 추가적으로 Load Balancer가 생김 (트래픽 분산)

  • Load balancer에 접근하기 위한 외부 접속 ip주소는 별도로 할당하기 위한 플러그인 설치 필요
apiVersion: v1
kind: Service
metadata:
  name: svc-3
spec:
  selector:
    app: pod
  ports:
  - port: 9000
    targetPort: 8080
  type: LoadBalancer
반응형

'Kubernetes' 카테고리의 다른 글

Node schedule  (0) 2024.08.04
Pod - Container  (0) 2024.08.04
Pod - Label  (0) 2024.08.04

+ Recent posts