[k8s] 서비스 타입의 종류 (ClusterIP, NodePort, LoadBalancer, ExternalName)

sang yun Lee·2023년 5월 18일
0

데브옵스 개념 정리

목록 보기
10/14

개요


서비스타입은 쿠버네틱스 외부와 쿠버네틱스 내부와의 트래픽 통신의 흐름을 정의할 때 사용된다. 쿠버네틱스의 서비스 타입에 대해서 알아보자 (ClusterIP, NodePort, LoadBalancer, ExternalName)

1. ClusterIP



ClusterIP는 Kubernetes의 기본 서비스 유형입니다. 클러스터 내부 IP 주소에 서비스를 노출하므로 클러스터 내에서만 액세스할 수 있습니다. 이 유형의 서비스는 일반적으로 클러스터 내의 서로 다른 구성 요소 또는 마이크로 서비스 간의 통신에 사용됩니다.

apiVersion: v1
kind: Service
metadata:
  name: "service-devops"
spec:
  selector:
    app: devops
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

2. NodePort



NodePort는 클러스터의 각 노드에 있는 정적 포트에 서비스를 노출하는 서비스 유형입니다. 각 노드의 할당된 포트와 서비스의 해당 포트 간에 매핑을 생성합니다. 이렇게 하면 정의된 정적 포트와 함께 모든 노드의 IP 주소에 액세스하여 서비스에 대한 외부 액세스가 허용됩니다. NodePort 서비스는 클러스터 외부에서 서비스에 액세스해야 할 때 유용하지만 일반적으로 보안 및 확장성 고려 사항으로 인해 프로덕션 배포에는 권장되지 않습니다.

apiVersion: v1
kind: Service
metadata:  
  name: my-nodeport-service
spec:
  selector:    
    app: my-app
  type: NodePort
  ports:  
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30036
    protocol: TCP

3. LoadBalancer



LoadBalancer는 공용 클라우드 환경에서 로드 밸런서를 자동으로 프로비저닝하여 서비스에 대한 외부 액세스를 제공하는 서비스 유형입니다. 로드 밸런서는 서비스를 실행하는 여러 노드에 수신 트래픽을 분산하여 고가용성과 확장성을 보장합니다. LoadBalancer 서비스는 일반적으로 프로덕션 환경에서 외부 사용자 또는 클라이언트에 서비스를 노출하는 데 사용됩니다. 이 유형의 서비스에는 기본 클라우드 공급자가 로드 밸런서 생성을 지원해야 합니다.

4. ExternalName



ExternalName은 외부 서비스의 DNS 별칭 역할을 하는 서비스 유형입니다. 연결된 선택기나 팟(Pod)이 없습니다. 대신 쿼리 시 지정된 외부 이름이 있는 CNAME 레코드를 반환합니다. 이를 통해 클러스터 외부에서 호스팅되는 데이터베이스 또는 API와 같은 외부 서비스에 Kubernetes 서비스를 매핑할 수 있습니다. ExternalName 서비스는 클러스터를 통해 트래픽을 실제로 프록시하지 않고 Kubernetes 서비스 뒤에 있는 외부 서비스를 추상화하려는 경우에 유용합니다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: my.database.example.com

참고자료:

0개의 댓글