본문 바로가기
IT 잡지식/DevOps

[CKA] KodeKloud - CNI

by 쯀리♥️ 2024. 8. 8.

안녕하세요, 쯀리입니다. 

지난시간에 잠깐 짚고 넘어갔던 CNI에 대해 알아보겠습니다. 

 


CNI란

CNI는 "Container Network Interface"의 약자로, 컨테이너 네트워킹을 위한 표준 인터페이스를 정의한 것입니다. Kubernetes와 같은 컨테이너 오케스트레이션 시스템에서 네트워킹을 관리하기 위해 사용됩니다. CNI는 컨테이너가 생성되거나 삭제될 때 네트워크 설정과 관련된 작업을 수행할 수 있는 플러그인 시스템을 제공합니다.

CNI의 주요 개념

  1. CNI 플러그인:
    • CNI 플러그인은 컨테이너의 네트워크 인터페이스를 설정하고 관리합니다.
    • 플러그인은 컨테이너가 시작될 때 네트워크 설정을 구성하고, 컨테이너가 종료될 때 해당 설정을 정리합니다.

CNI의 구성 요소

  1. 네트워크 플러그인:
    • Flannel: 간단한 오버레이 네트워크를 제공하여 다수의 호스트 간에 네트워크를 구성합니다.
    • Calico: 네트워크 정책과 보안 기능을 제공하는 네트워크 플러그인입니다.
    • Weave: 자동 네트워크 구성을 제공하며, 간단한 설정으로 컨테이너 네트워킹을 지원합니다.
    • Cilium: 네트워크 보안 및 가시성을 제공하는 플러그인으로, eBPF를 사용하여 고성능 네트워킹을 제공합니다.
  2. CNI 사양 파일:
    • /etc/cni/net.d/ 디렉토리에 위치하며, 네트워크 설정을 정의하는 JSON 형식의 파일입니다.

 


Quiz

1. Inspect the kubelet service and identify the container runtime endpoint value is set for Kubernetes.

controlplane ~ ➜  ps -aux | grep kubelet | grep container
root        4374  0.0  0.0 4137476 95568 ?       Ssl  12:58   0:04 
/usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf 
--kubeconfig=/etc/kubernetes/kubelet.conf 
--config=/var/lib/kubelet/config.yaml 
--container-runtime-endpoint=unix:///var/run/containerd/containerd.sock 
--pod-infra-container-image=registry.k8s.io/pause:3.9

unix:///var/run/containerd/containerd.sock 

 

2. What is the path configured with all binaries of CNI supported plugins?
CNI의 기본 설정 디렉토리는 "/etc/cni/net.d/" 이고
CNI 플러그인 실행 파일들이 위치하는 디렉토리는 /opt/cni/bin/입니다. 

3. Identify which of the below plugins is not available in the list of available CNI plugins on this host?

controlplane /opt/cni/bin ➜  ls
bandwidth  dhcp   firewall  host-device  ipvlan    macvlan  ptp  static  tuning  vrf
bridge     dummy  flannel   host-local   loopback  portmap  sbr  tap     vlan

정답: cisco

4. What is the CNI plugin configured to be used on this kubernetes cluster?
CNI의 종류에는 Flannel, Calico, Weave, Cilium이 있는데  이중 plugin에 Flannel만 보이네요

5. What binary executable file will be run by kubelet after a container and its associated namespace are created?

controlplane /etc/cni/net.d ✖ cat 10-flannel.conflist 
{
  "name": "cbr0",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

type: flannel입니다.


 

 

 


참조

 Udemy Labs - Certified Kubernetes Administrator with Practice Tests