탕구리's 블로그

[Kubernetes] #5 NodePort, port, targetPort (feat.쉬어가기) 본문

devOps

[Kubernetes] #5 NodePort, port, targetPort (feat.쉬어가기)

탕구리당 2020. 6. 14. 16:55
반응형

틈틈이 쿠버네티스 관련 서적들을 읽어가며 학습을 하고 있는데, 아무래도 단순히 읽고 예제를 따라가는 속도보다

블로그에 포스팅을 위해 글을 작성하고 정리하는 시간이 오래 걸리다 보니 포스팅이 굉장히 미뤄지는 듯한 느낌입니다

제가 다 게을러서 생기는 일 입니다. 흑.. 반성을 해야겠어요.

 

 

오늘은 무작정 따라가기만 바빳던 예제는 잠시 그만두고 쿠버네티스 클러스터 내에서 설정하는 포트에 대한 종류를 한번 짚고 넘어가는 포스팅을 작성하겠습니다.

 

 

1. 서비스에서는 어떤 포트 설정을 사용할까?

서비스 설정에서는 어떤 포트를 사용하고 어떻게 설정을 진행 할까요?

//nodeport-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nodeport-service
spec:
  type: NodePort
  selector:
    app: nginx-for-svc
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30000

서비스를 생성하는 설정 파일을 보면 위와 같이(port, targetPort, nodePort) 3개의 포트 정보를 설정하게 됩니다.

위에서 사용한 서비스 타입은 Nodeport이며, 클러스터 외부에서 클러스터 내부로 접근이 가능하도록 서비스는 트래픽을 중개하는 역할을 하는 서비스 타입입니다.

 

추가로 아래는 NodePort 타입의 서비스를 통해 파드까지 트래픽이 도달하는 그림인데요.

 

nodePort 트래픽 이동

위의 *.yaml과 비교해서 살펴봅시다!

 

1. "30000"번으로 설정된 "nodePort"는 외부에서 Node로 접근이 가능하게 하기 위해 사용하는 포트입니다. 

2. "port"는 외부에서 들어온 트래픽을 서비스를 통해 내부 클러스터의 "80 port"를 통해 전달하도록 합니다.

3. 그 후 서비스는 "targetPort"로 설정한 클러스터 내부의 컨테이너에게 "8080 port"로 요청을 전달하겠죠

 

* 물론 서비스가 바라보고 있는 파드들은 서비스의 selector를 통해 연결된 파드들입니다.

 

 

 

2. 컨테이너가 사용하는 포트는 어떻게 설정할까?

그럼 파드 내의 컨테이너에서는 어떤 설정을 통해 사용하는 포트를 결정할까요?

 

// pods-sample.yaml

apiVersion: v1
kind: Pod
metadata:
  name: simple-pod
  labels:
    app: nginx-for-service
spec:
  containers:
  - name: simple-pod
    image: nginx
    ports:
    - containerPort: 80

위의 야믈(yaml) 파일은 파드를 구동시키기 위한 설정을 담고 있습니다.

우리는 파드를 실행할 때 어떤 스펙의 컨테이너를 실행시킬지 spec.containers[] 부분에 설정을 진행하는데요

이 중 "spec.containers[].ports[].containerPort"에서 설정한 부분이 컨테이너에서 listen하고 있는 포트가 됩니다.

 

서비스에서 지정한 targetPort와 컨테이너에서 사용하는 ContainerPort가 일치하지 않는다면, 서비스는 해당 컨테이너로 트래픽을 전달할 수 없기에 요청을 보내도 오류가 발생하게 됩니다.

 

서비스를 Nodeport 타입으로 사용하는 경우 사용하는 포트에 대해 알아보았습니다. ClusterIP 타입의 서비스를 사용하는 경우에는 외부에서 트래픽을 받을 수 없기 때문에 Nodeport를 사용하지 않습니다. 

 

 

이렇게 일반적으로 서비스와 서비스의 목적지, 컨테이너 그리고 노드를 통해 외부 트래픽을 받는 경우에 사용하는 다양한 종류의 포트 설정에 대해서 알아보았는데요. 쿠버네티스에서 제공하는 다른 포트 설정들이 더 있는지는 모르겠습니다. 아직 뒷부분에 대한 학습이 전부 진행되지 않아서요..ㅎㅎ 내용이 부족하다고 생각되면 추후에 더 추가할 수 있도록 하겠습니다. 그럼 20000! 탕빠이!

 

 

 

 

그림 : https://blog.leocat.kr/notes/2019/08/22/translation-kubernetes-nodeport-vs-loadbalancer-vs-ingress

반응형
Comments