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

박상훈·2022년 5월 9일
0
post-thumbnail

쿠버네티스에서 서비스란 : 외부에서 쿠버네티스 클러스터에 접속하는 방법

노드포트로 쿠버네티스 클러스터 내부 접속


노드포트 오브젝트 스펙 중 기존 오브젝트 스펙에서 다른부분
ports 하위 : 사용할 프로토콜과 포트들을 지정
type : 서비스 타입 설정

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 : 파드에 걸쳐 트래픽을 로드 밸런스하도록 새로운 서비스 오브젝트를 생성
expose 로 노드포트 서비스 생성, expose 를 사용하여 서비스로 내보낼 deployment 를 no-pods 로 지정
해당 서비스 명은 np-svc-v2, 타입 NodePort(서비스 타입 대소문자 구분)
서비스가 파드로 보내줄 연결 포트 80(파드 포트)번 지정

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

인그레스


고유한 주소를 제공해 사용 목적에 따라 다른 응답을 제공
트래픽에 대한 L4/L7 로드밸런서와 보안 인증서를 처리하는 기능 제공
노드포트 서비스를 NGINX 인그레스 컨트롤러 구성
순서 : 사용자 -> 노드 -> 노드포트 서비스 -> ClusterIP 서비스 -> 파드

인그레스 설정 파일

kubectl apply -f [ingress file path]

메타데이터의 기록 및 변경, rewrite-target 을 / (기본 주소)로 지정
annotations: nginx.ingress.kubernates.io/rewrite-target: /
rules : 규칙 지정
rules - path : 경로 규칙
rules - backend - 하위 : 연결되는 서비스와 포트

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
	name: ingress-nginx
    annotations:
    	nginx.ingress.kubernates.io/rewrite-target: /
spec:
	rule:
    - 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

인그레스 pod 확인, 네임스페이스가 다르므로 옵션을 설정한다 -n : -namespace

kubectl get pods -n ingress-nginx

로드밸런서


클라우드 환경에서 로드밸런서

kubectl expose deployment [deployment name] --type=LoadBalancer --name=[service name]

온프레미스 환경에서 로드밸런서(MetalLB)

MetalLB 구성에 의한 순서
사용자 -> 로드밸런서 서비스 -> 파드
MetalLB Controller : 작동 방식(Protocol) 을 정의하고 EXTERNAL-IP 를 부여해 관리
MetalLB Speaker : 정해진 작동 방식(L2/ARP, L3/BGP) 에 따라 경로를 만들 수 있도록
네트워크 정보를 광고하고 수집해 각 파드의 경로를 제공
ConfigMap 설정(파일) : 설정이 정의된 포맷

kubectl create deploy [deploy name] --image=[image name]
kubectl apply -f [MetalLB file path]

config : 설정 내용
address-pools : 세부 설정
address-pools - protocol : 로드밸런서 동작 방식
address-pools - address : 로드밸런서의 External IP

apiVersion: v1
kind: ConfigMap
metadata:
	namespace: metallb-system
    name: config
data:
	config: |
    	address-pools:
        - name: nginx-ip-range
          protocol: layer2
          addresss:
          - 111.111.1.11-111.111.1.1x

kubectl get services 를 입력하면
EXTERNAL-IP 에 IP 가 출력되는데 ConfigMap 을 통해 부여한 IP 를 확인

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


HPA : Horizontal Pod Autoscaler

top : 파드 자원 사용량 체크, 메트릭 서버가 없으면 NotFound Error 발생
kubectl top pods

메트릭 서버(Metrics-Server) : kubelet 이 계측값을 수집하여 전달한것을 받아서 관리
kubectl appply -f [Metrics config file path]

min : 파드 최소 수, max : 파드 최대 수, cpu-percent : cpu 사용량 퍼센트가 설정값 보다 오르면 autoscale 진행
kubectl autoscale deployment [deployment name] --min=1 --max=30 --cpu-percent=50

profile
엔지니어

0개의 댓글