728 words
4 minutes
[Kubernetes]04. Services
Overview
01 Services
Kubernetes Service
Concept
- Service : Pod의 집합에 대한 Network Endpoint를 제공하는 Kubernetes 리소스. 기본적으로 Pod간의 네트워크 연결 및 로드밸런싱을 제공
- Service Discovery : 동적으로 pod간 연결을 제공하는 기능
Service Type
내부연결
- 클러스터 내부에서 파드와 파드를 연결
외부연결
- 클러스터 외부에서 클러스터 내부의 파드를 연결
02 내부연결
ClusterIP
03 DNS in Kubernetes
- k8s는 서비스 이름을 DNS로 해석할 수 있는 기능을 제공
- DNS 기능은 CoreDNS와 Local DNS로 구성
- 두 기능 모두 master node와 pod로 관리
CoreDNS
Local DNS
- Local DNS는 기본적으로 DNS 성능향샹을 위한 CoreDNS의 캐시
- k8s전체 노드에 데몬 셋으로 실행
- 데몬 셋은 k8s가 실행되는 모든 노드에서 자동으로 실행되는 파드
- 보통 스토리지, 로깅, 모니터링 용도의 파드가 주로 데몬 셋으로 실행
- dns 조회 및 응답에 문제가 발생시 보통 이 부분을 재시작
graph LR A[Application Pod] -->|DNS Request| B[NodeLocal DNSCache] B --> C{Cache Check} C -->|Cache Hit| D[Return Response] C -->|Cache Miss| E[CoreDNS] E -->|Cluster Domain| F[(Cluster DNS Records)] E -->|External Domain| G[External DNS] G --> E F --> E E --> B B --> A- pod에 접속해 nameserver 설정 확인
- nameserver의 ip주소는 노드가 실행되거 있는 호스트노드가 사용하는 로컬 DNS의 IP주소
k exec -it <pod-name> -- cat /etc/resolv.confDNS Search
- 서로 다른 네임스페이스에 있는 서비스를 찾을 때 사용
- 서비스 이름에 namespace를 추가하여 사용
ping my-svc.my-namespace -c 103 외부연결
NodePort
-
NodePort 타입의 서비스는 클러스터 외부에서 클러스터 노드의 NIC의 파드를 통해 내부 파드와 연결
-
클러스터 외부에서 클러스터 내부의 파드에 접근하기 위해 사용
-
쿠버네티스 서비스는 커널레벨의 net filter를 사용해 IPVS 모드로 로드밸런싱 지원
Concept
- IPVS : IP Virtual Server. PVS는 리눅스 커널에 내장된 L4(전송 계층) 로드 밸런싱 기술. 네트워크 트래픽을 효율적으로 분산시키는 매커니즘
부하분산을 위해 minikube kube proxy ipvs 모드로 변경
설정 변경후 재시작 필요
kubectl get configmap kube-proxy -n kube-system -o yaml > kube-proxy-cm.yamllogging: flushFrequency: 0 options: json: infoBufferSize: "0" text: infoBufferSize: "0" verbosity: 0metricsBindAddress: 0.0.0.0:10249mode: "" # 모드 변경 -> ipvsnftables:04 LoadBalancer
노드타입 서비스의 문제점
- 노드타입 서비스에서 노드의 ip는 변경될 수 있음
- 특수포트인 30000 ~ 32767 사이의 포트를 사용해야함
MetalLB
on-premise 환경에서 LoadBalancer 서비스를 사용하기 위한 솔루션
# node에 할당한 ip 주소 확인
k get nods -o wide요청 LoadBalancer 확인용
# 접속내용 확인
for i in {1..10}; do curl -s http://<node-ip>:<node-port>; done| grep ID; done | sort | uniq -cReference
[Kubernetes]04. Services
https://yjinheon.netlify.app/posts/05system/k8s/k8s_04_services/