3.3. eBPF 프로그램 배포
클러스터 관리자는 eBPF Manager Operator를 사용하여 컨테이너화된 eBPF 애플리케이션을 배포할 수 있습니다.
이 절차에서 배포된 예제 eBPF 프로그램의 경우 샘플 매니페스트는 다음을 수행합니다.
먼저 Namespace,ServiceAccount, ClusterRoleBinding 과 같은 기본 Kubernetes 오브젝트를 생성합니다. 또한 eBPF Manager가 제공하는 CRD(사용자 정의 리소스 정의)인 XdpProgram 오브젝트를 생성하여 eBPF XDP 프로그램을 로드합니다. 각 프로그램 유형에는 자체 CRD가 있지만 수행하는 작업과 유사합니다. 자세한 내용은 Kubernetes에서 eBPF program 로드 를 참조하십시오.
두 번째는 eBPF 프로그램이 채우는 eBPF 맵을 읽는 사용자 공간 프로그램을 실행하는 데몬 세트를 생성합니다. 이 eBPF 맵은 CSI(Container Storage Interface) 드라이버를 사용하여 마운트된 볼륨입니다. 호스트에서 액세스하는 대신 컨테이너에 eBPF 맵을 볼륨 마운트하면 애플리케이션 Pod에서 권한이 없는 eBPF 맵에 액세스할 수 있습니다. CSI 구성 방법에 대한 자세한 내용은 Kubernetes에서 eBPF 활성화 애플리케이션 배포를 참조하십시오.
eBPF Manager Operator는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 다음 링크를 참조하십시오.
3.3.1. 컨테이너화된 eBPF 프로그램 배포 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 관리자는 eBPF 프로그램을 클러스터 노드에 배포할 수 있습니다. 이 절차에서는 컨테이너화된 샘플 eBPF 프로그램이 go-xdp-counter 네임스페이스에 설치됩니다.
사전 요구 사항
-
OpenShift CLI(
oc)가 설치되어 있습니다. - 관리자 권한이 있는 계정이 있습니다.
- eBPF Manager Operator가 설치되어 있습니다.
프로세스
매니페스트를 다운로드하려면 다음 명령을 입력합니다.
$ curl -L https://github.com/bpfman/bpfman/releases/download/v0.5.1/go-xdp-counter-install-selinux.yaml -o go-xdp-counter-install-selinux.yaml샘플 eBPF 애플리케이션을 배포하려면 다음 명령을 입력합니다.
$ oc create -f go-xdp-counter-install-selinux.yaml출력 예
namespace/go-xdp-counter created serviceaccount/bpfman-app-go-xdp-counter created clusterrolebinding.rbac.authorization.k8s.io/xdp-binding created daemonset.apps/go-xdp-counter-ds created xdpprogram.bpfman.io/go-xdp-counter-example created selinuxprofile.security-profiles-operator.x-k8s.io/bpfman-secure createdeBPF 샘플 애플리케이션이 성공적으로 배포되었는지 확인하려면 다음 명령을 입력합니다.
$ oc get all -o wide -n go-xdp-counter출력 예
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod/go-xdp-counter-ds-4m9cw 1/1 Running 0 44s 10.129.0.92 ci-ln-dcbq7d2-72292-ztrkp-master-1 <none> <none> pod/go-xdp-counter-ds-7hzww 1/1 Running 0 44s 10.130.0.86 ci-ln-dcbq7d2-72292-ztrkp-master-2 <none> <none> pod/go-xdp-counter-ds-qm9zx 1/1 Running 0 44s 10.128.0.101 ci-ln-dcbq7d2-72292-ztrkp-master-0 <none> <none> NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR daemonset.apps/go-xdp-counter-ds 3 3 3 3 3 <none> 44s go-xdp-counter quay.io/bpfman-userspace/go-xdp-counter:v0.5.0 name=go-xdp-counter예제 XDP 프로그램이 실행 중인지 확인하려면 다음 명령을 입력합니다.
$ oc get xdpprogram go-xdp-counter-example출력 예
NAME BPFFUNCTIONNAME NODESELECTOR STATUS go-xdp-counter-example xdp_stats {} ReconcileSuccessXDP 프로그램이 데이터를 수집하고 있는지 확인하려면 다음 명령을 입력합니다.
$ oc logs <pod_name> -n go-xdp-counter<
pod_name>을go-xdp-counter-ds-4m9cw와 같은 XDP 프로그램 Pod의 이름으로 바꿉니다.출력 예
2024/08/13 15:20:06 15016 packets received 2024/08/13 15:20:06 93581579 bytes received ...