6.3. eBPF 관리자 Operator
6.3.1. eBPF Manager Operator 정보
eBPF Manager Operator는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
6.3.1.1. eBPF(Extended Berkeley Packet Filter) 정보
eBPF는 고급 네트워크 트래픽 필터링을 위해 원래 Berkeley Packet Filter를 확장합니다. Linux 커널 내에서 가상 머신 역할을 하므로 네트워크 패킷, 시스템 호출 또는 커널 기능과 같은 이벤트에 대한 응답으로 샌드박스 프로그램을 실행할 수 있습니다.
6.3.1.2. eBPF Manager Operator 정보
eBPF Manager는 Kubernetes 내에서 eBPF 프로그램의 관리 및 배포를 단순화하고 eBPF 프로그램 사용에 대한 보안을 강화합니다. Kubernetes CRD(사용자 정의 리소스 정의)를 사용하여 OCI 컨테이너 이미지로 패키지된 eBPF 프로그램을 관리합니다. 이 접근 방식은 특정 사용자가 배포할 수 있는 프로그램 유형을 제한하여 배포 권한을 구분하고 보안을 강화하는 데 도움이 됩니다.
eBPF Manager는 Kubernetes 내에서 eBPF 프로그램을 관리하도록 설계된 소프트웨어 스택입니다. Kubernetes 클러스터에서 eBPF 프로그램을 로드, 언로드, 수정 및 모니터링할 수 있습니다. 데몬, CRD, 에이전트 및 Operator가 포함됩니다.
- bpfman
- gRPC API를 통해 eBPF 프로그램을 관리하는 시스템 데몬입니다.
- eBPF CRDs
- eBPF 프로그램을 로드하기 위한 XdpProgram 및 TcProgram과 같은 CRD 세트 및 로드된 프로그램의 상태를 나타내는 bpfman-generated CRD(BpfProgram)입니다.
- bpfman-agent
- daemonset 컨테이너 내에서 실행되어 각 노드의 eBPF 프로그램이 원하는 상태에 있는지 확인합니다.
- bpfman-operator
- Operator SDK를 사용하여 클러스터에서 bpfman-agent 및 CRD의 라이프사이클을 관리합니다.
eBPF Manager Operator는 다음과 같은 기능을 제공합니다.
- eBPF 관리자에서 제어된 데몬을 통해 로드되는 eBPF 프로그램을 중앙 집중화하여 보안을 강화합니다. eBPF 프로그램 제어는 표준 Kubernetes 역할 기반 액세스 제어(RBAC)에 의해 규제되어 eBPF 프로그램 로드 및 언로드를 관리하는 다양한 eBPF 관리자 CRD에 대한 애플리케이션 액세스를 허용하거나 거부할 수 있습니다.
- 활성 eBPF 프로그램에 대한 자세한 가시성을 제공하여 시스템 전체에서 문제를 디버깅하는 기능을 개선합니다.
- XDP 및 TC 프로그램에 대한 libxdp와 같은 프로토콜을 사용하여 다양한 소스의 여러 eBPF 프로그램의 공존을 용이하게 하여 상호 운용성이 향상됩니다.
- Kubernetes의 eBPF 프로그램의 배포 및 라이프사이클 관리를 간소화합니다. 개발자는 Cilium, libbpf, Aya와 같은 기존 eBPF 라이브러리를 지원하여 라이프사이클 관리가 아닌 프로그램 상호 작용에 중점을 둘 수 있습니다.
6.3.1.3. 추가 리소스
6.3.1.4. 다음 단계
6.3.2. eBPF Manager Operator 설치
클러스터 관리자는 OpenShift Container Platform CLI 또는 웹 콘솔을 사용하여 eBPF Manager Operator를 설치할 수 있습니다.
eBPF Manager Operator는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
6.3.2.1. CLI를 사용하여 eBPF Manager Operator 설치
클러스터 관리자는 CLI를 사용하여 Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - 관리자 권한이 있는 계정이 있습니다.
프로세스
bpfman
네임스페이스를 생성하려면 다음 명령을 입력합니다.$ cat << EOF| oc create -f - apiVersion: v1 kind: Namespace metadata: labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/enforce-version: v1.24 name: bpfman EOF
OperatorGroup
CR을 생성하려면 다음 명령을 입력합니다.$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: bpfman-operators namespace: bpfman EOF
eBPF Manager Operator를 구독합니다.
eBPF Manager Operator에 대한
서브스크립션
CR을 생성하려면 다음 명령을 입력합니다.$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: bpfman-operator namespace: bpfman spec: name: bpfman-operator channel: alpha source: community-operators sourceNamespace: openshift-marketplace EOF
Operator가 설치되었는지 확인하려면 다음 명령을 입력합니다.
$ oc get ip -n bpfman
출력 예
NAME CSV APPROVAL APPROVED install-ppjxl security-profiles-operator.v0.8.5 Automatic true
Operator 버전을 확인하려면 다음 명령을 입력합니다.
$ oc get csv -n bpfman
출력 예
NAME DISPLAY VERSION REPLACES PHASE bpfman-operator.v0.5.0 eBPF Manager Operator 0.5.0 bpfman-operator.v0.4.2 Succeeded
6.3.2.2. 웹 콘솔을 사용하여 eBPF Manager Operator 설치
클러스터 관리자는 웹 콘솔을 사용하여 eBPF Manager Operator를 설치할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. - 관리자 권한이 있는 계정이 있습니다.
프로세스
eBPF Manager Operator를 설치합니다.
-
OpenShift Container Platform 웹 콘솔에서 Operator
OperatorHub를 클릭합니다. - 사용 가능한 Operator 목록에서 eBPF Manager Operator 를 선택하고 커뮤니티 Operator를 표시 하라는 메시지가 표시되면 Continue 를 클릭합니다.
- 설치를 클릭합니다.
- Operator 설치 페이지의 설치된 네임스페이스 에서 Operator 권장 네임스페이스를 선택합니다.
- 설치를 클릭합니다.
-
OpenShift Container Platform 웹 콘솔에서 Operator
eBPF Manager Operator가 설치되었는지 확인합니다.
-
Operator
설치된 Operator 페이지로 이동합니다. eBPF Manager Operator 가 openshift-ingress-node-firewall 프로젝트에 InstallSucceeded 상태로 나열되어 있는지 확인합니다.
참고설치 중에 Operator는 실패 상태를 표시할 수 있습니다. 나중에 InstallSucceeded 메시지와 함께 설치에 성공하면 이 실패 메시지를 무시할 수 있습니다.
Operator에 InstallSucceeded 상태가 없는 경우 다음 단계를 사용하여 문제를 해결합니다.
- Operator 서브스크립션 및 설치 계획 탭의 상태 아래에서 실패 또는 오류가 있는지 검사합니다.
-
워크로드
Pod 페이지로 이동하여 bpfman
프로젝트에서 Pod 로그를 확인합니다.
-
Operator
6.3.2.3. 다음 단계
6.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 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
6.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 created
eBPF 샘플 애플리케이션이 성공적으로 배포되었는지 확인하려면 다음 명령을 입력합니다.
$ 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 {} ReconcileSuccess
XDP 프로그램이 데이터를 수집하고 있는지 확인하려면 다음 명령을 입력합니다.
$ 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 2024/08/13 15:20:09 19284 packets received 2024/08/13 15:20:09 99638680 bytes received 2024/08/13 15:20:12 23522 packets received 2024/08/13 15:20:12 105666062 bytes received 2024/08/13 15:20:15 27276 packets received 2024/08/13 15:20:15 112028608 bytes received 2024/08/13 15:20:18 29470 packets received 2024/08/13 15:20:18 112732299 bytes received 2024/08/13 15:20:21 32588 packets received 2024/08/13 15:20:21 113813781 bytes received