[kubenetes] 6-2. NodePort

kubenetes
Author
chan2slo chan2slo
Date
2022-07-25 21:26
Views
1204

외부에서 접근가능
모든 노드의 특정 포트를 개방해 서비스에 접근하는 방식

NodePort 서비스 생성, clusterip의 yaml파일에서 type만 변경

root@Kube-master1:~# cat hostname-svc-nodeport.yaml             
apiVersion: v1
kind: Service
metadata:
  name: hostname-svc-nodeport
spec:
  ports:
  - name: web-port
    port: 8080
    targetPort: 80
  selector:
    app: webserver
  type: NodePort

root@Kube-master1:~# kubectl apply -f hostname-svc-nodeport.yaml 
service/hostname-svc-nodeport created

root@Kube-master1:~# kubectl get svc
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hostname-svc-nodeport   NodePort    10.111.222.129           8080:30979/TCP   65s
kubernetes              ClusterIP   10.96.0.1                443/TCP          45h

아래의 부분을 확인할 수 있다. 30979는 노드의 포트이다 .
8080:30979/TCP

노드의 아이피로 curl 요청

root@Kube-master1:~# kubectl get nodes -o wide
NAME           STATUS   ROLES                  AGE   VERSION   INTERNAL-IP       EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
kube-master1   Ready    control-plane,master   45h   v1.21.0   192.168.122.140           Ubuntu 18.04.5 LTS   4.15.0-142-generic   docker://20.10.6
kube-worker1   Ready                     45h   v1.21.0   192.168.122.141           Ubuntu 18.04.5 LTS   4.15.0-142-generic   docker://20.10.6
kube-worker2   Ready                     45h   v1.21.0   192.168.122.142           Ubuntu 18.04.5 LTS   4.15.0-142-generic   docker://20.10.6
kube-worker3   Ready                     45h   v1.21.0   192.168.122.143           Ubuntu 18.04.5 LTS   4.15.0-142-generic   docker://20.10.6

root@Kube-master1:~# curl 192.168.122.140:30979 --silent | grep Hello
        

Hello, hostname-deployment-7dfd748479-jqzmp

root@Kube-master1:~# curl 192.168.122.141:30979 --silent | grep Hello

Hello, hostname-deployment-7dfd748479-fvg7n

root@Kube-master1:~# curl 192.168.122.142:30979 --silent | grep Hello

Hello, hostname-deployment-7dfd748479-v8lb2

root@Kube-master1:~# curl 192.168.122.143:30979 --silent | grep Hello

Hello, hostname-deployment-7dfd748479-jqzmp



yaml파일에서 targetPort 밑에 nodePort를 정의해서 노드의 포트를 정할수있다.
nodePort: 33333

nodeport는 clusterip의 기능을 포함

랜덤으로 선택되는 포트의 범위도 api 서버 컴포턴트의 실행옵션을 변경하여 원하는 범위를 설정할수있다.
--service-node-port-range=30000-35000

실제 운영 환경에서 nodeport로 외부에 서비스를 제공하는 경우는 많지않다.(보안, 설정 등등 이유)
ingress라는 오브젝트가 nodeport를 간접적으로 사용하여 서비스를 제공한다.

특정 클라이언트가 같은 포드로부터만 처리되게 하려면 yaml파일에 다음을 추가

spec:
sessionAffinity: ClientIP

Total Reply 0