본문 바로가기
Containers/Kubernetes

클러스터 외부 서비스 - NodePort

by shinebee* 2020. 8. 22.

 

  • kubernetes cluster에서 web의 frontend service를 실행하는 pod의 경우 k8s cluster의 외부로 노출시켜 접근 가능하도록 구성해야 한다.
  • 쿠버네티스 클러스터 외부에서 접근 가능한 서비스의 상태.

  • 서비스의 종류(TYPE) : ClusterIP
  • 클러스터 내부 IP = CLUSTER-IP  -> 할당되어있다.
  • 클러스터 외부 IP = EXTERNAL-IP  ->  할당되어있지 않다.

 

<서비스의 종류>

  • ClusterIP

    • cluster 내부용 서비스

  • NodePort

    • k8s 모든 노드(호스트)에 외부 접근용 포트를 할당.

    • 노드의 포트를 사용하여 외부에서 접근 가능.

    • 노드의 포트로 접근 -> 서비스에 의해 파드로 redirection

    • 파드를 실행하고 있지 않는 노드에도 포트가 할당되고 접근 가능하다.

  • LoadBalancer

    • NodePort의 확장판

    • 클러스터 외부의 loadbalancer를 사용하여 외부에서 접근 가능

    • 외부 loadbalancer로 접근하면 서비스를 통해 파드로 redirection

    • 클라우드 공급업체(AWS, GCP 등)에서 지원하는 기능.

  • External Name

    • 외부에서 접근하기 위한 종류 아님.

    • 외부의 특정 FQDN에 대한 CNAME 매핑을 제공

    • 파드가 CNAME을 이용해 특정 FQDN과 통신하기 위함.

 

 

1. 외부 서비스용 replicaset 생성 및 확인

  • 컨트롤러 및 파드 생성

 

 

2. NodePort 서비스 생성

# myapp-svc-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-nodeport
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 31111
  selector:
    app: myapp-rs
  • 서비스 타입 : NodePort
  • 노드에 노출할 포트 : 31111
    • 포트는 기본적으로 30000-32767 내에서만 사용 가능하다.

 

  • 노드 포트 서비스 생성
kubectl create -f myapp-svc-nodeport.yaml

 

 

3. NodePort 서비스 확인

  • 노드의 31111 포트로 접근하면 서비스의 80 포트로 redirection 된다.

 

  • 서비스 endpoint 확인

  • 서비스의 80 포트는 파드의 8080 포트로 redirection 된다.

 

  • 노드 IP 확인

  • 외부에서 192.168.122.X:31111로 접근  ->  서비스 포트인 80번 포트로 redirection  ->  내부 파드의 8080번 포트로 redirection

 

 

4. 서비스 삭제

kubectl delete svc myapp-nodeport

'Containers > Kubernetes' 카테고리의 다른 글

클러스터 외부 서비스 - ExternalName  (0) 2020.08.23
클러스터 외부 서비스 - LoadBalancer  (0) 2020.08.23
5.2. Service 탐색  (1) 2020.08.10
5.1. Cluster 내부 서비스  (0) 2020.08.03
4.4. DaemonSet  (0) 2020.07.29

댓글