Infrastructure/Kubernetes

[Basic] 쿠버네티스 네트워크

RoyOps 2024. 6. 9. 19:02

쿠버네티스 네트워크

클러스터 네트워킹

쿠버네티스 클러스터 네트워크

  • 전체 클러스터를 위한 하나의 가상 네트워크다.
  • 각 파드에는 고유한 IP가 존재한다.
  • 서비스는 파드와 다른 범위의 IP 대역을 가진다.
  • 클러스터 CIDR: 클러스터 내 파드에 할당하는데 사용되는 IP 범위다.
  • 서비스 클러스터 IP 범위: 서비스에 대한 IP 범위이며 클러스터 CIDR와 중첩되면 안된다.
  • 파드 CIDR: 특정 워커 노드 내 파드에 대한 IP 범위이며 이 범위는 클러스터 CIDR 내에 있어야 하지만 다른 워커 노드의 파드 CIDR과 겹치면 안된다.

Master and Node (Minion)

쿠버네티스 네트워킹

  • IP는 컨테이너가 아니라 파드에 할당된다.
  • 컨테이너간 통신: 커플드(Highly-coupled)된 컨테이너간 통신을 위해 파드와 로컬 호스트 통신으로 해결한다.
  • 파드간 통신: 클러스터 통신의 주목적으로 K8S 네트워크 플러그인, 서비스를 사용한다.
  • 파드와 서비스 통신: 서비스에서 담당한다.
  • 외부와 서비스 통신: 서비스에서 담당한다.
  • 파드 내부의 container-to-container 통신: 컨테이너 엔진(예: 도커)이 담당한다.
  • 외부와 파트 통신: Service, Ingress, Egress를 사용한다.

클러스터 네트워킹 구성

  • 사용자의 파드 접속: 인터넷 사용자들의 클라이언트는 파드에 직접 접속할 수 있고 서비스를 설정해야 한다.
  • 서비스 정책: 서비스는 kube-proxy에 의해 관리되고 여러 개의 iptables 규칙으로 설정할 수 있다.

서비스의 외부 연결 방법

  • NodePort
  • clusterIP
  • LoadBalancer

Kubernetes Worker Network

  • Kubernetes는 파드 단위로 배포가 되며 하나의 파드는 Overlay Network을 가진다.
  • 파드는 하나 이상의 컨테이너를 가지게 되지만 파드에는 하나의 IP만 부여할 수 있다.

Node간 Network Communication

  • 서로 다른 노드에 있는 파드간 통신은 Proxy Container(Kube-proxy)를 통해서 구성할 수 있다.

외부와 Network Communication

  • 클라이언트가 외부에서 해당 서비스에 접근하기 위해서는 크게 NodePort와 LoadBalancer를 사용할 수 있다.
  • NodePort는 해당 Worker 노드의 포트를 외부에 오픈해서 사용자가 직접 Worker 노드의 포트로 직접 접속하는 방식을 사용한다.
  • LoadBalancer의 경우 서비스를 배포하고 나면 External IP로 Loadbalcner로 접속하도록 설정할 수 있다.

Ingress

  • 서비스와 파드는 클러스터 네트워크에 의해 라우팅이 가능한 IP들을 가진다.
  • Ingress란 클러스터 서비스들에게 연결하기 위한 inbound connection을 허용하는 규칙들의 모음이다.
  • 단순히 트래픽을 로드 밸런싱 해주는 것 이외에도 SSL, Virtual Host 등의 기능을 제공한다.
  • Ingress를 사용하여 NodePort로 서비스를 배포한다.

Overlay network

  • 가상 네트워크 인터페이스와 bridge와 라우팅 rule의 조합을 overlay network라고 한다.
  • 쿠버네티스 네트워크에서는 overlay network를 이용하여 파드들이 서로 정보를 주고 받기 때문에 파드 네트워크라고 한다.

CNI

컨테이너 네트워크 인터페이스

  • CNCF 프로젝트 중 하나다.
  • 리눅스 컨테이너를 위한 네트워킹으로 런타임과 플러그인 간의 상호 작용을 정의한다.
  • 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기 위한 표준 API다.

Adopters (Plugins)

Container runtimes

  • CoreOS Tectonic: Enterprise Ready, Prtable, Upstream Kubernetes
  • rkt: container engine
  • Kurma: container runtime
  • Kubernetes: a system to simplify container operations
  • OpenShift: Red Hat's container platform
  • Cloud Foundry: a platform for cloud applications
  • Apache Mesos: a distributed systems kernel

3rd party plugins

  • Project Calico: a layer 3 virtual network
  • Weave: a multi-host Docker network
  • Contiv Networking: policy networking for various use cases
  • SR-IOV
  • Cilium: BPF & XDP for containers
  • Infoblox: enterprise IP address management for containers
  • Multus: a Multi plugin
  • Romana: Layer 3 CLI plugin supporting network policy for Kubernetes
  • CNI-Genie: generic CNI network plugin
  • flannel a network fabric for containers, designed for Kubernetes
  • CoreOS Kubernetes Namespace CNI: select CNI plugin per-namespace
  • VMware NSX plugin
  • Nuage VSP plugin

오버레이

오버레이 개념