쿠버네티스 교육/강의 내용 정리

220624_2_k8s_연결 서비스_NodePort

kimhope 2022. 6. 25. 00:06
728x90

클러스터 연결 서비스


  • 쿠버네티스 클러스터에서 웹의 프론트엔드 서비스를 실행하는 파드의 경우 쿠버네티스 클러스터를 외부로 노출시켜 접근 가능하도록 구성
  • 클러스터 외부 서비스: NodePort, Ingress, 로드밸런서, MetalLB, HPA

 


 

NodePort 서비스

testapp-svc-np.yml

필드 속성 값
.spec.type 서비스 타입 (기본 값: ClusterIP)
.spec.ports.nodePort 30000-32767 포트, 포트를 지정하지 않으면 랜덤한 포트 지정
  • 레플리카셋 생성
vagrant@kube-master1:~/test$ cat testapp-rs-named-port.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: testapp-rs-named-port
spec:
  replicas: 3
  selector:
    matchLabels:
      app: testapp-rs
  template:
    metadata:
      labels:
        app: testapp-rs
    spec:
      containers:
      - name: testapp
        image: c1t1d0s7/myweb
        ports:
        - name: testapp-http
          containerPort: 8080
        imagePullPolicy: Never
vagrant@kube-master1:~/test$ kubectl create -f testapp-rs-named-port.yml
replicaset.apps/testapp-rs-named-port created

 

  • 노드 포트 서비스 생성
  • 서비스 타입: NodePort
  • 노드에 노출할 포트 번호: 31000 (포트 번호는 30000-32767 내에서만 사용 가능)
vagrant@kube-master1:~/test$ cat testapp-svc-np.yml
apiVersion: v1
kind: Service
metadata:
  name: testapp-svc-np
spec:
  type: NodePort
  ports:
  - name: testapp-http
    port: 80
    targetPort: testapp-http
    nodePort: 31000
  selector:
    app: testapp-rs
vagrant@kube-master1:~/test$ kubectl create -f testapp-svc-np.yml
service/testapp-svc-np created

 

  • 노드의 IP 확인
vagrant@kube-master1:~/test$ kubectl get nodes -o wide
NAME           STATUS   ROLES    AGE    VERSION    INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
kube-master1   Ready    master   4d3h   v1.18.10   192.168.56.11   <none>        Ubuntu 18.04.6 LTS   4.15.0-187-generic   docker://19.3.12
kube-node1     Ready    <none>   4d3h   v1.18.10   192.168.56.21   <none>        Ubuntu 18.04.6 LTS   4.15.0-187-generic   docker://19.3.12
kube-node2     Ready    <none>   4d3h   v1.18.10   192.168.56.22   <none>        Ubuntu 18.04.6 LTS   4.15.0-187-generic   docker://19.3.12
kube-node3     Ready    <none>   4d3h   v1.18.10   192.168.56.23   <none>        Ubuntu 18.04.6 LTS   4.15.0-187-generic   docker://19.3.12

 

  • 접속 확인
  • curl 노드 IP:31000
vagrant@kube-master1:~/test$ kubectl run nettool -it --image=ghcr.io/c1t1d0s7/network-multitool --rm bash
If you don't see a command prompt, try pressing enter.

bash-5.1# curl 192.168.56.11:31000

 

  • 외부에서 접속 확인
  • 외부에서 노드의 IP:31000으로 접속하면, 서비스 포트인 80번 포트로 리다이렉션되며, 이는 다시 내부 파드의 8080번 포트로 리다이렉션 되는 것을 확인할 수 있음

 

728x90