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)가 설치되어 있습니다.
  • 관리자 권한이 있는 계정이 있습니다.

프로세스

  1. 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
  2. OperatorGroup CR을 생성하려면 다음 명령을 입력합니다.

    $ cat << EOF| oc create -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: bpfman-operators
      namespace: bpfman
    EOF
  3. eBPF Manager Operator를 구독합니다.

    1. 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
  4. Operator가 설치되었는지 확인하려면 다음 명령을 입력합니다.

    $ oc get ip -n bpfman

    출력 예

    NAME            CSV                                 APPROVAL    APPROVED
    install-ppjxl   security-profiles-operator.v0.8.5   Automatic   true

  5. 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)가 설치되어 있습니다.
  • 관리자 권한이 있는 계정이 있습니다.

프로세스

  1. eBPF Manager Operator를 설치합니다.

    1. OpenShift Container Platform 웹 콘솔에서 Operator OperatorHub를 클릭합니다.
    2. 사용 가능한 Operator 목록에서 eBPF Manager Operator 를 선택하고 커뮤니티 Operator를 표시 하라는 메시지가 표시되면 Continue 를 클릭합니다.
    3. 설치를 클릭합니다.
    4. Operator 설치 페이지의 설치된 네임스페이스 에서 Operator 권장 네임스페이스를 선택합니다.
    5. 설치를 클릭합니다.
  2. eBPF Manager Operator가 설치되었는지 확인합니다.

    1. Operator 설치된 Operator 페이지로 이동합니다.
    2. eBPF Manager Operatoropenshift-ingress-node-firewall 프로젝트에 InstallSucceeded 상태로 나열되어 있는지 확인합니다.

      참고

      설치 중에 Operator는 실패 상태를 표시할 수 있습니다. 나중에 InstallSucceeded 메시지와 함께 설치에 성공하면 이 실패 메시지를 무시할 수 있습니다.

      Operator에 InstallSucceeded 상태가 없는 경우 다음 단계를 사용하여 문제를 해결합니다.

      • Operator 서브스크립션설치 계획 탭의 상태 아래에서 실패 또는 오류가 있는지 검사합니다.
      • 워크로드 Pod 페이지로 이동하여 bpfman 프로젝트에서 Pod 로그를 확인합니다.

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가 설치되어 있습니다.

프로세스

  1. 매니페스트를 다운로드하려면 다음 명령을 입력합니다.

    $ 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
  2. 샘플 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

  3. 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

  4. 예제 XDP 프로그램이 실행 중인지 확인하려면 다음 명령을 입력합니다.

    $ oc get xdpprogram go-xdp-counter-example

    출력 예

    NAME                     BPFFUNCTIONNAME   NODESELECTOR   STATUS
    go-xdp-counter-example   xdp_stats         {}             ReconcileSuccess

  5. 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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.