Multus CNI를 사용하여 다중 네트워크 인터페이스를 가지는 Pod 생성 방법을 설명합니다.
Multus CNI 소개
Multus CNI는 단일 Pod에 여러 네트워크 인터페이스를 연결하고 각각을 다른 주소 범위로 연결할 수 있도록 하는 고급 네트워크 구성 기능을 제공하는 CNI 플러그인입니다.
- Kubernetes 에서 각 Pod 은 기본적으로 Loopback 외에 하나의 네트워크 인터페이스만 가지고 있습니다. Multus CNI를 이용하면 여러 인터페이스가 있는 Multi-Home Pod을 만들 수 있습니다.
- Multus CNI는 다른 CNI 플러그인을 호출할 수 있는 일종의 메타 플러그인의 역할을 합니다. 따라서 Multus CNI와 연동될 다른 CNI를 필요로 합니다.
참고
Multus CNI 에 대한 더 자세한 설명은 Multus CNI 저장소를 참고해 주십시오.
Multus CNI 설치
Multus CNI를 설치하는 방법은 다음과 같습니다.
-
아래 명령을 통해 Cilium CNI의 CNI-Exclusive 모드를 비활성화해 주십시오.
-
Multus CNI의 Github 저장소를 복제한 후 Daemonset을 설치해 주십시오.
- Multus Daemonset 은 각 워커 노드에서 Multus 의 실행 파일을
/opt/cni/bin
위치에 배치합니다. 그리고 CNI 의 구성을 위한/etc/cni/net.d/00-multus.conf
설정 파일을 생성합니다. kubectl get pods --all-namespaces | grep -i multus
를 통해 각 노드에 Multus Pod이 성공적으로 실행됐는지 확인할 수 있습니다.- Multus CNI를 통해 연동될 ipvlan 을 워커 노드에 다운로드합니다.
- Multus Daemonset 은 각 워커 노드에서 Multus 의 실행 파일을
-
추가 인터페이스를 생성해 주십시오.
- Server 사용 가이드의 Network Interface를 참고하여 네트워크 인터페이스를 생성한 다음 워커 노드에 할당합니다.
- 생성된 인터페이스에 Secondary IP를 할당합니다. 이때 Secondary IP는 연속된 IP로 구성되어야 합니다.
- 다음과 같이 eth1 인터페이스가 성공적으로 생성됐는지 확인할 수 있습니다.
-
Network Attachment Definition CRD를 생성해 주십시오.
- Pod에서 사용할 추가 ipvaln 인터페이스를 위한 설정을 제공하기 위해 Network Attachment Definition을 생성합니다. Network Attachment Definition은 네트워크를 Pod에 연결하는 방법을 정의하는 Custom Resource Definition입니다.
- 다음과 같이 ipvlan을 사용하기 위한 설정을 생성합니다.
- rangeStart, rangeEnd 를 이용해 앞에서 인터페이스에 할당된 Secondary IP 대역을 지정합니다.
kubectl get network-attachment-definitions
를 통해 생성된 설정을 확인할 수 있습니다.- 본 예제에서 사용된 host-local ipam은 노드 단위로 IP 풀을 관리합니다. 전체 클러스터 범위의 IP 풀이 필요한 경우 whereabouts ipam을 사용해야 합니다.
Multus CNI 연동
Multus CNI를 연동하는 방법은 다음과 같습니다.
- 추가 인터페이스를 사용하는 Pod을 생성해 주십시오.
- 이제 추가 인터페이스를 사용하는 Pod 을 생성할 수 있습니다. 사용할 추가 인터페이스는
k8s.v1.cni.cncf.io/networks
annotation을 통해 지정할 수 있습니다. 해당 필드에 지정되는 이름은 앞서 생성한 Network Attachment Definition의 이름입니다. - 만약 다수의 인터페이스를 연결하고자 한다면 이 annotation에 쉼표를 구분자로 여러 네트워크 설정을 지정합니다.
- 이제 추가 인터페이스를 사용하는 Pod 을 생성할 수 있습니다. 사용할 추가 인터페이스는
- 추가 인터페이스를 확인해 주십시오.
kubectl describe pod sampleapp-1
을 통해k8s.v1.cni.cncf.io/network-status
annotation이 모든 네트워크 인터페이스를 표시하는지 확인합니다.- 실제로 Pod에 연결된 추가 인터페이스(
net1
)가 위에 나열된 IP로 실행 중인지 확인합니다. - 추가된
net1
인터페이스에 대한 라우팅 정보와 통신 가능 여부를 확인합니다.
유의 사항
수동으로 추가된 Network Interface 는 새로 증설되는 워커 노드에는 적용되지 않습니다. 또한 노드 풀 변경 과정에서 추가 Network Interface 가 할당된 워커 노드에 제거될 경우 기 운영중엔 Pod 에 영향이 있을 수 있습니다.