[Retry, k8s] 13. 서비스 API - NodePort
카테고리: KUBERNETES
태그: kubernetes
[Retry, k8s] 13. 서비스 API - NodePort
🔔 NodePort 서비스
-
모든 쿠버네티스 노드의 IP 주소:포트에서 수신한트래픽을 컨테이너에 전송하는 형태로 외부와 통신할 수 있도록 하는 서비스
-
ExternalIP 서비스에서 전체 노드의 트래픽을 수신할 수 있도록 설정것과 비슷하지만, Listen할 때 0.0.0.0:포트를 사용하여 모든 IP주소로 바인드하는 형태

📜 NodePort 생성
| 설정 | 개요 |
|---|---|
| spec.ports[].port | ClusterIP에서 수신할 포트 번호 |
| spec.ports[].targetPort | 목적지 컨테이너 포트 번호 |
| spec.ports[].nodePort | 모든 쿠버네티스 노드 IP주소에서 수신할 포트 번호 |
cat <<EOF > sample-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
name: sample-nodeport
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
nodePort: 30080
selector:
app: sample-app
EOF
$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 62m
sample-nodeport NodePort 10.107.49.235 <none> 8080:30080/TCP 16s
$ kubectl run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod --command -- dig sample-nodeport.default.svc.cluster.local
(생략)
;; QUESTION SECTION:
;sample-nodeport.default.svc.cluster.local. IN A
;; ANSWER SECTION:
sample-nodeport.default.svc.cluster.local. 30 IN A 10.107.49.235
$ curl -s http://192.168.219.100:30080
Host=192.168.219.101 Path=/ From=sample-deployment-7f47966499-82lld ClientIP=10.38.0.0 XFF=
$ curl -s http://192.168.219.101:30080
Host=192.168.219.101 Path=/ From=sample-deployment-7f47966499-llctj ClientIP=10.38.0.0 XFF=
$ curl -s http://192.168.219.102:30080
Host=192.168.219.101 Path=/ From=sample-deployment-7f47966499-k7vk7 ClientIP=10.38.0.0 XFF=
📜 NodePort 주의점
-
NodePort에서 사용할 수 있는 포트 범위는 30000~32767이며, 범위 외의 포트를 지정하려고 하면 에러가 발생한다.
-
쿠버네티스 마스터 설정을 자체적으로 바꿀 수 있는 경우에는 이 범위를 커스터마이즈할 수 있다.
(1) 범위 이외의 포트 번호를 NodePort로 설정할 수 없다.
cat <<EOF > sample-nodeport-fail.yaml
apiVersion: v1
kind: Service
metadata:
name: sample-nodeport-Families
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
prot: 8080
targetPort: 80
nodePort: 8888
selector:
app: sample-app
EOF
$ kubectl apply -f sample-nodeport-fail.yaml
The Service "sample-nodeport-Families" is invalid: spec.ports[0].nodePort: Invalid value: 8888: provided port is not in the valid range. The range of valid ports is 30000-32767
(2) 이미 사용 중인 포트 번호를 사용할 수 없다.
cat <<EOF > sample-nodeport-fail2.yaml
apiVersion: v1
kind: Service
metadata:
name: sample-nodeport
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
nodePort: 30080
selector:
app: sample-app
EOF
$ kubectl apply -f sample-nodeport-fail2.yaml
The Service "sample-nodeport-fail2" is invalid: spec.ports[0].nodePort: Invalid value: 30080: provided port is already allocated
댓글 남기기