쿠버네티스 연결을 담당하는 서비스

홍준섭·2022년 10월 10일

개발 공부

목록 보기
8/20

노드포트

외부에서 쿠버네티스 클러스터의 내부에 접속하는 가장 쉬운 방법은 노드포트 서비스를 이용하는것이다. 노드포트 서비스를 설정하면 모든 워커 노드의 특정 포트를 열고 여기로 오는 모든 요청을 노드포트 서비스로 전달한다. 그리고 노드포트 서비스는 해당 업무를 처리할 수 있는 파드로 요청을 전달한다.

오브젝트 스펙 파일을 사용하는 경우

nodeport.yaml

apiversion: v1
kind: Service
metadata:
	name: np-svc
spec:
	selector:
    	app: np-pods
	ports:
    	- name: http
          protocol: TCP
          port: 80
          targetPort: 80
          nodePort: 30000
    type: NodePort

expose로 노드포트 서비스 생성하기

kubectl expose deployment np-pods --type=NodePort --name np-svc-v2 --port=80

사용 목적별로 연결하는 인그레스

노드포트 서비스는 포트를 중복 사용할 수 없어서 1개의 노드포트에 1개의 디플로이먼트만 적용된다. 그렇기에 여러 개의 디플로이먼트가 있을 때 인그레스를 사용한다. 인그레스는 고유한 주소를 제공해 사용 목적에 따라 다른 응답을 제공할 수 있다. 인그레스 컨트롤러의 궁극적인 목적은 사용자가 접속하는 경로에 따라 다른 결괏값을 제공하는 것이다.
ingress-config.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
	name: ingress-nginx
    annotations:
    	nginx.ingress.kubernetes.io/rewrite-target: /
spec:
	-http:
    	paths:
        	-path:
            backend:
            	serviceName: hname-svc-default
                servicePort: 80
           	-path: /ip
            backend:
            	serviceName: ip-svc
                servicePort: 80
            -path: /your-directory
            backend:
            	serviceName: your-svc
                servicePort: 80
            

클라우드에서 쉽게 구성 가능한 로드밸런서

위의 연결 방식은 들어오는 요청을 모두 워커 노드의 노드포트를 통해 노드포트 서비스로 이동하고 이를 다시 쿠버네티스의 파드로 보내는 구조였다. 그러나 로드밸런서를 사용하려면 로드밸런서를 이미 구현해 둔 서비스업체의 도움을 받아 쿠버네티스 클러스터 외부에 구현해야 한다.

kubectl expose deployment ex-lb --type=LoadBalancer --name=ex-svc

온프레미스에서 로드밸런서를 제공하는 MetalLB

MetalLB는 특별한 네트워크 설정이나 구성이 있는 것이 아니라 기존의 L2 네트워크와 L3 네트워크로 로드밸런서를 구현한다. MetalLB 컨트롤러는 작동 방식을 정의하고 EXTERNAL-IP를 부여해 관리한다. MetalLB 스피커는 정해진 작동 방식에 따라 경로를 만들 수 있도록 네트워크 정보를 광고하고 수집해 각 파드의 경로를 제공한다.

부하에 따라 자동으로 파드를 조절하는 HPA

쿠버네티스는 부하량에 따라 디플로이먼트의 파드 수르르 유동적으로 관리하는 기능을 제공한다. 이를 HPA라고 한다.

profile
개발 공부중입니다

0개의 댓글