노드포트 간단 소개
노드포트(NodePort)는 모든 워커노드의 특정 포트(=Nodeport)를 열고, 이 포트에 오는 모든 요청을 노드포트 서비스로 포워딩한다
클러스터 외부에서 접속 불가하다는 ClusterIP 의 단점을 해결할 수 있는 서비스중에 가장 원시적인(primitive) 방법이다.
노드포트의 특징
- 노드포트로 노출한다는 것은 곧 Pod나 deployment가 있다는 뜻이다
- 노드포트는 노드가 3개든, 100개든 모두 동일한 노드포트가 열려진다.
- 노드포트는 30000-32767 사이의 포트 대역을 사용한다
- 포트(spec.ports.port) 는 서비스에 대한 포트번호다.
- 타겟포트(spec.ports.targetPort)는 파드의 컨테이너에 대한 포트(spec.containers[].ports[].containerPort) 번호다.
- 타겟포트와 포트는 다른 번호로 사용할 수 있지만, 일반적으로는 동일한 번호로 맞춰서 사용한다
- 어떤 Pod들을 노출시키는지는 Selector로 지정하며, 자동으로 Load Balancing된다
노드포트의 제약사항
아래와 같은 이유로 노드포트는 주로 임시나 데모에서만 사용한다.
한 노드포트당 한 서비스만 할당할 수 있다.
외부 사용자가 80 혹은 443 같은 Well-known 같은 포트가 아니라, 30000-32767 사이의 포트만 사용할 수 있다.
노드포트 만드는법
dp-nginx 라는 이름의 Deployment를 np-nginx라는 nodePort로 노출하려고 한다.
이때 dp-nginx 의 yaml은 다음과 같다.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: dp-nginx
name: dp-nginx
spec:
replicas: 3
selector:
matchLabels:
app: dp-nginx
template:
metadata:
labels:
app: dp-nginx
spec:
containers:
- name: nginx
image: nginx
yaml 파일로 만들기
노드포트를 yaml로 생성하면 spec.ports.nodePort로 노드포트 번호를, spec.selector로 Pod를 지정할 수 있다
apiVersion: v1
kind: Service
metadata:
name: np-nginx
spec:
selector:
app: dp-nginx
ports:
- port: 80
targetPort: 80
nodePort: 30000 #option
type: NodePort
kubectl expose 명령어로 만들기
노드포트를 expose로 생성하면 Pod는 지정할 수 있으나, 노드포트 번호는 지정할 수 없다.(랜덤 생성)
#방법
kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name]
[--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]
#예시
kubectl expose deployment dp-nginx --type=NodePort --name=np-nginx --port=80
kubectl create service 명령어로 만들기
노드포트를 create로 생성하면 Pod와 노드포트 번호 모두 지정할 수 없다.(랜덤 생성)
#방법
kubectl create service nodeport NAME [--tcp=port:targetPort] [--dry-run=server|client|none] [options]
#예시
kubectl create service nodeport np-nginx --tcp=80:80
요약하면 다음과 같다.
yaml | expose | create | |
nodePort 번호 지정 | ✅ | ❌ | ❌ |
Pod 지정 | ✅ | ✅ | ❌ |
⚠️expose나 create 명령어로 생성 후, kubectl edit으로 편집할 수 있다.
노드포트로 노출한 애플리케이션에 접근하는 방법
워커노드의IP:노드포트
터미널에서 curl로 확인하는 방법
브라우저에서 확인하는 방법
참고
반응형
'Kubernetes' 카테고리의 다른 글
ServiceAccount (0) | 2023.01.29 |
---|---|
Resource requirements(Request & Limit) (0) | 2023.01.22 |
쿠버네티스 apiVersion이란? (0) | 2023.01.15 |
CKAD 후기 (Certified Kubernetes Application Developer) (6) | 2023.01.09 |
쿠버네티스 시험 준비할 때 익혀두면 편한 리눅스 명령어들 (0) | 2023.01.09 |