profile
커널, 컴파일러, 가상화, 컨테이너, 쿠버네티스, ...

[K8S/Cilium] eBPF 기반 서비스 메쉬 분석 (Per-Node Proxy)

Cilium 이 최근 공개한 eBPF 기반의 서비스 메쉬에서 중요하게 언급하고 있는 것 중에 하나는 Pod 마다 사이드카 형태로 프록시를 추가하지 말고 노드별로 하나씩만 설치해서 사용하자는 것이다. 이는 특히 대규모의 클러스터에서 많은 사이드카 프록시로 인해 발생하는

2022년 1월 25일
·
0개의 댓글
·

[K8S] Cilium NetworkPolicy 문제 분석

오늘은 최근 회사에서 GitOps 를 적용하기 위해 ArgoCD 를 설치하던 중 발생했던 네트워크 정책(NetworkPolicy) 관련된 문제에 대해 살펴보고자 한다.Helm 을 이용하여 ArgoCD 를 설치하였는데 아래와 같이 두 개의 Pod 만 동작하지 않는 문제가

2022년 1월 6일
·
0개의 댓글
·

[K8S] 메모리 QoS 지원 분석

쿠버네티스처럼 다양한 워크로드를 제한된 자원을 이용하여 효율적으로 실행해야하는 플랫폼에서는 QoS 의 역할과 보장이 매우 중요하다. 특히 성능에 큰 영향을 주는 메모리 관리는 무엇보다 중요하며, 최근 CGroupV2 와 스왑 지원으로 메모리 관리 기능이 점점 더 강화되

2021년 12월 20일
·
0개의 댓글
·

[K8S] Cilium RPFilter 문제 분석

리눅스는 패킷의 출발지 주소를 마음대로 조작해서 공격하는 IP 스푸핑 공격을 막기위해 RPFilter (Reverse Path Filter) 라는 기능을 제공한다. 이 기능은 간단히 소개하면 특정 네트워크 장치로 들어온 패킷이 동일한 네트워크 장치로 나갈 수 있는지를

2021년 12월 10일
·
0개의 댓글
·

[K8S] Cilium CGroupV2/PrivateNS 문제 분석

최근 공개된 우분투 21.10 은 컨테이너와 관련된 상당히 큰 부분이 변경되었다. 마침내 CGroupV2 가 적용되었고, 도커도 업그레이드되면서 CGroup 네임스페이스의 기본값이 Private 으로 설정되었다. 오늘은 이로 인해 발생한 문제에 대해 자세히 살펴보도록

2021년 11월 30일
·
0개의 댓글
·

[K8S] NAT 루프백 문제 분석 (LRP)

오늘은 지난 글에서 소개했던 NAT 루프백 문제에 대해 다시 소개하고자 한다. 이유는 몇 개 국가의 IDC 혹은 클라우드에서 NAT 루프백 문제를 해결하기 위해 라우터에 필요한 설정을 추가했음에도 불구하고 원인을 정확히 알 수 없는 이유로 동작하지 않는 문제가 발생해서

2021년 11월 10일
·
0개의 댓글
·

[eBPF] BPF 실행파일 로딩 과정 분석 (JIT)

BPF 파일을 컴파일하면 BPF 코드가 생성된다. 이 BPF 코드는 자바 바이트코드처럼 특정 CPU 에 종속적이지 않은 일종의 중간코드이고, 리눅스 커널은 런타임에 몇 가지 방법으로 이 BPF 코드를 실행한다. 오늘은 리눅스 커널이 BPF 코드를 실행하는 방식에 대해

2021년 10월 16일
·
0개의 댓글
·

[eBPF] BPF 실행파일 로딩 과정 분석 (서브프로그램)

BPF 는 일반적으로 하나의 함수(메인함수)가 하나의 섹션이 되고, 하나의 섹션이 하나의 프로그램이 된다. 그래서 커널에서 해당 프로그램을 실행할 때는 프로그램의 시작 위치가 메인함수의 시작 위치이기 때문에 간단히 처음부터 실행하면 된다. 하지만 아래와 같이 메인함수에

2021년 9월 24일
·
0개의 댓글
·

[eBPF] BPF 실행파일 로딩 과정 분석 (메모리 재배치)

BPF 는 일반적인 프로그램과 유사한 방식으로 개발하기 때문에 유사한 실행파일 및 메모리 구조를 가지고 있지만, 커널 안에서 제한된 환경으로 실행되기 때문에 로딩(loading)하는 과정은 상당히 다르다. 오늘은 BPF 의 실행파일 및 메모리 구조에 대해 간단히 살펴본

2021년 9월 17일
·
0개의 댓글
·

[eBPF] CO-RE (Compile Once - Run Everywhere) 기능 분석

최근 몇 년간 리눅스 커널 커뮤니티에서 가장 주목받고 있는 기술은 누가 뭐래도 eBPF 일 것이다. 리눅스 커널에 안정성과 확장성, 그리고 생산성을 동시에 부여하는 혁신적인 기술로, 대표적인 쿠버네티스의 CNI 인 Cilium과 Falco, Pixie 등 다양한 오픈소

