21.10. VRF에 보조 네트워크 할당
클러스터 관리자는 CNI VRF 플러그인을 사용하여 가상 라우팅 및 전달(VRF) 도메인에 대한 추가 네트워크를 구성할 수 있습니다. 이 플러그인이 생성하는 가상 네트워크는 사용자가 지정하는 물리적 인터페이스와 연결됩니다.
VRF 인스턴스에서 보조 네트워크를 사용하면 다음과 같은 이점이 있습니다.
- 워크로드 격리
- 추가 네트워크에 대한 VRF 인스턴스를 구성하여 워크로드 트래픽을 분리합니다.
- 보안 개선
- VRF 도메인의 격리된 네트워크 경로를 통해 보안을 강화합니다.
- 멀티 테넌시 지원
- 각 테넌트에 대해 VRF 도메인의 고유한 라우팅 테이블을 사용하여 네트워크 분할을 통해 멀티 테넌시를 지원합니다.
VRF를 사용하는 애플리케이션은 특정 장치에 바인딩해야 합니다. 일반적인 사용은 소켓에 SO_BINDTODEVICE
옵션을 사용하는 것입니다. SO_BINDTODEVICE
옵션은 소켓을 전달된 인터페이스 이름(예: eth1
)에 지정된 장치에 바인딩합니다. SO_BINDTODEVICE
옵션을 사용하려면 애플리케이션에 CAP_NET_RAW
기능이 있어야 합니다.
OpenShift Container Platform Pod에서는 ip vrf exec
명령을 통해 VRF를 사용할 수 없습니다. VRF를 사용하려면 애플리케이션을 VRF 인터페이스에 직접 바인딩합니다.
추가 리소스
21.10.1. CNI VRF 플러그인으로 추가 네트워크 연결 생성
CNO(Cluster Network Operator)는 추가 네트워크 정의를 관리합니다. 생성할 추가 네트워크를 지정하면 CNO가 NetworkAttachmentDefinition
CR(사용자 정의 리소스)을 자동으로 생성합니다.
CNO가 관리하는 NetworkAttachmentDefinition
CR을 편집하지 마십시오. 편집하면 추가 네트워크의 네트워크 트래픽이 중단될 수 있습니다.
CNI VRF 플러그인으로 추가 네트워크 연결을 생성하려면 다음 절차를 수행합니다.
사전 요구 사항
- OpenShift Container Platform CLI, oc를 설치합니다.
- cluster-admin 권한이 있는 사용자로 OpenShift 클러스터에 로그인합니다.
프로세스
추가
Network
연결에 사용할 네트워크 CR(사용자 정의 리소스)을 생성하고 다음 예제 CR과 같이 추가 네트워크의rawCNIConfig
구성을 삽입합니다. YAML을additional-network-attachment.yaml
파일로 저장합니다.apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: additionalNetworks: - name: test-network-1 namespace: additional-network-1 type: Raw rawCNIConfig: '{ "cniVersion": "0.3.1", "name": "macvlan-vrf", "plugins": [ 1 { "type": "macvlan", "master": "eth1", "ipam": { "type": "static", "addresses": [ { "address": "191.168.1.23/24" } ] } }, { "type": "vrf", 2 "vrfname": "vrf-1", 3 "table": 1001 4 }] }'
참고VRF는 리소스의 유형이
netdevice
인 경우에만 올바르게 작동합니다.Network
리소스를 생성합니다.$ oc create -f additional-network-attachment.yaml
CNO가 다음 명령을 실행하여
NetworkAttachmentDefinition
CR을 생성했는지 확인합니다.<namespace>
를 네트워크 연결을 구성할 때 지정한 네임스페이스(예:additional-network-1
)로 바꿉니다.$ oc get network-attachment-definitions -n <namespace>
출력 예
NAME AGE additional-network-1 14m
참고CNO가 CR을 생성하기 전에 지연이 발생할 수 있습니다.
검증
pod를 생성하고 VRF 인스턴스를 사용하여 추가 네트워크에 할당합니다.
Pod
리소스를 정의하는 YAML 파일을 생성합니다.pod-additional-net.yaml
파일 예apiVersion: v1 kind: Pod metadata: name: pod-additional-net annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "test-network-1" 1 } ]' spec: containers: - name: example-pod-1 command: ["/bin/bash", "-c", "sleep 9000000"] image: centos:8
- 1
- VRF 인스턴스를 사용하여 추가 네트워크의 이름을 지정합니다.
다음 명령을 실행하여
Pod
리소스를 생성합니다.$ oc create -f pod-additional-net.yaml
출력 예
pod/test-pod created
포드 네트워크 연결이 VRF 추가 네트워크에 연결되어 있는지 확인합니다. Pod로 원격 세션을 시작하고 다음 명령을 실행합니다.
$ ip vrf show
출력 예
Name Table ----------------------- vrf-1 1001
VRF 인터페이스가 추가 인터페이스의 컨트롤러인지 확인합니다.
$ ip link
출력 예
5: net1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master red state UP mode