Ssoon

[2주차] CHAPTER-07 쿠버네티스 서비스 사용하기 본문

Production Kubernetes Online Study

[2주차] CHAPTER-07 쿠버네티스 서비스 사용하기

구구달스 2023. 3. 14. 20:17
이정훈님이 집필하신 "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로 부하분산됩니다. 

 

Comments