Redfish
Die Redfish Scalable Platforms Management API (Redfish) ist eine Spezifikation zur Fernwartung von Server-Systemen (Out-of-band Systems Management). Die erste Version der Spezifikation wurde im August 2015 von der Distributed Management Task Force (DMTF) veröffentlicht, seither wird Redfish laufend weiter entwickelt. Redfish wurde mit dem Ziel gestartet, mittelfristig IPMI-over-LAN zu ersetzen. Dazu setzt Redfish auf eine RESTful (Representational State Transfer) Programmierschnittstelle, die einfache Abfragen mit zahlreichen Programmiersprachen erlaubt. Die Datenübertragung erfolgt bei Redfish via HTTPS, als Datenformat kommt JSON zum Einsatz.
Ziele
Bei der Entwicklung von Redfish wurden unter anderem folgende Ziele verfolgt:
- Bereitstellung einer einheitlichen Programmierschnittstelle zur Server-Fernwartung
- Verwendbarkeit sowohl für Client-Anwendungen, als auch für Browser-basierte GUIs
- Sicherer, Multi-Node-fähiger Ersatz für IPMI-over-LAN
- Schema-basierte Ausgaben, die jedoch auch für Menschen einfach lesbar sind
- Abdeckung von häufigen Anwendungsfällen
Design
Die Redfish API verwendet die folgenden Techniken, die eine einfache und sichere Verwendung von Redfish ermöglichen sollen:
- HTTPS (TLS-verschlüsseltes HTTP) zur Datenübertragung: durch den Einsatz von HTTPS (TCP Port 443) müssen in den meisten Fällen keine zusätzlichen Firewallregeln im Administrations-Netzwerk eingerichtet werden. Dies ist ein klarer Vorteil im Vergleich zu IPMI-over-LAN, bei dem UDP Port 623 zur Datenübertragung verwendet wird.
- REST (Representational State Transfer) als Programmierparadigma:[1] REST hat sich im Bereich der Web-Entwicklung in vielen Bereichen etabliert und erlaubt mit einem einfachen Client-Server-Modell und dem Einsatz bekannter HTTP-Methoden wie POST, GET, PATCH, PUT oder DELETE, auf einfache Art und Weise Redfish Operationen durchzuführen.
- JSON (JavaScript Object Notation) als Datenformat:[2]JSON ist ein einfaches und kompaktes Datenformat, das sowohl für Software als auch für Menschen einfach zu lesen ist.
- OData als Schema-basiertes Datenmodell:[3] das Redfish-Datenmodell, das OData zur Abbildung verwendet, ist in erster Linie für Redfish-Entwickler gedacht. Anwender sollten die Informationen des Datenmodells nicht benötigen. Ein wichtiger Punkt des Redfish-Designs ist es, dass das Datenmodell vom Redfish-Protokoll getrennt weiter entwickelt wird. Während das Redfish-Protokoll selbst eher statisch ist und hier wenig Änderungen zu erwarten sind, kann das Datenmodell laufend weiter entwickelt und häufig aktualisiert werden.
- Einsatz von bestehenden BMCs (IPMI Baseboard Management Controllern): Redfish wurde mit der Prämisse entwickelt, leicht in bestehende IPMI-Firmware integriert werden zu können. IPMI BMCs sind in der Regel bereits mit einem einfachen Webserver ausgestattet, der ein Web-GUI zur Server-Fernwartung bereitstellt (siehe z.B. den ASPEED AST2400 IPMI Chip mit ATEN-Software). Somit kann eine Redfish-Unterstützung von den Server-Herstellern sehr rasch in aktuelle Produkte integriert werden, ohne auf neue Chips von künftigen Server-Generationen warten zu müssen.
Redfish Datenmodell
Root + Version | Collection | ID | Sub-Item | Beschreibung[4] |
---|---|---|---|---|
/redfish/v1 | /Systems | /1 | /Processor | Ein System beschreibt eine Maschine oder System Instanz und deren Software-sichtbaren Ressourcen wie RAM, CPU und andere Geräte dieses Systems. |
/BootOrder | ||||
/[...] | ||||
/2 | /Processor, /[...] | |||
/Chassis | /1 | /Thermal | Ein Chassis stellt die physikalischen Komponenten für ein System dar. Diese Ressource stellt die Komponenten und logische Zonen wie Racks oder Gehäuse sowie alle andere Arten von Containern dar. | |
/Power | ||||
/[...] | ||||
/Managers | /1 | /[...] | In Redfish ist ein Manager eine Komponente zum Systems Management, die Zugang zu einem Redfish Dienst ermöglicht oder diesen direkt anbietet. Typisches Beispiel für einen Manager ist ein BMC (Baseboard Management Controller). | |
/TaskService | /1 | /[...] | Der Task Service eines Redfish-Service ermöglicht Planung (scheduling) und Ausführung (execution) von Prozessen. | |
/SessionService | /1 | /[...] | Der Session Service ermöglicht zusätzlich zur #Basic Authentication die #Redfish Session Login Authentication. | |
/AccountService | /1 | /[...] | Der Account Service beinhaltet beispielsweise Eigenschaften, die für alle Benutzerzugänge gelten (wie etwa Passwortanforderungen). Darüber hinaus enthält der Service auch Collections für die einzelnen Benutzerzugänge (Accounts) und Rollen (Roles). | |
/EventService | /1 | /[...] | Der Event Service enthält Eigenschaften zur Verwaltung von Event Subcriptions und erstellt Events, die an Event Subscriber gesendet werden. | |
/Registries | /1 | /[...] | (Keine weiterführende Erklärung im Metadata-Dokument der Redfish API Schema enthalten.) | |
/JsonSchemas | /1 | /[...] | (Keine weiterführende Erklärung im Metadata-Dokument der Redfish API Schema enthalten.) |
Redfish Operationen
Redfish unterstützt die folgenden Operationen zum Abfragen von Daten oder zum Senden von Aktionen (z.B. Einschalten eines Servers):
Operation | HTTP Methode | Beschreibung | Beispiel |
---|---|---|---|
Create | POST | Erstellen einer Ressource bzw. Einsatz von Aktionen | POST https://[REDFISH-IP]/redfish/v1/Systems/1/Actions/ComputerSystem.Reset mit Raw-Body {"ResetType":"On"} (Einschalten des Servers) |
Read | GET | Daten abfragen | GET https://[REDFISH-IP]/redfish/v1/Systems/1/Processors/1 (Abfragen von CPU Information wie CPU Modell, Anzahl Cores, etc.) |
Update | PATCH | Eigenschaften einer Ressource verändern | |
PUT | Eine Ressource ersetzen | ||
Delete | DELETE | Entfernen einer Ressource |
Authentifizierung und Rollen
Authentifizierung
Zur Authentifizierung von Zugriffen bietet Redfish zwei Methoden: die Basic Authentication und die Redfish Session Login Authentication
Basic Authentication
Bei dieser Methode sendet der Client bei jeder Anfrage seinen Benutzernamen und sein Passwort entsprechend RFC2617[5] im HTTP Header mit. Der Benutzername und das Passwort werden dabei durch einen Doppelpunkt (:) getrennt und mittels Base64 kodiert. Der damit resultierende Header Eintrag sieht dabei beispielsweise so aus:
- Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Redfish Session Login Authentication
Für Funktionen, die mehrere Redfish-Operationen erfordern, oder aus Sicherheitsgründen, kann ein Client alternativ zur Basic Authentication auch eine Redfish Login Session über die Session Management Schnittstelle erstellen. Die genaue Adresse (URI) zum Erstellen einer neuen Session kann unter /redfish/v1/SessionService/ abgefragt werden.
Rollen
Zur Unterscheidung unterschiedlicher Zugriffsrechte bietet Redfish die drei Rollen Administrator, Operator und ReadOnly. Jedem Benutzer wird genau einer Rolle zugewiesen. Die folgende Tabelle zeigt dabei die unterschiedlichen Rechte für die drei Rollen:
Rechte (Priviledges) | Rolle "Administrator" |
Rolle "Operator" |
Rolle "ReadOnly" |
---|---|---|---|
Login | ✔ | ✔ | ✔ |
ConfigureSelf | ✔ | ✔ | ✔ |
ConfigureComponents | ✔ | ✔ | |
ConfigureManager | ✔ | ||
ConfigureUsers | ✔ |
Neben den angeführten standardisierten Rechten hat jeder Hersteller auch die Möglichkeit, zusätzlich OEM Rechte zu definieren. Bei Supermicro-basierten Systemen sind dies z.B. die Rechte OemClearLog und OemPowerControl.
Server mit Redfish Unterstützung
Thomas-Krenn-Server, die mit Supermicro Mainboards der X10-Serie ausgestattet sind, bieten ab IPMI Firmware Version 3.* und eingespielter Supermicro Out of Band Management Lizenz Redfish-Funktionalität. Mit dieser Lizenz ist es außerdem möglich, BIOS-Updates über das IPMI Webinterface einzuspielen. Informationen zu dieser Funktion sowie Informationen zum Bezug der Lizenz finden Sie im Artikel Supermicro BIOS Update via IPMI.
Ein Beispiel eines Servers mit einem Supermicro X10-Serie Mainboard (konkret einem Supermicro X10DRi Mainboard) ist der 2HE Intel Dual-CPU RI2208 Server (Ver 2.*).
Server mit Supermicro Mainboards der X11-Serie sind ebenso Redfish-fähig, sofern eine Supermicro Out of Band Management Lizenz eingespielt ist.
Clients
Als Redfish Clients können sowohl normale REST-Clients als auch spezielle Programm-Bibliotheken verwendet werden.
REST Clients
Für die Webbrowser Chrome und Firefox stehen u.a. folgende REST Clients zur Verfügung, die einfache Tests mit Redfish erlauben:
- Chrome
- Firefox
Bibliotheken
Die DMTF hat für mehrere Programmiersprachen Bibliotheken geplant. Konkret ist bislang (Stand Juni 2016) eine Bibliothek für Python verfügbar:
- python-redfish (pypi.python.org)
Python Programmierbeispiel
Das folgende kurze Python Programmierbeispiel redfishexample.py zeigt, wie einfach mittels Redfish Daten abgefragt werden können. Konkret werden im Beispiel einige Informationen der Collection "Systems" abfragt (Manufacturer, Model, PowerState, BiosVersion, Description). Das Beispiel kommt ohne die python-redfish Bibliothek aus, es werden lediglich die Bibliotheken für json und requests verwendet.
redfishexample.py
Die folgenden Codezeilen zeigen den Inhalt des redfishexample.py Beispielscripts:
import json, requests url='https://10.1.102.120/redfish/v1/Systems/1' userid='redfishuser' password='Lc9AcnLcQq2' r = requests.get(url, auth=(userid, password), verify=False) jsonData = r.json() print "Manufacturer:", (jsonData['Manufacturer']) print "Model:", (jsonData['Model']) print "PowerState:", (jsonData['PowerState']) print "BiosVersion:", (jsonData['BiosVersion']) print "Description:", (jsonData['Description'])
Beispielausgabe
Beim Aufruf des Beispiels liefert es mit unserem Testserver folgende Ausgabe:
$ python redfishexample.py Manufacturer: Supermicro Model: X10SLHF/X10SLM+F PowerState: On BiosVersion: 3.0 Description: Description of server
Vortrag "Hello Redfish, Goodbye IPMI"
Einen Mitschnitt des Vortrags "Hello Redfish, Goodbye IPMI", gehalten auf der Open Source Data Center Conference 2016 in Berlin, finden Sie in folgendem TKmag Artikel:
Einzelnachweise
- ↑ Representational State Transfer (de.wikipedia.org)
- ↑ JavaScript Object Notation (de.wikipedia.org)
- ↑ Open Data Protocol (de.wikipedia.org)
- ↑ Die Beschreibungen stammen aus den Metadata Dokumenten der Redfish API Schema DSP8010 Version 2016.1 der jeweiligen Collection, z.B. ComputerSystem_v1.xml für Systems und wurden für die Tabelle hier von uns auf Deutsch übersetzt.
- ↑ RFC2617 HTTP Authentication: Basic and Digest Access Authentication (www.ietf.org)
Weitere Informationen
- Redfish API (www.dmtf.org)
- Redfish Developer Hub (redfish.dmtf.org)
- Simple Rack-mounted Server (redfish.dmtf.org)
- Redfish Scalable Platforms Management API (de.wikipedia.org)
- DMTF Redfish School Series on YouTube (firmwaresecurity.com, 13.10.2016)
- Redfish Reference Guide (www.supermicro.com)
- Available APIs (www.supermicro.com)
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|