1) 개요 컨테이너란 Host OS로부터 격리된 환경에서 실행되는 프로세스 그룹이다. Host OS 커널을 공유하며 컨테이너가 동작하기 때문에 Host OS로부터 컨테이너가 완전히 독립적일 수는 없지만 격리된 공간에서 어플리케이션 동작에 필요한 프로세스만을 묶어서
1) 개요 앞서 chroot로 생성한 격리공간에는 다음과 같은 단점이 있었다. 탈옥이 가능하다. 완전한 격리가 불가능하다. (Host의 filesystems, network 등에 접근 가능) root 권한 사용 가능하다. host의 자원을 무제한으로 사용할 수 있다. 이러한 단점의 일부를 극복할 수 있는 pivot_root를 통한 격리에 대해 알아보겠...
1. chroot를 이용한 프로세스 격리 https://velog.io/@_gyullbb/1-1.-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B2%A9%EB%A6%AC 2. pivot_root + mnt를 이용한 프로세스 격리 https://velog.io/@_gyullbb/1-2.-%EC%BB%A8%ED%85%8C%EC%9D...
컨테이너 내부에 Docker를 사용하는 것을 의미한다.그 중 Kind는 Node역할을 하는 Container안에서 또 컨테이너를 띄워 클러스터를 구성하는 방식으로, 손쉽게 클러스터를 생성하고 테스트 용도로 활용할 수 있다.Kind 설치 후 아래 yaml을 활용하여 클러

Calico CNI 구성 Calico는 아래의 구성요소들을 통해 Kubernetes에서의 네트워크 통신 기능을 제공한다. Calico-kube-controllers Kubernetes API Server로부터 pod, namespace, 네트워크 정책 등 클러스터의 네트워크 리소스를 주기적으로 조회하여 새로운 네트워크 정책이 생성된 것을 감지한 후 Cal...

동일 노드 내 파드 통신 동일 노드 내 파드 간 통신은 가상 라우터 calico-node를 통해 내부에서 직접 통신된다. 동일 노드 내에 파드를 2개 생성 한 후 통신을 하며 모니터링 해본다. pod 생성 전 상태 pod 생성 후 상태 calicoctl을 통해서

Service Kubernetes Service에는 clusterIP, nodePort, LoadBalancer 3가지 타입이 존재하고, Service는 kube-proxy에 의해 동작하게 된다. 각각에 대하여 상세히 알아보자. kube-proxy kube-proxy란? 서비스 통신 동작에 대한 설정을 관리하는 역할로 모든 Kubernetes 노드에 da...

LoadBalancer LoadBalancer 타입 서비스는 크게 2가지 방식으로 동작한다. 각 방식에 대하여 살펴보자. LoadBalancer - Nodeport - Pod 외부 클라이언트가 LoadBalancer로 접속을 하면, LoadBalancer는 노드의 NodePort를 목적지 포트로 트래픽을 전송한다. 이후 노드의 iptables 정보로 Po...
IPVS란 IPVS 는 리눅스 커널에서 동작하는 소프트웨어 로드밸런서이다. 백엔드(플랫폼)으로 Netfilter 를 사용하며, TCP/UDP 요청을 처리 할 수 있다. IPVS 설정 확인 strictARP IPVS 클러스터를 생성하고 난 후 kube-proxy configmap을 확인하면 strictARP: true 설정을 볼 수 있다. * strict...

ingress란 Kubernetes에서 클러스터 외부의 네트워크 트래픽을 클러스터 내부의 서비스로 라우팅하기 위한 리소스, 도메인 기반 라우팅 / 경로 기반 라우팅 / TLS 인증 / 로드 밸런싱 등 기능을 제공한다. ingress controller란 Ingress Controller는 정의된 Ingress 리소스를 실제로 동작하게 하는 리소스로, 클러...

Istio 구성요소 Istio는 크게 네트워크 정책을 설정하고 데이터플레인에 정책을 전달하는 중앙 관리 시스템인 컨트롤플레인, 실제로 서비스 간의 통신을 제어하며 실제 트래픽을 처리하는 데이터플레인으로 이루어진다. 각각에 대해서 자세히 알아본다. 컨트롤 플레인 (Istiod) Istiod Istiod는 컨트롤플레인의 관리 시스템이 동작하기 위한 핵심 컴포...

BPF/eBPF iptables는 오랜 기간 리눅스 네트워크 필터링 및 방화벽의 핵심 역할을 해왔지만, 몇 가지 명확한 한계가 있었다. 성능 저하: 방대한 규칙이 쌓일수록 검사해야하는 패킷 수가 늘어나면서 성능이 저하된다. 복잡한 유지보수: 규칙이 많아질수록 관리가

