K8S 클러스터 네트워킹

개발 및 관리/클라우드 2023. 9. 13. 18:31 posted by HighLighter
반응형


* K8S 클러스터 네트워킹
- 전체 클러스터를 위한 하나의 가상 네트워크
- 각 파드에는 고유한 IP가 존재
- 서비스는 파드와 다른 범위의 IP 대역을 가짐
- 클러스터 CIDR: 클러스터 내 파드에 할당하는데 사용되는 IP 범위
- 서비스 클러스터 IP 범위: 서비스에 대한 IP범위, 이것은 클러스터 CIDR와 중복 불가
- 파드 CIDR: 특정 노드 내 파드에 대한 IP 범위, 이 범위는 클러스터 CIDR 내에 있어야 하지만 다른 노드의 파드 CIDR과 겹치면 안됨
- IP는 컨테이너가 아니라 파드에 할당된다.
- 컨테이너간 통신: Highly-coupled 된 컨테이너간 통신을 위해 pods와 로컬 호스트 통신으로 해결
- 파드와 서비스 통신: 서비스에서 담당
- 외부와 서비스 통신: 서비스에서 담당
- Pod 내부의 container-to-container 통신: 컨테이너 엔진(예컨데, 도커)
- 외부와 Pod의 통신: Service, Ingress, Engress

-----------------------------------------------------------------------------------------------------------------------------------

* K8S 클러스터 네트워킹 구성
- 사용자의 Pod 접속: 인터넷 사용자들의 클라이언트는 Pod에 직접 접속할 수 있고 Service를 설정해야 함
- 서비스 정책: Service는 kube-proxy에 의해 관리되고 여러 개의 iptables 규칙으로 설정
- Service의 외부 연결 방법: (1) NodePort , (2) clusterIP, (3) LoadBalancer

1. K8S Worker Network
- K8S는 Pod 단위로 배포가 되며 하나의 Pod는 Overlay Network을 가진다.
- Pod는 하나 이상의 컨테이너를 가지게 되지만 Pod에는 하나의 IP만 부여

2. Node간 Network Communication
- 서로 다른 노드에 있는 Pod간 통신은 Proxy Container(kube-proxy)를 통해서 구성

3. 외부와 Network Communication
- 클라이언트가 외부에서 해당 서비스에 접근하기 위해서는 크게 NodePort와 LoadBalancer를 사용할 수 있다.
- NodePort는 해당 Worker 노드의 포트를 외부에 오픈해서 사용자가 직접 Worker 노드의 포트로 직접 접속하는 방식
- LoadBalancer의 경우 서비스를 배포하고 나면 External IP로 LoadBalancer로 셋팅

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

5. Overlay Network
- 가상 네트워크 인터페이스와 Bridge와 Routing rule의 조합을 Overlay Network 
- K8S 네트워크에서는 Overlay Network를 이용하여 Pod들이 서로 정보를 주고 받기 때문에 Pod 네트워크라고 함

6. CNI : 컨테이너 네트워크 인터페이스
- CNCF 프로젝트 중 하나
- 리눅스 컨테이너(예컨데, 도커)를 위한 네트워킹으로 런타임과 플러그인 간의 상호 작용을 정의
- 컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기
www.cncf.io

7. Adopters(Plugins)
 7-1. Container runtimes
  CoreOS Tectonic : Enterprise Ready ,  Upstream Kubernetes
  rkt : Container engine
  Kurma : Container runtime
  K8S : a system to simplify container operations
  Openshift : Redhat's container platform
  Cloud Foundry : a platform for cloud applicatoins
  Apache Mesos : a distributed systems kernel
 
 7-2. 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 CNI plugin supporting network policy for K8S
  CNI Genie : generic CNI network plugin
  Flannel a network fabric for containers, designed for K8S
  CoreOS K8S Namespace CNI - select CNI plugin per-namespace
  VMware NSX plugin
  Nuage VSP plugin
 
8. 쿠버네티스 클러스터 네트워크는 전체 클러스터를 위한 하나의 가상 네트워크로 각 파드에는 고유한 IP가 존재하며 서비스는 파드와 다른 범위의 IP 대역을 가진다.
9. 쿠버네티스에서 IP는 container가 아니라 pod에 할당된다.
10. 컨테이너 네트워크 인터페이스(CNI)는 리눅스 컨테이너를 위한 네트워킹으로 런타임과 플러그인 간의 상호작용을 정의하며 표준 API를 제공한다.

11. 쿠버네티스 클러스터 구축은 컨테이너 가상화인 도커를 기반으로 쿠버네티스 패키지 설치를 통해 구축된다.
12 Prometheus를 이용한 모니터링 구축은 쿠버네티스 기반으로 ConfigMap 생성, 배포 및 서비스 생성, 가시화 도구 설치 등으로 구축된다.

-----------------------------------------------------------------------------------------------------------------------------------

반응형