쿠버네티스에서 CNI(Container Network Interface)는 네트워크 플러그인과 관련된 표준 인터페이스로, 클러스터 내에서 Pod 간의 네트워킹을 설정하고 관리하는 데 사용됩니다. 쿠버네티스는 여러 네트워크 플러그인을 지원하며, 이러한 플러그인들이 네트워크를 설정할 수 있도록 CNI 규격을 따릅니다.
CNI를 이해하는 데 도움이 될 수 있는 비유는 "배관 시스템"입니다.
이 비유에서 CNI는 "어떻게 방들 간에 물이 흐를지"를 결정하는 규칙이자 설치 가이드입니다. 네트워크 플러그인은 "실제 배관"이고요. 쿠버네티스는 이 배관 시스템을 통해 각 방이 물을 원활히 주고받도록 관리합니다.
쿠버네티스에서 CNI 플러그인을 사용하는 방법은 비교적 간단합니다. 여기서는 대표적인 CNI 플러그인인 Calico를 예로 들어 설명하겠습니다.
Calico 설치 예제:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
이 명령어를 실행하면, Calico 네트워크 플러그인이 설치되어 쿠버네티스 클러스터에서 작동하게 됩니다. Calico는 네트워크 정책, IP 주소 관리, 보안 등을 제공하는 CNI 플러그인입니다.
설치 후, Calico는 자동으로 Pod 간의 네트워킹을 관리하기 시작합니다. 또한, 네트워크 정책(Network Policy)을 통해 특정 Pod 간의 트래픽을 허용하거나 차단할 수 있습니다.
예제: 특정 네임스페이스의 Pod 간 통신 허용
# network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
namespace: default
spec:
podSelector:
matchLabels:
role: backend
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
이 YAML 파일은 frontend 라벨이 붙은 Pod가 backend 라벨이 붙은 Pod에 접근할 수 있도록 허용하는 네트워크 정책입니다.
네트워크 플러그인이 제대로 작동하고 있는지 확인하기 위해서는 Pod 간의 네트워크 연결을 테스트해볼 수 있습니다.
네트워크 테스트 예제:
kubectl exec -it <frontend-pod-name> -- ping <backend-pod-ip>
위 명령어를 통해 frontend Pod에서 backend Pod로 네트워크 연결이 잘 되는지 확인할 수 있습니다.
CNI는 쿠버네티스에서 네트워크를 설정하고 관리하기 위한 표준 인터페이스입니다. 이를 통해 다양한 네트워크 플러그인을 사용할 수 있으며, 각 플러그인은 쿠버네티스의 네트워킹을 담당하게 됩니다. 배관 시스템 비유를 통해 CNI가 어떻게 작동하는지 이해하고, 실습을 통해 직접 CNI 플러그인을 설치하고 설정해보세요.