Objevte kamery ONVIF s Akri
Akri je rozhraní prostředků Kubernetes, které umožňuje snadno vystavit heterogenní listová zařízení (jako jsou IP kamery a zařízení USB) jako prostředky v clusteru Kubernetes a průběžně detekuje uzly, které mají k těmto zařízením přístup, a na jejich základě plánovat úlohy. Akri je CNCF sandboxový projekt vytvořený pro hranu, který zpracovává dynamický vzhled a zmizení listových zařízení. V současné době podporuje protokoly OPC UA, ONVIF a udev, ale můžete také implementovat vlastní obslužné rutiny protokolu poskytované šablonou. Další informace o Akri najdete tady.
Tento článek popisuje, jak můžete zjistit kamery ONVIF připojené ke stejné síti jako cluster AKS Edge Essentials. ONVIF je otevřený oborový standard pro ip bezpečnostní zařízení, který se běžně používá pro video dohled. Další informace o profilech ONVIF najdete tady. Tato ukázka vám pomůže začít používat Akri ke zjišťování IP kamer prostřednictvím protokolu ONVIF a jejich použití prostřednictvím zprostředkovatele videa, který vám umožní využívat záběry z kamery a zobrazit je ve webové aplikaci.
Požadavky
- Nasazení AKS Edge Essentials na jeden počítač nebo úplné nasazení (pokud používáte skutečnou IP kameru ONVIF, musíte vytvořit úplné nasazení s externím přepínačem).
- Akri funguje jenom v Linuxu: v tomto cvičení použijte uzly Linuxu.
- IP kamera ONVIF připojená ke stejné síti jako cluster externích přepínačů nebo napodobený spuštěný kontejner ONVIF (postup nasazení je následující).
Poznámka
Tento ukázkový zprostředkovatel ONVIF v současné době nepodporuje připojení ke kamerám, které vyžadují ověřování. Pokud chcete spustit tuto ukázku, zakažte ověřování u kamery ONVIF.
Napodobení kontejneru ONVIF
Pokud nemáte IP kameru ONVIF, můžete pro toto cvičení použít náš napodobení kontejneru ONVIF. Kontejner napodobení funguje na jednom počítači i v úplném nasazení.
(Volitelné) Pokud chcete pro kontejner ONVIF nastavit vlastní kanál videa RTSP, uložte video mp4 (funguje nejlépe, pokud je kvalita SD místo HD) a zkopírujte soubor z adresáře hostitelského počítače do linuxového uzlu pomocí následujícího příkazu (nezapomeňte nahradit adresář hostitelského počítače a příslušný název videosouboru):
Copy-AksEdgeNodeFile -FromFile C:\Users\WinIotUser\Downloads\sample.mp4 -toFile /home/aksedge-user/sample.mp4 -PushFile
Otevřete prázdný soubor YAML a zkopírujte nebo vložte následující obsah. Nezapomeňte nahradit hodnotu za
/mnt/
názvem videosouboru v částiMP4FILE
. Uložte soubor jako onvif-mock.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: onvif-camera-mocking spec: replicas: 1 selector: matchLabels: app: onvif-camera-mocking strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 minReadySeconds: 5 template: metadata: labels: app: onvif-camera-mocking spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-front image: winiotsaleskit.azurecr.io/onvif-camera-mocking:latest ports: - containerPort: 8554 - containerPort: 1000 - containerPort: 3702 env: - name: INTERFACE value: "eth0" - name: DIRECTORY value: "/onvif-camera-mock" - name: MP4FILE value: /mnt/sample.mp4 volumeMounts: - name: sample-volume mountPath: /mnt volumes: - name: sample-volume hostPath: path: /home/aksedge-user type: Directory
Použijte YAML a ujistěte se, že je pod spuštěný:
kubectl apply -f onvif-mock.yaml kubectl get pods
Povolení zjištění pravidel IP pro tuto napodobenou kameru ONVIF:
Pokud je vaše CNI Flannel:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip route add 239.255.255.250/32 dev cni0"
Pokud je vaše CNI Calico:
Vyhledejte IP adresu kontejneru ONVIF napodobení:
kubectl get pods -o wide
Vyhledejte název síťového rozhraní, který odpovídá IP adrese podu ONVIF (tj.
cali909b8c65537
):Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "route"
Teď povolte zjišťování ONVIF:
Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo ip route add 239.255.255.250/32 dev <insert interface name>"
Pokud navíc spouštíte úplné nasazení s externím přepínačem, povolte
dport 3702
a uložte tabulky IP adres:Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo iptables -A INPUT -p udp --dport 3702 -j ACCEPT" Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo sed -i '/-A OUTPUT -j ACCEPT/i-A INPUT -p udp -m udp --dport 3702 -j ACCEPT' /etc/systemd/scripts/ip4save"
Teď můžete spustit Akri a objevit napodobenou kameru ONVIF.
Spuštění Akri
Pokud jste to ještě neudělali, přidejte grafy Akri Helm:
helm repo add akri-helm-charts https://project-akri.github.io/akri/
Pokud jste už dříve přidali chart helmu Akri, aktualizujte úložiště pro nejnovější build:
helm repo update
Nainstalujte Akri pomocí Helmu. Při instalaci Akri určete, že chcete nasadit obslužné rutiny zjišťování ONVIF nastavením hodnoty
onvif.discovery.enabled=true
helm . Také určete, že chcete nasadit zprostředkovatele videa ONVIF:helm install akri akri-helm-charts/akri ` --set onvif.discovery.enabled=true ` --set onvif.configuration.enabled=true ` --set onvif.configuration.capacity=2 ` --set onvif.configuration.brokerPod.image.repository='ghcr.io/project-akri/akri/onvif-video-broker' ` --set onvif.configuration.brokerPod.image.tag='latest'
Další informace o nastavení konfigurace ONVIF najdete tady.
Otevření portu WS-Discovery
Pokud chcete, aby cluster AKS Edge Essentials zjistil vaši kameru, otevřete port pro WS-Discovery (Dynamické zjišťování webových služeb), což je protokol vícesměrového zjišťování, který funguje přes porty 3702
TCP a UDP .
Spuštěním následujícího příkazu otevřete
sport 3702
v linuxovém uzlu a uložte tabulky IP adres:Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo iptables -A INPUT -p udp --sport 3702 -j ACCEPT" Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "sudo sed -i '/-A OUTPUT -j ACCEPT/i-A INPUT -p udp -m udp --sport 3702 -j ACCEPT' /etc/systemd/scripts/ip4save"
Ověřte, že Akri teď může objevit vaši kameru. Měli byste vidět jednu instanci Akri pro kameru ONVIF:
kubectl get akrii
Nasazení webové aplikace pro streamování videa
Otevřete prázdný soubor YAML a zkopírujte nebo vložte do něj následující obsah:
apiVersion: apps/v1 kind: Deployment metadata: name: akri-video-streaming-app spec: replicas: 1 selector: matchLabels: app: akri-video-streaming-app template: metadata: labels: app: akri-video-streaming-app spec: nodeSelector: "kubernetes.io/os": linux serviceAccountName: akri-video-streaming-app-sa containers: - name: akri-video-streaming-app image: ghcr.io/project-akri/akri/video-streaming-app:latest-dev imagePullPolicy: Always env: - name: CONFIGURATION_NAME value: akri-onvif --- apiVersion: v1 kind: Service metadata: name: akri-video-streaming-app namespace: default labels: app: akri-video-streaming-app spec: selector: app: akri-video-streaming-app ports: - name: http port: 80 targetPort: 5000 type: NodePort --- apiVersion: v1 kind: ServiceAccount metadata: name: akri-video-streaming-app-sa --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: akri-video-streaming-app-role rules: - apiGroups: [""] resources: ["services"] verbs: ["list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: akri-video-streaming-app-binding roleRef: apiGroup: "" kind: ClusterRole name: akri-video-streaming-app-role subjects: - kind: ServiceAccount name: akri-video-streaming-app-sa namespace: default
Uložte soubor jako akri-video-streaming-app.yaml.
V okně PowerShellu změňte adresář na umístění souboru akri-video-straming-app.yaml a nasaďte ho do clusteru:
kubectl apply -f akri-video-streaming-app.yaml
Ujistěte se, že jsou všechny pody v provozu:
Vyhledejte IP adresu linuxového uzlu a port služby webové aplikace:
Get-AksEdgeNodeAddr
kubectl get svc
Teď si můžete prohlédnout videozáběr tak, že přejdete do webové aplikace, což je
<NODE IP>:<PORT OF SERVICE>
:
Vyčištění
Odstraňte webovou aplikaci pro streamování videa:
kubectl delete -f akri-video-streaming-app.yaml
Odinstalujte Akri z clusteru:
helm delete akri
(Volitelné) Pokud jste použili napodobenou kameru ONVIF, odstraňte nasazení:
kubectl delete -f onvif-mock.yaml