Kubernetes에서 Pod에 두 개 이상의 네트워크를 연결하려면 기본적으로 제공되는 단일 네트워크 인터페이스(CNI) 외에 멀티 네트워크 인터페이스를 지원하는 방법을 사용해야 합니다. 이를 위해 Multus CNI와 같은 플러그인을 활용할 수 있습니다. Multus CNI는 Kubernetes에서 다중 네트워크를 설정할 수 있도록 지원합니다.
다음은 이를 설정하는 방법입니다:
1. Multus CNI 설치
Multus는 Kubernetes 클러스터에 설치하는 추가 플러그인입니다. Multus를 설치하면 기본 CNI 플러그인 외에 추가 네트워크를 연결할 수 있습니다.
kubectl apply -f https://raw.githubusercontent.com/k8snetworkplumbingwg/multus-cni/main/deployments/multus-daemonset.yml
2. 네트워크 추가 설정 (NetworkAttachmentDefinition)
추가 네트워크를 정의하려면 NetworkAttachmentDefinition 리소스를 사용해야 합니다. 예를 들어, 두 개의 네트워크를 정의합니다.
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: custom-network-1
namespace: default
spec:
config: '{
"cniVersion": "0.3.1",
"type": "bridge",
"bridge": "br0",
"ipam": {
"type": "host-local",
"subnet": "192.168.1.0/24",
"rangeStart": "192.168.1.100",
"rangeEnd": "192.168.1.200",
"routes": [{"dst": "0.0.0.0/0"}],
"gateway": "192.168.1.1"
}
}'
---
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: custom-network-2
namespace: default
spec:
config: '{
"cniVersion": "0.3.1",
"type": "bridge",
"bridge": "br1",
"ipam": {
"type": "host-local",
"subnet": "10.10.1.0/24",
"rangeStart": "10.10.1.100",
"rangeEnd": "10.10.1.200",
"routes": [{"dst": "0.0.0.0/0"}],
"gateway": "10.10.1.1"
}
}'
3. Pod에 네트워크 연결
이제 Pod을 생성할 때 여러 네트워크를 연결합니다. 아래는 Pod에서 기본 네트워크와 추가 네트워크를 설정하는 예입니다.
apiVersion: v1
kind: Pod
metadata:
name: multi-network-pod
annotations:
k8s.v1.cni.cncf.io/networks: '[
{ "name": "custom-network-1" },
{ "name": "custom-network-2" }
]'
spec:
containers:
- name: app-container
image: nginx
ports:
- containerPort: 80
4. 확인
Pod이 생성되면 여러 네트워크 인터페이스가 추가된 것을 확인할 수 있습니다.
kubectl get pods multi-network-pod -o wide
kubectl exec -it multi-network-pod -- ip a
ip a 명령어를 통해 Pod에 연결된 네트워크 인터페이스와 IP 주소를 확인할 수 있습니다.
728x90