Redfish

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche
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.
Redfish soll als neuer Standard zur Server-Fernwartung mittelfristig IPMI-over-LAN ersetzen.

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

Redfish kann von Server-Herstellern nachträglich in eine BMC (IPMI) Firmware integriert werden und somit auch bei bereits im Einsatz befindlichen Servern nachgerüstet werden (z.B. bei Servern mit Supermicro X10-Mainboard).
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

Die drei bedeutendsten Collections des Redfish Datenmodells sind Systems (logische Sicht), Chassis (physische Sicht) und Managers (BMC Funktionalität).
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 Operationen werden mit HTTP Methoden wie GET (zum Abfragen von Daten) oder POST (zum Einsatz von Aktionen wie dem Einschalten eines Servers) durchgeführt.
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.png
Rolle "Administrator"
Rolle-Operator.png
Rolle "Operator"
Rolle-ReadOnly.png
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

2HE Intel Dual-CPU RI2208 Server
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.*).

Hinweis: Server mit Supermicro Mainboards der X11-Serie sind grundsätzlich ebenso Redfish-fähig, sofern eine Supermicro Out of Band Management Lizenz eingespielt ist. Wir aktualisieren diesen Hinweis, sobald eine Redfish-fähige IPMI Firmware dazu bei uns zum Download verfügbar ist.

Clients

Beispiel einer Redfish-Abfrage mit der Chrome Erweiterung Postman. Hier werden mittels GET Abfrage Informationen zur installierten CPU abgefragt. Zur Authentifizierung kommt die Basic Authentication zum Einsatz.
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:

Bibliotheken

Die DMTF hat für mehrere Programmiersprachen Bibliotheken geplant. Konkret ist bislang (Stand Juni 2016) eine Bibliothek für Python verfügbar:

Python Programmierbeispiel

Das folgende kurze Python Programmierbeispiel redfish­example.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.

redfish­example.py

Die folgenden Codezeilen zeigen den Inhalt des redfish­example.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 redfish­example.py 
Manufacturer: Supermicro
Model: X10SLH­F/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

  1. Representational State Transfer (de.wikipedia.org)
  2. JavaScript Object Notation (de.wikipedia.org)
  3. Open Data Protocol (de.wikipedia.org)
  4. 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.
  5. RFC2617 HTTP Authentication: Basic and Digest Access Authentication (www.ietf.org)

Weitere Informationen


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer, tätig im Bereich Communications / Knowledge Transfer bei Thomas-Krenn, hat sein Studium zu Computer- und Mediensicherheit an der FH Hagenberg abgeschlossen. Er ist regelmäßig Autor in Fachzeitschriften und Speaker bei Konferenzen wie LinuxCon, OSDC, OSMC, LinuxTag u.v.m. Seine Freizeit gestaltet er sehr abwechslungsreich. In einem Moment absolviert er seinen Abschluss im Klavierspielen, im anderen läuft er beim Linzmarathon in der Staffel mit oder interessiert sich für OpenStreetMap.


Das könnte Sie auch interessieren

ASUS Remote Management Netzwerk Ports
IPMI Best Practices
IPMI Virtual Media einbinden