AWS VPC CNI AWS VPC CNI는 Amazon EKS에서 Pod가 VPC의 IP 주소를 직접 사용할 수 있게 해주는 네트워크 플러그인이다. 이를 통해 Pod와 외부 네트워크간의 통신이 VPC 내에서 직접적으로 이루어지며, 추가적인 네트워크 변환 없이 통신이 가능하도록 한다. VPC CNI의 중요한 특징 중 하나는 Pod가 노드의 네트워크 대역(...
Migration to Cilium 현재 많은 Kubernetes 클러스터에서 Flannel 또는 Calico와 같은 전통적인 CNI(Container Network Interface) 플러그인이 사용되고 있다. 하지만 최근 eBPF 기반의 고성능 네트워킹 기능이 각광받으면서, CNI 플러그인을 Cilium으로 전환하는 방향이 검토되고 있다. 다음은 Fl...

Hubble Hubble이란 Cilium의 eBPF 흐름을 기반으로, 네트워크 보안 정책, 서비스 흐름, L3~L7 수준의 트래픽을 관찰·분석할 수 있도록 도와주는 관찰/모니터링 플랫폼이다. Hubble 구성 요소 Cilium에서 제공하는 공식문서에는 Hubble을 이용한 Observability에 관해 상세하게 작성되어 있다. | 구성 요소 ...
IPAM (IP Address Management) IPAM이란 IP Address Management의 약자로, 네트워크의 IP 주소 할당을 자동화하고, 사용 상태를 추적하며, 충돌이나 낭비 없이 효과적으로 IP를 관리하는 시스템이다. Cilium은 기본적으로 eBPF를 기반으로 한 고성능 네트워킹을 제공하는데, 이때 여러 IPAM 모드를 통해 다양한 ...

Native Routing 환경에서 잘못된 라우팅 설정으로 인해 통신이 되지 않는 상황을 만들고, 이를 라우팅 설정 변경을 통해 해결하는 실습을 진행한다. 실습 환경 Kubernetes 클러스터 노드 k8s-ctr(IP: 192.168.10.100, podCIDR: 172.20.0.98) k8s-w1(IP: 192.168.10.101, podCIDR: ...
BGP ControlPlane 앞선 글에서 살펴본 것 처럼, 서로 다른 네트워크 대역 간 통신을 위해 라우터를 거쳐야 하는 환경에서는 노드가 많아질수록 수동 라우트 설정이 비효율적이라는 문제가 발생한다. 이러한 한계를 해결하기 위한 대표적인 방법에는 Overlay 네트워크와 BGP를 통한 동적 라우팅이 있는데, 이번 글에서는 BGP(Border Gatewa...
Cilium Service Mesh Cilium Service Mesh는 기존의 사이드카 프록시(Envoy 등)를 강제적으로 사용하지 않고, eBPF를 활용해 커널 레벨에서 네트워크 및 애플리케이션 계층 트래픽을 제어하는 서비스 메시 구조를 제공한다. 이를 통해 애플리케이션 성능 손실을 최소화하면서도 L3~L7 보안 정책, 트래픽 관리, 모니터링 기능을 통...
Gateway API Gateway API는 Kubernetes에서 서비스 트래픽의 진입 및 라우팅을 관리하기 위한 표준 API다. 기존 Ingress 리소스의 한계를 보완하고, 복잡한 L7 트래픽 관리, 멀티-테넌시, 확장성을 제공한다. Gateway API는 CRD(Custom Resource Definition) 형태로 제공되어 Kubernetes 네...

GPU 환경에서의 네트워크 최적화: Cilium + SR-IOV + Multus GPU 워크로드는 대규모 연산과 빠른 데이터 전송을 동시에 요구한다. 특히 분산 학습이나 대규모 데이터셋을 다루는 환경에서는 네트워크 지연(latency)과 대역폭(bandwidth)이 성능의 핵심 요소가 된다. Kubernetes 환경에서 이러한 요구를 충족하기 위해서는 S...
Cilium은 여러 수준에서 보안을 제공하는데, 각 수준은 개별적으로 사용될 수도 있고, 함께 결합하여 사용할 수도 있다. 각 수준에 대해 알아본다. Layer 3 (Identity-Based) 엔드포인트간 연결 정책을 정의하는 방식이다. 전통적인 Kubernetes에서 사용하는 IP 기반 보안 모델은 파드가 생성·삭제될 때마다 모든 노드의 보안 규칙을 ...