2021년 9월 8일
·
0개의 댓글
·

[K8S] 메모리 스와핑 지원 분석

쿠버네티스는 기본적으로 메모리 스와핑을 지원하지 않는다. 20년 넘는 시간동안 운영체제 관련 연구/개발을 수행하면서 메모리 스와핑이 만들어내는 다양한 문제들에 대한 연구를 많이 봤었고, 이러한 문제들때문에 메모리 스와핑을 강제로 막는 경우도 많이 봤었기 때문에 딱히 이

2021년 9월 3일
·
0개의 댓글
·
post-thumbnail

[K8S] Cilium Socket-based LoadBalancing 에 의한 Istio Envoy 우회 문제 분석

오늘은 Cilium 에서 소켓 기반 로드밸런싱을 이용할 때 발생하는 EnvoyProxy 사이드카 우회 문제에 대해 살펴보고자 한다. 이는 현재 모든 서비스 메쉬(Istio, Linkerd, ...)에서 서비스 IP 기반으로 동작하는 모든 필터를 우회하는 심각한 문제를

2021년 8월 25일
·
3개의 댓글
·

[K8S] NAT 루프백 문제 분석 (SNAT)

오늘은 어떤 국가의 지역 클라우드 서비스를 이용하여 쿠버네티스 클러스터를 구축하던 중 발생했던 NAT 루프백 문제(Hairpin NAT)를 파악하고 해결했던 과정에 대해 간단히 소개하고자 한다. 일반적으로는 크게 신경쓰지 않아도 되는 문제인데, 해당 국가의 클라우드 서

2021년 8월 18일
·
0개의 댓글
·

[K8S] VXLAN 사용 불가 문제 분석

우리 회사에서는 주로 의료데이터를 다루다보니 개인정보보호법에 의해 서비스를 운영하는 국가 외부로 데이터가 유출되면 안 된다. 그래서 한국이나 미국 같이 AWS 나 GCP 리전이 있는 국가들은 해당 서비스를 이용하여 운영할 수 있지만, 해당 국가에 리전이 없는 경우에는

2021년 8월 11일
·
0개의 댓글
·
post-thumbnail

[K8S/Cilium] Socket-Based LoadBalancing 기법

Cilium 에서 ClusterIP 서비스로 통신할때 로드밸런싱이 이루어지는 과정은 아래 그림과 같다. 왼쪽 그림은 네트워크 기반 로드밸런싱 방식이고, 오른쪽 그림은 소켓 기반 로드밸런싱 방식이다. 간단한 설명을 위해 백엔드가 같은 노드에 있는 경우만 살펴보자.cili

2021년 7월 2일
·
0개의 댓글
·
post-thumbnail

[K8S/Cilium] IPVLAN 기반 Cilium 의 NodePort 버그 분석

Cilium 에서 제공하는 IPVLAN 기반의 Routing Datapath 기법을 사용하던 중 NodePort 관련 버그를 발견하였다. (NodePort 는 모든 노드의 지정된 포트로 접속하면 백엔드(선택된 Pod)로 연결해주는 서비스이다.) IPVLAN 을 사용하는

2021년 6월 30일
·
0개의 댓글
·
post-thumbnail

[K8S/Cilium] 라우팅 기법 성능 평가

쿠버네티스의 CNI 에서 성능에 가장 큰 영향을 미치는 것은 다음 두 가지이다.eBPF vs IPTables (IPVS)Direct Routing vs TunnelingCilium 과 가장 대표적인 CNI 인 Calico 를 이용하여 어느 정도의 성능 차이가 나는지 살

2021년 6월 12일
·
0개의 댓글
·
post-thumbnail

[K8S/Cilium] bpf_redirect_peer()/bpf_redirect_neigh()

Cilium 에서 VETH 를 기반으로 Pod-To-Pod 통신이 이루어지는 과정은 아래 그림의 왼쪽과 같다.Pod1 의 eth0 으로 패킷을 전달하면 veth1 을 통해 호스트 네트워크 스택으로 패킷이 전달된다.여기에서 목적지 주소를 이용하여 몇 단계의 처리를 거친

2021년 6월 3일
·
0개의 댓글
·
post-thumbnail

[K8S/Cilium] DSR (Direct Server Return)

Cilium 에서는 외부에서 쿠버네티스 서비스에 접근할 때 사용되는 NodePort, LoadBalancer 등의 성능을 개선할 수 있는 DSR(Direct Server Return) 기능을 제공한다.cilium.dsr위 그림처럼 DSR 의 목적은 Pod(nginx)의

2021년 5월 12일
·
2개의 댓글
·
post-thumbnail

[K8S/Cilium] NodePort 서비스

외부에서 쿠버네티스 서비스에 접근하는 대표적인 방법 중의 하나는 NodePort 서비스를 이용하는 것이다. NodePort 서비스를 생성하면 30000~32767 사이의 임의의 값이 포트 번호로 할당되고, 선택된 Pod 이 어디에있든 상관없이 모든 노드에서 해당 포트

2021년 5월 12일
·
0개의 댓글
·