Ssoon
[2주차] CHAPTER-07 쿠버네티스 서비스 사용하기 본문
이정훈님이 집필하신 "24단계 실습으로 정복하는 쿠버네티스" 로 진행하는 CloudNet@ 팀의 PKOS 2주차 정리입니다.
✅ 클러스터 내부 Pod 간 통신
💠 app: nginx 레이블을가진 디플로이먼트를 생성하고 정보를 확인합니다.
💠 Cluster 타입의 서비스를 생성하고 정보를 확인합니다.
✔ ENDPOINTS : 클라이언트가 서비스 호출시 도착하는 실제 POD 정보
💠 busybox Pod를 추가합니다.
💠 busybox 에 접속 후 서비스 이름으로 접속을 확인합니다.
✔ 서비스 이름으로 호출하면 쿠버네티스 DNS 가 등록된 Cluster IP주소로 응답합니다.
✔ 클라이언트가 CLUSTER-IP 로 접속하면 VIRTUAL-IP가 실제 Pod로 리다이렉트 됩니다.
💠 NGINX Pod를 삭제하고 새로운 IP주소를 가지는 Pod를 생성합니다.
💠 busybox 에 접속 후 서비스 이름으로 접속을 확인합니다
✔ Pod간 연결은 서비스 이름 nginx-svc 를 이용하기 때문에 새로운 IP를 할당받은 Pod로도 접속이 됩니다.
✔ 서비스 도메인 정보의 응답 CLUSTER-IP 정보(10.233.29.43)는 변화가 없고 해당 IP가 VIRTUAL IP로 동작하여 실제 POD의 IP로 리다이렉트 되기 때문입니다.
💠 Pod 의 수량을 3으로 증가시킨 후 busybox Pod에 접속후 정보를 확인합니다.
✔ 3개의 Pod로 부하분산되어 처리됩니다.
📌 쿠버네티스 서비스는 DNS 를 이용해 Pod의 IP를 관리합니다.
✅ 쿠버네티스 DNS 기능
✔ 쿠버네티스의 DNS은 코어DNS (coredns-x-x) 와 로컬 DNS(nodelocaldns-x) 로 마스터 노드에의 Pod로 관리합니다.
✔ 이중화를 위해서 2개의 Pod가 deployment 로 관리됩니다.
✔ 로컬 DNS 는 전체 NODE의 Daemonset으로 실행됩니다.
✔ Daemonset : 쿠버네티스가 실행되는 모든 노드에서 자동으로 실행되는 파드입니다.
✔ 로컬 DNS : 성능 향상의 목적으로 코어 DNS의 캐시로 사용되며, 응답 성능 향상 및 코어 DNS 부하를 감소합니다.
💠 busybox Pod에 접속하여 nameserver의 IP 정보를 확인합니다.
✔ Pod의 nameserver는 Node의 로컬 DNS 정보와 같습니다.
💠 Node에 접속하여 로컬 DNS 정보를 확인합니다.
✔ 쿠버네티스를 설치하면 각 노드에 로컬 DNS IP주소가 가상 네트워크 IP 주소로 등록됩니다.
💠 새로운 Namespace (busybox)을 만들고 busybox Pod를 생성하여 NGINX Pod의 서비스 이름을 확인합니다.
✔ busybox 네임스페이스 와 default 네임스페이스 도메인 이름 정보가 다릅니다.
busybox 네임스페이스 - nginx-svc.busybox.svc.cluster.local
default 네임스페이스 - nginx-svc.default.svc.cluster.loca
💠 Pod 의 DNS search 옵션을 확인합니다.
✔ 서비스 nginx-svc로 DNS 요청 -> 자동으로 nginx-svc.default.svc.cluster.local 까지 포함되는데 Service이름 다음에 자신의 Namespace 이름이 포함된 DNS 요청을 전달합니다.
✔ nginx-svc 서비스는 default 네임스페이스에서 실행중으로 nginx-svc.default.svc.cluster.local 에만 응답합니다.
💠 네임스페이스 까지 포함된 서비스 도메인 이름으로 요청합니다.
✔ 실행중인 Namespace 가 다르면 Namespace 이름 까지 포함된 서비스 도메인 이름으로 요청해야 합니다.
📌 다른 Namespce 에서 실행 중인 Pod와 연결하려면 해당 Pod의 서비스 이름에 Namespce 이름까지 포함합니다.
✅ 클러스터 외부에서 내부의 Pod 연결
⛔ 노드포트 타입 서비스
✔ NODEPORT 서비스 : 클러스터 외부에서 클러스터 노드의 네트워크 인터페이스 의 포트를 통해 내부Pod와 연결.
💠 nodeport 타입의 서비스를 생성합니다.
✔ 30080 포트로 노드포트가 연결되었습니다.
✔ nodeport 서비스도 자동으로 clusterIP 가 할당되고, 내부의 clusterIP 를 통해 Pod IP로 연결됩니다.
💠 호스트 에서 node 의 IP 주소(192.168.219.201~203) 와 nodeport 포트정보(30080) 로 접속을 확인합니다.
⛔ 부하분산
✔ 모든 node 중에서 실행중인 kube-proxy Pod는 node내에서 실행중인 모든 Pod의 네트워크 트래픽을 처리합니다.
✔ configMap를 확인하면 kube-peoxy는 기본적으로 IPVS 모드로 동작합니다.
✔ IPVS : ClusterIP 서비스와 연동하여 Cluster IP 로 요청하는 연결을 내부의 Pod 로 전달합니다.
💠 Pod 의 수량을 5개로 변경합니다.
💠 Pod와 서비스 정보를 확인합니다.
💠 노드에 접속하여 내부적으로 처리하는 IP 라우팅 규칙 정보를 확인합니다.
✔ Cluster IP (10.233.29.43, 10.233.36.33) 가 실제 Pod IP (10.233.88.18...) 로 rr(Round Robin) 로 리다이렉트 됩니다.
✔ 노드 IP(192.168.219.202)와 노드포트(30080)로 접속하면 5개의 Pod로 부하분산됩니다.
'Production Kubernetes Online Study' 카테고리의 다른 글
[2주차] CHAPTER-09 Traefik 인그레스 구축 (0) | 2023.03.14 |
---|---|
[2주차] CHAPTER-08 MetalLB 로드밸랜서 구축 (0) | 2023.03.14 |
[1주차] CHAPTER-06 헬름 기반으로 애플리케이션 설치 (0) | 2023.03.10 |
[1주차] CHAPTER-05 쿠버네티스 트러블슈팅 (0) | 2023.03.10 |
[1주차] CHAPTER-04 YAML파일를 이용한 오브젝트 관리 (0) | 2023.03.10 |