[Retry, k8s] 13. 서비스 API - NodePort

Date:     Updated:

카테고리:

태그:

[Retry, k8s] 13. 서비스 API - NodePort



🔔 NodePort 서비스

  • 모든 쿠버네티스 노드의 IP 주소:포트에서 수신한트래픽을 컨테이너에 전송하는 형태로 외부와 통신할 수 있도록 하는 서비스

  • ExternalIP 서비스에서 전체 노드의 트래픽을 수신할 수 있도록 설정것과 비슷하지만, Listen할 때 0.0.0.0:포트를 사용하여 모든 IP주소로 바인드하는 형태

5


📜 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

KUBERNETES 카테고리 내 다른 글 보러가기

댓글 남기기