Cluster Networking

  1. Pod 내 Container간 통신
  • veth0(VNI)는 하나의 IP를 사용하며, 각 컨테이너끼리는 port 번호로 서로를 구분

2. Pod-to-Pod 통신

  • Pod 하나는 고유한 IP 주소를 가지며, IP 주소로 서로 통신

3. Pod-to-Serivce 통신

  • Pod는 죽었다가 살아날 수 있고, IP 주소가 동일할 것이라는 보장이 없기 때문에, Service 앞단에 reverse-proxy나 Load Balancer를 둠으로써 통신이 가능
  • service 정의 시 selector를 통해 트래픽을 전달할 Pod를 결정

4. External-to-Service 통신

Service

  • Pod는 클러스터 내에서 노드를 옮기며 IP가 변경됨
  • 동적으로 변하는 Pod의 IP를 특정하기 위한 방법이 Service
  • label과 label selector를 활용하여, 어떤 Pod를 Service로 묶을지 정의

Service Type (서비스를 외부 IP 주소에 노출하는 방법)

ClusterIP

  1. ClusterIP : 클러스터 내부에서만 접근. 실서비스에서 단독 사용 X
    • 기본적으로 외부와 통신 불가
    • 외부와 통신을 위해서는
      • netfilter chain rule을 통해 IP로 들어온 패킷을 각 Pod에 포워딩하는 설정을 하거나
      • worker node 내 reverse proxy를 생성하여 ClusterIP로 패킷 포워딩
      • 위 세팅을 EKS에서 진행하기 위해서는 EKS cluster 생성 시에 ssh 접근을 위한 값들을 입력해주어야 함
  2. NodePort : 모든 Node에서 특정 포트를 열고, 이 포트로 보내지는 모든 트래픽을 서비스로 forwarding
    • 포트당 한 서비스만 할당
    • 30000~32767 사이 포트만 사용 가능
    • Node의 IP주소가 바뀌면 이를 반영해야 함
  3. LoadBalancer : 모든 트래픽이 로드밸런스를 거쳐 서비스로 포워딩
    • AWS EKS에서 LoadBalancer 타입은 NLB를 프로비저닝 (L7을 사용하려면 Ingress 타입으로 배포)
  4. Ingress : 도메인 및 경로를 기반으로 들어오는 패킷을 특정 서비스로 포워딩
    • AWS EKS에서 Ingress 타입은 ALB를 프로비저닝함
    • ingress 사용 이전에 clusterIP나 NodePort 타입의 서비스가 생성되어 있어야 함
    • worker node 내부에 ingress를 감지하여 로드밸런서를 프로비저닝하는 ingress controller가 있어야 함

ETCD

  • 2379 포트에서 클라이언트 통신을 받고, 2380포트에서 서버간 통신

Reference

'Docker & k8s' 카테고리의 다른 글

[K8S] 5. Kubernetes Service Proxy  (0) 2022.02.03
[K8S] 3. Kubernetes Network Commands  (0) 2022.02.03
[K8S] 2. Kubernetes Commands  (0) 2022.02.03
[K8S] 1. Kubernetes Core Component  (0) 2022.02.03
도커란? (Docker)  (0) 2020.12.17

+ Recent posts