쿠버네티스 - Service

Moon Blue의 IT 로그 📝·2023년 12월 8일
0

Service는 여러 Pod에 대한 네트워크 엔드포인트를 추상화하는 리소스이며 애플리케이션의 다양한 컴포넌트들이 서로 통신할 수 있도록 하는 중요한 개념 중 하나입니다

🔎 특징

  • 내부 네트워크 추상화 : Service는 클러스터 내에서 동작하는 다양한 Pod들에 대한 단일 가상 IP 주소와 포트를 제공하여 네트워크를 추상화합니다. 이로써 클러스터 내부에서 서비스에 접근하는 모든 클라이언트는 해당 가상 IP와 포트를 통해 서비스에 액세스할 수 있습니다.

  • Pod의 동적한 변화에 대한 대응 : Pod은 생성되고 삭제될 수 있습니다 Service는 이러한 Pod의 동적한 변화에 대응하여 가상 IP 주소 및 포트를 유지하고 클라이언트에게 변경사항을 숨기므로, 클라이언트는 변경 없이도 항상 동일한 서비스에 접근할 수 있습니다

  • 로드 밸런싱 : 여러 Pod들이 하나의 Service에 속할 수 있고, Service는 이들 Pod들 간에 트래픽을 분산하는 로드 밸런서 역할을 수행합니다 이는 애플리케이션의 가용성과 성능을 향상시키는 데 도움이 됩니다

  • DNS 이름 제공 : Service는 DNS 이름을 가지므로 클러스터 내에서 다른 리소스들이 해당 서비스를 참조할 때 DNS 이름을 통해 이를 식별할 수 있습니다

📚 주요 유형

  • ClusterIP : 기본적인 서비스 유형으로, 클러스터 내부에서만 사용 가능한 가상 IP를 제공합니다

  • NodePort : 클러스터 외부에서 서비스에 접근 가능한 고정 포트를 열고, 클러스터 내부에서는 ClusterIP를 사용합니다

  • LoadBalancer : 외부 로드 밸런서를 사용하여 클러스터 외부에서 서비스에 접근할 수 있도록 합니다

  • ExternalName : 외부 서비스에 대한 CNAME 레코드를 생성하여 클러스터 내부에서 외부 서비스에 접근할 수 있도록 합니다

📝 yaml 파일로 리소스 정의

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - port: 80
      # By default and for convenience, the `targetPort` is set to
      # the same value as the `port` field.
      targetPort: 80
      # Optional field
      # By default and for convenience, the Kubernetes control plane
      # will allocate a port from a range (default: 30000-32767)
      nodePort: 30007

🕹 리소스 다루기

# yaml 파일로 리소스 생성 또는 업데이트
kubectl apply -f sample-svc.yaml

# 생성
kubectl create svc [type-name] [svc-name] [tcp-name] --dry-run=client -o yaml -n [namespace]

# 파드, 서비스 함께 생성
kubectl run [pod-name] --image=[image=name] --port=[port-number] --expose # <-- 이 부분이 중요!!!

# 조회
kubectl get svc -o wide -n [namespace]

# yaml 형식으로 리소스 프린트
kubectl get svc -o wide -n [namespace]

# 수정
kubectl edit svc sample-svc -n [namespace]

# 삭제
kubectl delete svc sample-svc -n [namespace]

# 강제 삭제 후 변경사항 적용하여 재생성
kubectl replace --force -f sample-svc.yaml

# 상세정보 확인
# 대부분의 정보는 아래의 명령어로 응답받은 정보에서 확인 가능함
kubectl describe svc sample-svc -n [namespace]
profile
What a Beautiful World~ 🌏

0개의 댓글