[kubenetes] 6-2. NodePort
외부에서 접근가능
모든 노드의 특정 포트를 개방해 서비스에 접근하는 방식
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
…