Skip to content

쿠버네티스에서의 서비스 네트워킹

서비스 네트워킹 이해

쿠버네티스의 서비스(Service)는 클러스터 내의 포드에 대한 추상적인 액세스 레이어를 제공합니다. 서비스는 클러스터 내의 모든 노드에서 접근 가능하며 특정 포드 그룹을 대표합니다.

서비스의 주요 유형

  1. ClusterIP: 클러스터 내부에서만 접근 가능한 기본 서비스 유형입니다. 클러스터 내의 포드가 서로 통신할 때 사용합니다.
  2. NodePort: 외부 트래픽을 특정 포트를 통해 서비스로 라우팅하여 클러스터 외부에서 서비스에 접근할 수 있게 해줍니다.
  3. LoadBalancer: 클라우드 제공자의 로드 밸런서를 사용하여 서비스를 외부에 노출합니다.

서비스 IP 할당과 관리

  • 서비스 생성 시 쿠버네티스 API 서버에서 자동으로 IP를 할당받습니다.
  • 이 IP는 서비스를 생성한 클러스터 전체에서 유니크합니다.

서비스 작동 방식

  • kube-proxy는 각 노드에서 실행되며, 서비스 IP로 들어오는 요청을 적절한 포드로 전달하는 규칙을 관리합니다.
  • kube-proxy는 iptables, IPVS 등의 방식을 사용하여 트래픽을 관리할 수 있습니다.

예시: ClusterIP 서비스 설정

yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376

이 서비스는 app=MyApp 라벨을 가진 포드들에 대한 접근을 관리하며, 클러스터 내부에서만 접근 가능한 IP를 할당받습니다.

check Cluster IP Range

sh
ps -aux | grep kube-apiserver

check the rules created by kube-proxy in the iptables

sh
iptables -L -t nat | grep local-cluster

서비스와 포드 연결

  • 서비스는 라벨 셀렉터를 사용하여 특정 포드를 타겟팅합니다.
  • kube-proxy는 서비스의 IP 및 포트를 기반으로 트래픽을 해당 포드의 IP와 포트로 전달합니다.

실습

  • 실습 섹션에서는 클러스터에 서비스를 설정하고, 실제 트래픽이 포드에 어떻게 라우팅되는지 확인합니다.
  • kubectl get services 명령을 사용하여 클러스터 내의 서비스 리스트를 확인하고, 각 서비스의 설정을 검토합니다.
  • node의 ip range는? kubectl get nodes -o wide > ip add
  • pod의 ip range는? kubectl get all -A > kubectl log -n kube-system weave
  • service의 ip range는? cat /ect/kubernetes/manifests/kube-apiserver > --service-cluster-ip-range
  • kube-proxy의 proxy type은? kubectl logs -n kube-system kube-proxy

References Docs

https://kubernetes.io/docs/concepts/services-networking/service/