728x90
1️⃣ 개요
기본적으로 Kubernetes Pod은 하나의 기본 네트워크(CNI)를 통해 통신합니다. 하지만,
멀티 네트워크가 필요한 경우에는 Multus CNI를 사용해 Pod에 여러 개의 네트워크 인터페이스를 부여할 수 있습니다.
이 글에서는 DaemonSet에 Multus를 적용하여 노드마다 멀티 네트워크가 연결된 Pod를 실행하는 방법을 설명합니다.
2️⃣ Multus란?
항목 | 설명 |
역할 | Kubernetes CNI 플러그인으로, Pod에 여러 개의 네트워크 인터페이스 부여 가능 |
용도 | 데이터/관리 네트워크 분리, SR-IOV, DPDK 환경, 이중화 등 |
주요 기능 | 기본 네트워크 외의 추가 네트워크 (Secondary Network) 연결 지원 |
✅ Multus는 **다양한 네트워크 플러그인(CNI)**과 함께 사용할 수 있으며, 각 Pod에 맞춤 네트워크 구성을 제공할 수 있습니다.
3️⃣ 네트워크 정의: NetworkAttachmentDefinition 생성
Multus를 활용하려면 먼저 **추가 네트워크 정의(NetworkAttachmentDefinition, NAD)**가 필요합니다.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: custom-bridge-net
namespace: default
spec:
config: |
{
"cniVersion": "0.3.1",
"type": "bridge",
"bridge": "br0",
"ipam": {
"type": "static",
"addresses": [
{
"address": "192.168.100.10/24",
"gateway": "192.168.100.1"
}
]
}
}
📌 설명
- 이 네트워크는 br0라는 브리지를 통해 Pod에 추가 인터페이스를 부여합니다.
- IP는 static 방식이며, 다수의 Pod가 사용할 경우 이 설정은 동적으로 생성되어야 합니다.
4️⃣ DaemonSet에 Multus 적용 예시
Multus 네트워크를 Pod에 적용하려면 annotations를 설정해야 합니다.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: multus-agent
spec:
selector:
matchLabels:
app: multus-agent
template:
metadata:
labels:
app: multus-agent
annotations:
k8s.v1.cni.cncf.io/networks: custom-bridge-net # Multus 네트워크 연결 지정
spec:
containers:
- name: multus-agent
image: busybox
command: ["sh", "-c", "ip a && sleep 3600"]
📌 설명
- annotations를 통해 custom-bridge-net NAD에 연결합니다.
- Pod 내부에서는 eth0(기본 인터페이스) 외에 net1 등의 이름으로 추가 인터페이스가 생성됩니다.
5️⃣ Multus 적용 후 네트워크 확인
kubectl exec -it <pod-name> -- ip a
출력 예시:
1: lo: ...
2: eth0: ... # 기본 CNI
3: net1: ... # Multus로 연결된 추가 인터페이스
✅ 멀티 네트워크가 정상적으로 붙었다면 net1 인터페이스가 표시됩니다.
6️⃣ 운영 시 고려사항
항목 | 설명 |
NAD는 네임스페이스별로 생성됨 | DaemonSet이 배포되는 네임스페이스와 NAD의 네임스페이스가 일치해야 함 |
IP 중복 방지 | Static IP 할당 시 자동화 또는 DHCP 고려 |
privileged 모드 필요 여부 | SR-IOV, DPDK 같은 고성능 NIC를 사용하는 경우 Privileged 권한 필요 |
네트워크 보안 정책 | 네트워크 간 트래픽 분리를 위해 NetworkPolicy와 함께 사용 가능 |
🔥 7️⃣ 결론
✔ Multus를 사용하면 DaemonSet Pod에 여러 개의 네트워크를 부여할 수 있어 다양한 네트워크 구조를 지원할 수 있습니다.
✔ NetworkAttachmentDefinition을 먼저 정의하고, 해당 네트워크를 Pod의 annotation에 지정하는 방식으로 구성합니다.
✔ 로그 수집, 트래픽 감시, 고속 NIC 사용 등의 시나리오에 유용하며, 보안과 자원 할당에 대한 추가 고려가 필요합니다.
728x90