K8s 서비스

vernolog·2024년 6월 22일

K8s

목록 보기
1/2
post-thumbnail

K8S 서비스

  • 유동적으로 생성되는 Pod 그룹의 단일 진입점을 제공

ClusterIP 서비스

  • ClusterIP를 사용하면, 쿠버네티스 Cluster 안의 pod끼리 통신 가능
  • pod 그룹의 단일 진입점 : virtual IP 생성
  • 어떤 파드에서 다른 파드 그룹으로 접근할때 서비스를 거쳐 가도록 할 수 있음
  • 서비스 명으로 네임 레졸루션 가능
  • 단, 외부로부터는 접근 X
    • 클러스터 외부와의 통신을 위해서는 NodePort나 LoadBalancer 서비스가 필요

NodePort 서비스

  • Cluster IP를 생성한후, 모든 worker node에 외부에서 접속 가능한 포트 예약.
  • 즉 ClusterIP 서비스에서 확장되어, NodePort까지 열어주는 기능 제공
  • NodePort 서비스를 생성한후 port가 80:31058/TCP 라고 되어 있으면, 노드의 포트 31058 를 통해 서비스에 접근할 수 있다. 이를 이용하여 서비스를 쿠버네티스 클러스터 외부로 공개 가능

LoadBalancer 서비스

  • 각 클라우드 플랫폼에서 제공하는 로드 밸런서(GCP의 Cloud Load Balancing, AWS의 Elastic Load Balancing 등)와 연동하기 위해 사용됨
  • 로컬 쿠버네티스 환경에서는 사용 불가능

ExternalName 서비스

  • 쿠버네티스 클러스터에서 외부 호스트를 네임 레졸루션 하기 위한 별명 제공
  • 클러스터 안에서 외부에 접속시 사용할 도메인을 등록해서 사용
  • 예를 들어 아래와 같은 서비스를 생성하면, google.com를 google로 참조할 수 있음
    apiVersion: v1
    kind: Service
    metadata:
    	name: google
    spec:
    	type: ExternalName
    	externalName: google.com

서비스의 네임 레졸루션

  • 네임 레졸루션 : 이용자의 요구에 따라 도메인 이름에 대응하는 IP 주소를 찾아내는 것
  • 쿠버네티스 클러스터의 DNS는 서비스를 서비스명.네임스페이스명.svc.local 로 연결해줌
  • 예를 들어 서비스명이 echo, 네임스페이스가 default인 경우
    • curl http://echo.default.svc.local
    • curl http://echo.default : svc.local 생략가능
    • curl http://echo : 같은 네임스페이스인 경우, 서비스명안으로 참조가능. 가장 많이 사용되는 방법이라고 함

서비스와 접근 범위 정리

  • K8s에서 기본적으로 파다에는 각각 고유의 가상 IP 주소가 할당되므로, 파드내 클러스터 끼리 통신 가능
  • Cluster IP를 통해서 클러스터내 파드와 파드 통신 가능
  • NodePort와 LoadBalancer 을 통해 클러스터 외부와 통신 가능

참고자료

0개의 댓글