본문 바로가기

DevOps & Cloud

3. Cilium

728x90
반응형

연구실 프로젝트 Season1 Ep3

 

연구실에서 제공받은 서버로 3개의 인스턴스를 생성하고 쿠버네티스를 설치해서 각각을 master, worker1, worker2로 지정해 줬다.

이때 CNI는 Cilium으로 설치했다. 이전 글에서는 CNI에 대해서 간단하게 다뤘고 Cilium의 설치방법에 대해서 정리했다. 이번 글에서는 Cilium과 Hubble에 대해서 정리해보고자 한다.

 

cilium은 linux eBPF를 이용한 고성능 네트워크 설루션이다. iptables를 이용해서 쿠버네티스 트래픽 라우팅의 단점을 보완한다. iptables는 파드와 서비스 개수가 많아지면 네트워크 성능 저하가 발생한다.

 

첫 번째 특징은, iptables는 일치한 iptables 규칙을 찾을 때까지 모든 규칙을 평가하는 특징이 있다. 파드와 서비스가 많아질수록 규칙을 찾는 시간이 지연되므로 네트워크 성능에 영향을 끼침. kube-proxy가 iptables모드를 사용하면, 파드 또는 서비스로 가는 트래픽은 iptables 규칙(rule)에 따라서 흘러감. 파드/서비스가 생성될 때마다 iptables규칙이 여러 개 생성. 예를 들어 파드 1개가 생성되면 iptables가 5개 이상 생성될 수 있다.처럼 파드/서비스 개수가 많아질수록 iptables는 기하급수적으로 증가합니다. 결국, 일치하는 iptables를 찾을 때까지 수많은 iptables 규칙을 검사한다.

 

두 번째 특징은 iptaebls규칙 추가방법이다. 새로운 규칙이 추가될 때마다 기존의 전체 규칙을 바꿔야 한다. 데이터베이스 행(row)을 추가하는 방법이 아니다. 이러한 결함을 "Incremental Update"기능 미지원이라고 부른다. 블로그 인용에 따르면 5000개의 서비스가 존재하는 상태에서 iptables 규칙을 추가하면 11분 정도가 소요된다고 한다.

출처: https://cilium.io/blog/2018/04/17/why-is-the-kernel-community-replacing-iptables
출처: https://blog.naver.com/kangdorr/222593265958

 

 

eBPF는 운영 체제 커널에서 샌드박스 프로그램을 실행할 수 있는 linux 커널에 기원을 둔 혁신적인 기술이다. 커널 소스 코드를 변경하거나 모듈을 로드할 필요 없이 커널의 기능을 안전하고 효율적으로 확장하는 데 사용한다.

네트워크 분야에서는 리눅스 네트워크 스택에 eBPF를 활용하여 사용자 정의 기능을 추가하거나 커널레벨 네트워크 레이어 흐름을 수정할 수 있다. 컨테이너 분야에서는 사용자가 직접 eBPF를 적용하기 어려우니 Cilium이 쉽게 적용하도록 도와준다.

쿠버네티스에서는 CNI로 도입되어서 클러스터 네트워킹 역할을 담당한다.

Cilium CNI는 크게 네트워킹, 보안, 옵저빌리티 기능을한다.(https://cilium.io/blog/2020/11/10/ebpf-future-of-networking/)

해당 레퍼런스에서는 쿠버네티스가 iptables에 의존하게 되면서 발전속도가 느려질 가능성이 있었는데 eBPF를 통해서 해결 됐다고 한다.

또한 리눅스 커널에 내장되어 있기 때문에 안정적이고 속도가 빠르다고 한다.

 

Cilium CMI는 기능을 수행하기 위한 4가지 구성요소가 있다.(https://docs.cilium.io/en/stable/concepts/overview/)

 

  • Cilium
    • agent: Cilium을 실행하기 위한 네트워크 정책, 설정 등을 수행합니다. 쿠버네티스에서는 데몬 셋으로 실행되어 각 노드마다 pod로 실행되고 API서버를 이용하여 작업을 수행합니다.
    • client: Cilium 명령어를 실행하기 위한 클라이언트입니다. 
    • operator: 쿠버네티스 클러스터에 전체에 한 번씩 수행되어야 하는 작업을 담당합니다.
  • Hubble: 네트워크와 보안 모니터링 역할을 수행하며 server, relay, client, graphical UI로 구성되어 있습니다.
  • eBPF: 네트워킹 처리를 담당합니다.
  • Data Source: 각 노드 간 실행하고 있는 cilium agent상태를 동기화하기 위한 데이터를 저장합니다. 

 

kubectl get po -n kube-system 명령어를 통해서 확인해 볼 결과 Cilium CNI 및 Hubble이 정상적으로 작동하고 있다.

 

쿠버네티스에 대한 개념을 잡기 좋아 보이는 글이다.

 

https://hoing.io/archives/131

 

쿠버네티스(kubernetes) (2) - 기본 용어 - 개념 - 컴포넌트 - 클러스터 구성

 

hoing.io

 

Cilium 설치 및 삭제 

 

Cilium이 뭔가 꼬였을 경우 아래 방법으로 삭제한다.

kubectl delete -f https://raw.githubusercontent.com/cilium/cilium/1.7.2/install/kubernetes/quick-install.yaml

 

 

cilium 설치는 아래와 같다.

CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/master/stable.txt)
# arm은 aarch64로 변경 -> 설치문서랑 다르게 내맴데로 변경한 부분
CLI_ARCH=amd64
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}

# Linux kernel >= 4.9.17을 사용해야 한다길래 한번 확인해봄
# 현재 리눅스 커널버전 확인
uname -r

cilium install

cilium status 명령어로 위처럼 나오면 정상이다.

728x90
반응형

'DevOps & Cloud' 카테고리의 다른 글

5. sock-shop 과 XQuartz  (0) 2023.01.12
4. Hubble  (0) 2023.01.12
서버 및 쿠버네티스 설정값  (0) 2023.01.10
2. 쿠버네티스 설치 및 설정  (0) 2023.01.10
1. OpenStack Instance의 SSH 접속  (0) 2023.01.10