Seite wählen

Ergebnisse für " die zeit ist reif "

NETWAYS Chefs | Azubis grillen – Teil 2

This entry is part 17 of 17 in the series NETWAYS Chefs

Im ersten Teil ging es um das Grillgut und die Salate, in diesem zweiten Teil zeigen wir Dir Rezepte für Ciabatta und Foccacia, Tzatziki und Hummus sowie den Nachtisch, den wir gereicht haben.

 

Focaccia von Dirk Götz

Tatsächlich bin ich durch den Lockdown dazu übergegangen, relativ häufig Brot selbst zu backen. Da ich privat meist nicht so weit vorplane wie dienstlich, werden gerade schnelle Rezepte dabei öfter gebacken. Das Focaccia-Rezept von Chefkoch ist so eines, da in gut anderthalb Stunden zwei Fladen essbereit sind. Auch lässt sich das Rezept leicht verdoppeln oder, wie bei diesem Grillen, gleich vervierfachen. Zusätzlich zu den Originalzutaten belege ich es gerne mit Tomaten und Oliven.

Du brauchst (für zwei Fladen):
Focaccia im Ofen
400g Mehl
1 Päckchen Trockenhefe
250ml Milch
75ml Olivenöl
1 TL Salz (gehäuft)
1 TL Knoblauchgranulat (gestrichen)
2 TL Oregano
Olivenöl zum Bestreichen
Salz zum Bestreuen
Oregano zum Bestreuen
3 Zehen Knoblauch zum Bestreuen
Ein paar Kirschtomaten, grüne Oliven, Kalmata-Oliven

So geht’s:

Aus den ersten 7 Zutaten einen Teig kneten und in einer verschlossenen Schüssel gehen lassen. Je nach Temperatur empfiehlt sich ein Warm-Wasserbad. Der Teig geht dabei deutlich auf. Nebenbei den Knoblauch hacken.

Den Teig dann nach ca. 45 Minuten halbieren und zu zwei Fladen formen. Diesen mit den Fingerspitzen eindrücken, mit Öl einpinseln, salzen, mit Oregano und dem gehackten Knoblauch bestreuen. Die Tomaten und Oliven in Scheiben schneiden und leicht in den Teig drücken.

Nun 20 Minuten bei 175°C Umluft backen bis es leicht gebräunt ist.

 

Ciabatta von Valeria Thiele

Natürlich darf ein leckeres Ciabatta bei einer Grillparty nicht fehlen. Hier komme ich ins Spiel.
Daheim hatte ich schon ein paar mal mit meinem Freund zusammen Ciabatta gebacken. Na gut, eigentlich habe ich eher assistiert :D. Dies ist immer sehr gut geworden und daher wollte ich es für NETWAYS nachbacken. Das Rezept, an dem ich mich orientiert habe, könnt ihr bei Thomas kocht nachlesen.

Du brauchst:
Ciabatta
400g Mehl (Typ 550), sowie Mehl für die Arbeitsfläche
4g frische Hefe
8g Salz
300ml Wasser
Öl zum Einfetten
Außerdem wird hierfür eine Schüssel benötigt worin der Teig gehen kann, sowie eine große Schale worin man den Teig falten kann, im besten Fall eine Teigwanne.

Insgesamt haben wir 8 Ciabatta gebacken.

So geht`s:
Schritt 1

Begonnen habe ich am Vorabend, damit der Teig über Nacht gehen konnte.

Ich habe jeweils den Teig für 2 Ciabatta in einer Schüssel gemacht:
Wasser in eine Schale geben und die Hefe darin gut auflösen. Salz und Mehl in einer Schüssel vermischen. Das Hefewasser zugeben und so lange vermischen, bis alles Mehl gebunden ist.

Insgesamt brauchte ich also 4 Schüsseln, da ich keine 8 Ciabatta gleichzeitig händeln kann. So konnte ich die Teige nach und nach abarbeiten. Gebacken haben wir 4 normale Ciabatta und 4 mit mediterranen Gewürzen.

Für das mediterrane Ciabatta habe ich noch nach Belieben Thymian, Rosmarin, Oregano und getrocknete Tomaten hinzugefügt.

Schritt 2

Am nächsten Morgen habe ich zunächst 2 Schüsseln aus dem Kühlschrank genommen, um den Teig bei Zimmertemperatur gehen zu lassen.
Nach ca. 1 Stunde habe ich dann auch die nächsten 2 Schüsseln aus dem Kühlschrank genommen. Der Teig kann verarbeitet werden, wenn er viele Blasen wirft, er sollte jedoch mind. 2 Stunden bei Zimmertemperatur gehen.

Schritt 3

Den Teig aus einer Schüssel auf ein gut geöltes Blech legen. Danach hieß es eigentlich nur noch, den wabbeligen Teig zu falten und 15 min warten, wieder falten und warten, immer und immer wieder, 4-6 mal für alle Ciabattas. In den Ruhezeiten sollten der Teig mit einem feuchten Tuch abgedeckt werden. Insbesondere das Falten ist für jemanden, der das noch nicht gemacht hat, schwierig und man sollte sich vorher unbedingt das Originalrezept und das Video dazu anschauen. Auch für mich war es hier schwierig, da der Teig etwas zu ölig wurde und dadurch der Teig sich beim Falten immer wieder öffnete.
Hat man das jedoch geschafft ist der schwerste Teil überstanden.

Schritt 4

Der Teig kann nun halbiert werden und zu einem Baguette geformt werden. Bevor es in den Ofen kann, muss der Teig noch einmal 30 min gehen.

Schritt 4

Ofen vorheizen auf 240 C° Ober-Unterhitze und für ca. 20 Minuten ohne Dampfzugabe backen. Die Zeit kann natürlich je nach Ofen und Größe der Ciabatta variieren.

Fazit

Wer es schon mal gemacht hat, weis, dass der Teig nicht einfach zu händeln ist. Es war eine äußerst wabbelige Angelegenheit.

Das Endergebnis war ein super luftiger Teig, doch ganz zufrieden war ich nicht. Die krosse Kruste habe ich nicht hinbekommen. Dennoch wurde es von allen gern gegessen, was mich sehr gefreut hat.

 

 

Hummus von Valeria Thiele

Was passt gut zu Ciabatta? Richtig, Hummus! Und hier ist mein persönliches Hummus-Rezept:

Du brauchst (für eine große Schüssel):

3 Dosen Kichererbsen (265 g)
300 ml eiskaltes Wasser
Saft von 3 Zitronen
1-2 TL Salz
1-2 TL Kreuzkümmel
ggf. Kurkuma
360g Tahin
3 Knoblauchzehen

So geht`s:

Zunächst wird der Zitronensaft, der Knoblauch und das Salz in einer Schüssel mit dem Mixer püriert. Danach wird das Tahin in die Schüssel gegeben. Alles durchmixen und gleichzeitig das kalte Wasser beim Mixen zugießen, so wird der Hummus besonders luftig.

Zum Schluss noch das Olivenöl und die Gewürze hinzufügen und nochmals durch mixen. Und fertig!

Ein 5-Minuten-Rezept, welches am besten zu frischem Brot passt.

 

Tzatziki von Apostolos Pliakos

Als Grieche war es für mich eine Selbstverständlichkeit, den Tzatziki zuzubereiten. Das Geheimnis eines hervorragenden Tzatzikis liegt zweifellos im hochwertigen griechischen Joghurt. Daher habe ich mir die Zeit genommen, zu einem authentischen griechischen Großhändler zu fahren, um nur das Beste für meine Kollegen zu besorgen. Das Rezept kommt von akispetretzikis.com

Du brauchst:

300g Joghurt
1 Gurke
1/3 Knoblauchzehe
3 EL Weißweinessig
1/4 Bund Dill
2 EL Olivenöl
1 Prise Salz
Pfeffer

So geht`s:

Die Zubereitung beginnt mit dem Schälen der Gurke und dem groben Reiben mit einer Käsereibe. Die Gurke wird dann in eine Schüssel gegeben, in der sie mit einer Prise Salz und einem Esslöffel Weißweinessig vermischt wird. Anschließend ist es wichtig, die Gurke gründlich auszudrücken, um jegliche überschüssige Flüssigkeit zu entfernen. Dies kann man am besten mit einem Geschirrtuch erledigen. Als nächstes wird der Joghurt zusammen mit der fein zerkleinerten Knoblauchzehe, zwei Esslöffeln Weißweinessig und zwei Esslöffeln Olivenöl vermischt.

Nachdem die Gurke ausreichend entwässert wurde, wird sie zur Joghurtmischung gegeben. Das ganze wird sorgfältig verrührt, bis sie eine samtige Konsistenz erreicht. Schließlich wird die Mischung nach Geschmack mit Pfeffer und Salz gewürzt und durch die Zugabe von fein gehacktem Dill verfeinert.

 

Nachtisch von Dirk Götz

Der Nachtisch sollte etwas Einfaches werden, aber dennoch zum Grillen passen. Daher war mein Vorschlag die gegrillte Ananas, Valeria schlug Schokobanane vor und zu beidem passt Vanilleeis super dazu. Also planten wir für jeden mit zwei Stückchen Ananas, einer halben Schokobanane und einer Kugel Eis.

Nachtisch vor dem Grill

Du brauchst:
Frische, reife Ananas
Bananen und Zartbitterschokolade
Vanilleeis

So geht`s:

Erst das obere und untere Ende von der Ananas abschneiden und die Schale abschneiden. Jetzt die Ananas vierteln und den Strunk entfernen. Nun in Scheiben oder Spalten von 2-3 cm Dicke schneiden. Diese dann grillen bis sie leicht gebräunt sind und Linien vom Grillrost zu sehen sind. Ist die Ananas nicht reif genug kann man auch mit etwas Rohrzucker für zusätzliche Süße sorgen, der karamellisiert zusätzlich beim Grillen. Eine andere Option ist, die Ananas mit etwas gutem Rum einzulegen, was ihr auch nochmal ein anderes Aroma gibt.

Nachtisch am Platz des Kollegen

 

Für die  Schokobananen einfach die Banane samt Schale einschneiden, etwa zwei Reihen von der Schokolade abbrechen und in den Einschnitt stecken. Anschließend auf den Grill legen, bis die Schokolade geschmolzen ist. Danach am besten mit einem scharfen Messer halbieren, so dass sie leichter aus der Schale gegessen werden kann.

Das Vanilleeis einfach portionieren und neben Ananas und Schokobanane anrichten.

 

Schlusswort von Christoph Breit

Abschließend bleibt zu sagen, dass jeder satt geworden ist und die Bewertungen durchweg positiv ausgefallen sind. Das Daniel-Bodky-Zitat „Azubis sind einfach die besseren Kollegen“ war des Öfteren zu hören. Aber am wortgewandtesten war unser Tobias Redel mit „Vielen, vielen Dank! Das Essen war sehr geil! Frisch gebackenes Brot und der Nachtisch vom Grill ist dabei „Next Level“. Das hat man beim Grillen selten.“

Es waren coole Erfahrungen, die man normalerweise so nicht hat und wir hatten beim Vor- und Nachbereiten jede Menge Spaß. Außerdem hoffen wir, dass wir bald auch einmal den Komfort haben werden, uns von den Kollegen bekochen zu lassen.

 

Dirk Götz
Dirk Götz
Principal Consultant

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Puppet, Ansible, Foreman und andere Systems-Management-Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich wie nun bei NETWAYS.

NETWAYS Chefs | Azubis grillen – Teil 1/2

This entry is part 16 of 17 in the series NETWAYS Chefs

Als vor einer Weile unsere Catharina das neue Konzept für NETWAYS Chefs verkündet hat, hab ich sofort das Team „Zentrale Ausbildung“ für August eingetragen. Da zu dem Zeitpunkt eh ein gemeinsames Projekt anstand, war die Zeit dafür vorhanden und für mich ist es eine super Teambuilding-Maßnahme. Die Auszubildenden waren aus unterschiedlichen Gründen begeistert. Für die einen war es eine Chance, sich in der Küche auszutoben, für die anderen eine gratis Mahlzeit! 😉

Die ersten Ideen wurden immer mal wieder besprochen und es zeichnete sich schnell passend zum Sommer „Grillen“ als Thema ab. Die Pläne wurden dann am Ende der gemeinsamen Icinga-Schulung konkretisiert, sodass wir eine Umfrage für alle Kollegen erstellen konnten. Aus dieser durfte jeder ein oder zwei Hauptgerichte wählen. Wem nichts von unseren Vorschlägen gefallen hat, wählte die Option „You bring it, we grill it“. Beilagen in Form von Brot und Salaten versprachen wir einfach anhand der Anzahl von Kollegen beizusteuern. Und was wäre ein Essen ohne Nachtisch? Also sollten alle mit einem extra Magen für Süßes auch noch in dieser Spalte ein Kreuzchen machen. Nachdem sich bis zur Deadline fast 30 Kollegen eingetragen hatten, stand am Mittwoch der große Einkauf an. Hierfür legten wir gemeinsam fest, was gemacht werden sollte und wer dafür verantwortlich ist. Derjenige schrieb seine Zutaten zusammen und daraus machten unsere Einkäufer eine Liste. Als diese zurück waren, begannen schon die ersten Vorbereitungen, da manches über Nacht gehen, einziehen oder abkühlen sollte. Bevor wir aber nun mit den Rezepten starten, sollen nun erst mal unsere Einkäufer zu Wort kommen.

 

Der Einkauf von Johannes Rauh

Meine Aufgabe war es, die ganzen Einkäufe zu planen und durchzuführen. Diese Aufgabe habe ich mir mit Apostolos geteilt. Da wir schon den Nachmittag vor dem Grilltag angefangen hatten, die ersten Sachen vorzubereiten, mussten wir auch schon einen Tag davor einkaufen gehen. Dazu haben mir alle Leute ihre Rezepte mit genauen Mengenangaben geschickt und ich habe eine große Einkaufsliste zusammengeschrieben. Daraus hat sich ergeben, dass wir in 5 Läden mussten: Metzger, Baumarkt, einen griechischen Laden, ALDI und REWE.
Da wir ja Grillen wollten, war klar, dass wir eine gewisse Menge an Fleisch benötigen. Unsere Umfrage hat ergeben, dass wir 20 fränkische Bratwürste, 18 Putenspieße, 10 Rinder-Roastbeef à 200g, 10 Lachsfilets sowie 20 Grillkäse benötigen.

Alles bis auf die Lachsfilets wollten wir bei einem Metzger vorbestellen und am Tag des Grillens abholen. Hierfür sind wir zum Partyservice Wahler gefahren.

EinkaufAnschließend waren wir beim Baumarkt und haben die Gasflasche für unseren Gasgrill auffüllen lassen. So war sichergestellt, dass uns nicht plötzlich während des Grillens das Gas ausgeht und die Leute hungrig bleiben müssen.

Apostolos – ein Grieche durch und durch – hat darauf bestanden, den Joghurt für sein Tsatsiki in seinem griechischen Fachgeschäft des Vertrauens zu besorgen und so haben wir dort auch gleich ein Kilo Feta für die Salate geholt.

Der Plan für den Rest war, möglichst viel bei ALDI zu bekommen, um ein wenig Geld zu sparen. Alles, was wir dort nicht bekommen haben, haben wir vom REWE direkt nebenan geholt.

 

Fischmarinade von Dirk Götz

Irgendwann war mir danach, statt Fisch natur oder mit ein paar Kräutern gewürzt zu grillen, mich im Marinieren zu versuchen. Dabei bin ich über die „Fisch – Marinade à la Ralli“ auf Chefkoch gestolpert, die meine aktuelle Standard-Marinade geworden ist, aber wie immer mit ein bisschen Abwandlung.

Du brauchst:
Marinierter Lachs
1 TL Pfeffer (am besten bunter, frisch gemahlen)
1 TL Salz
1 Peperoni
1 EL süßer Senf
3 EL dunkle Sojasauce
12 EL Olivenöl
3 EL Balsamico
4 große Zehen Knoblauch
1/2 Bund Dill

So geht`s:

Die Peperoni einfach fein in Ringe schneiden, wobei ich persönlich Habanero oder ähnlich scharfe nehme, für die Kollegen sollte es aber eine einfache rote Peperoni tun. Den Dill fein hacken, alternativ geht auch getrockneter, aber frischer ist natürlich geschmacklich intensiver. Anschließend die Zutaten einfach vermengen.

Ich lasse den Fisch gerne über Nacht in der Marinade im Kühlschrank ziehen. Dafür einfach eine Schicht Fisch ins Gefäß legen, mit ein paar Löffeln Marinade übergießen, dann mit der nächsten Schicht wiederholen und zum Schluss den Rest einfach ins Gefäß gießen. Die Menge reicht für viel mehr als man denkt. Die 12 Lachsfilets waren also vollkommen ausreichend. Hat man weniger Zeit, kann man die Marinade auch während des Grillens immer wieder auftragen.

 

Mediterraner Kircherbsensalat von Dirk Götz

Bei diesem Salat handelt es um einen meiner Lieblingssalate zum Grillen. Dabei kann er aber auch ganz gut mit etwas Brot als vollwertige Mahlzeit dienen. Für die Kollegen hab ich die doppelte Portion gemacht, sodass auch genug für alle da war. Gefunden hab ich das Rezept auch wieder auf Chefkoch, da ich kein so großer Fan von Petersilie bin, lasse ich diese aber meist weg.

Du brauchst (für eine Schüssel):
Mediterraner Kichererbsensalat
1 Dose (800g) Kichererbsen
1 rote Zwiebel
1 Zucchini
1 (rote) Paprika
1 Peperoni
250g Feta (kann auch etwas mehr sein)
3 EL Balsamico-Essig
6 EL Olivenöl (und etwas zum Braten)
Zucker
Zitronensaft
Salz

So geht’s:

Die Kichererbsen abtropfen lassen. Währenddessen Essig, Öl, Zucker, Zitronensaft und Salz zu einem Dressing verrühren, wobei ich letztere nach Gefühl und durch Abschmecken dosiere. Die abgetropften Kichererbsen mit dem Dressing vermischen.
Die Zwiebel in schmale Halbkreise und die Peperoni in dünne Scheiben schneiden und hinzufügen. Auch hier darf es gerne eine schärfere Sorte sein, wenn man dies mag. Allerdings waren auch bei einer normalen Peperoni schon einige überrascht.

Zucchini in Scheiben und Paprika in feine Streifen oder größere Rechtecke schneiden und im Olivenöl anbraten. Das ganze darf schon etwas Farbe bekommen, die Zucchini gebräunt, die Paprika glasig.

Während des Anbratens den Schafskäse würfeln und unterheben. Nach dem Braten ebenso das Gemüse unterheben. Dabei lass ich auch gerne das Olivenöl vom Braten komplett mit reinlaufen. Gerne dann nochmal etwas abschmecken, je nach Geschmack braucht es noch etwas Zitronensaft oder Salz.

 

Mediterraner Nudelsalat mit getrockneten Tomaten und Pinienkernen von Leander Müller-Osten

Diesen Salat mach ich eigentlich bei jeder Grill-Feier. Zum einen ist er sehr schnell gemacht und auch sehr gut in großen Mengen zu machen. Vor allem heute, wo wir für ca. 25 Personen gekocht haben, genau der richtige Salat.

Du brauchst (für 10-12 Personen):
Nudelsalat (Work in Progress)
1kg Nudeln
1 Glas getrocknete Tomaten
400g Feta-Käse
2 Packungen Pinienkerne
4 EL Balsamicoessig
2 Becher Sauerrahm
3 Gläser rotes Pesto (grobes Pesto)

So geht’s:

  1. Bring einen Topf mit gesalzenem Wasser zum Kochen. Füge die Nudeln hinzu und koche sie gemäß den Anweisungen auf der Verpackung, bis sie al Dente sind.
  2. Rühre das Pesto nach Deinem Geschmack in die warmen Nudeln ein. Füge dann den Sauerrahm hinzu und vermische alles gut, bis die Nudeln gleichmäßig von der Pesto-Sauerrahm-Mischung umhüllt sind.
  3. Die getrockneten Tomaten abtropfen und in feine Streifen schneiden. Gib die geschnittenen Tomaten zu den Nudeln und rühre sie vorsichtig unter, damit sie sich gleichmäßig im Salat verteilen.
  4. Erhitze eine beschichtete Pfanne auf mittlerer Hitze. Gib die Pinienkerne in die Pfanne und röste sie leicht an, bis sie goldbraun und duftend sind. Achte darauf, sie regelmäßig zu wenden, damit sie sich gleichmäßig bräunen. Sobald die Pinienkerne fertig geröstet sind, nimm sie aus der Pfanne und gib sie zu den Nudeln.
  5. Zerbrösele den Fetakäse mit Deinen Händen über den Nudelsalat.
  6. Gib etwa 4 EL Balsamicoessig über den Salat. Nach Geschmack kannst Du auch etwas Olivenöl hinzufügen. Vermische alles gut und schmecke den Salat mit Salz und Pfeffer ab.
  7. Decke die Schüssel mit dem Nudelsalat ab und stelle sie für etwa 3-4 Stunden in den Kühlschrank.

 

Coleslaw von Leander Müller-Osten

Der Klassiker unter den Krautsalaten, der jedes Fleischgericht perfekt begleitet:

Du brauchst (für 10-12 Personen):
Coleslaw (Work in Progress)
1 Kopf Weißkohl
1/2 Kopf Rotkohl
3 Karotten
3 Äpfel
Mayonnaise
Honig
Apfelessig
Senf (mittel scharf oder Dijon)
Selleriesamen

So geht’s:

  1. Kohl vorbereiten: Weißkohl und Rotkohl vierteln und den Strunk entfernen. Schneide den Kohl dann in möglichst dünne Streifen und gib ihn in eine große Schüssel.
  2. Entwässern des Kohls (optional, aber empfohlen): Um sicherzustellen, dass der Coleslaw knackig bleibt und nicht zu viel Wasser abgibt, füge 1-2 Teelöffel Salz zum Kohl hinzu und vermische alles gründlich. Etwa 1 Teelöffel Salz pro Kohlkopf sollte ausreichen. Lasse den Kohl mindestens eine halbe Stunde stehen. Du kannst auch etwas Schweres auf den Kohl legen, um das Wasser herauszudrücken. Drücke den Kohl nach dem Ruhen kräftig aus, um so viel Wasser wie möglich zu entfernen.
  3. Apfel und Karotte raspeln: Raspel die Äpfel und Karotten, um feine Raspeln zu erhalten. Die Apfel- und Karottenraspeln fügen dem Coleslaw eine angenehme Süße und zusätzliche Textur hinzu.
  4. Dressing anrühren: Bereite das Dressing vor, indem Du Mayonnaise, Honig, Apfelessig, Senf und Selleriesamen in einer separaten Schüssel vermengst. Die genauen Mengen hängen von Deinem persönlichen Geschmack ab, aber als Richtlinie könntest Du etwa 1/2 Tasse Mayonnaise, 1-2 Esslöffel Honig, 2-3 Esslöffel Apfelessig, 1 Teelöffel Senf und eine Prise Selleriesamen verwenden. Rühre alles gut um, bis das Dressing gleichmäßig vermischt ist.
  5. Alles zusammen mischen: Gib die geraspelten Äpfel und Karotten zum entwässerten Kohl in die Schüssel. Gieße das vorbereitete Dressing über die Zutaten und vermische alles gründlich, bis der Kohl, die Äpfel und die Karotten gut mit dem Dressing bedeckt sind.
  6. Kühlen: Decke die Schüssel mit dem Coleslaw ab und stelle sie in den Kühlschrank. Lasse den Coleslaw für mindestens 1 Stunde oder länger kühl stehen, damit sich die Aromen verbinden und der Coleslaw gut durchziehen kann.

 

Kartoffelsalat von Jan Schuppik

Kartoffelsalat ist ein zeitloser Favorit, der zu den unterschiedlichsten Anlässen passt. Egal, ob bei Grillfesten, als leichtes Sommeressen oder auf Buffets – dieser Klassiker erfreut sich stets großer Beliebtheit. Dieses Rezept verleiht dem traditionellen Kartoffelsalat eine erfrischende Note und stammt von Chefkoch. Er begeistert durch ein einzigartiges Geschmackserlebnis und eine aufmerksam durchdachte Zubereitung.

Du brauchst (für 10 Portionen)::
Kartoffelsalat
2,5 kg vorwiegend festkochende Kartoffeln
2,5 Zwiebeln, fein geschnitten
2,5 Tassen heiße Gemüsebrühe (ca. 125 ml pro Tasse)
5 EL Essig
7,5 EL Rapskernöl
2,5 TL Salz
Prise Pfeffer
1,25 Salatgurken
Senf und/oder Salatkräuter

So geht’s:

Beginne damit, die frisch gekochten Kartoffeln zu schälen und in handwarme, hauchdünne Scheiben zu schneiden. Lege die Scheiben in eine großzügige Schüssel.

Erhitze die Gemüsebrühe und gib den Essig hinzu. Diese Mischung wird dem Kartoffelsalat die perfekte, harmonische Note verleihen. Nach Belieben kann auch etwas Senf hinzufügt werden, dieser wird dann in der Brühe-Essig-Mischung aufgelöst.

Jetzt kommt der interessante Teil: Beginne mit einer Prise Salz über den Kartoffelscheiben, gefolgt von den fein geschnittenen Zwiebeln. Je nach Geschmack kannst Du eine Prise gemahlenen Pfeffer oder feine Salatkräuter hinzufügen. Gieße dann die heiße Brühe-Essig-Mischung über die Zutaten.

Als Nächstes füge das Rapskernöl hinzu, dieses ermöglicht eine gleichmäßige Verteilung der Aromen. Verwende zwei Esslöffel, um die Zutaten vorsichtig zu vermengen, bis alles gut durchmischt ist. Lasse den Salat für mindestens eine Stunde in der Wärme ruhen, damit die Aromen sich entfalten können.

In der Zwischenzeit kannst Du die Salatgurken gründlich abwaschen und samt der Schale mithilfe eines Gemüsehobels in feine Scheiben schneiden. Diese knackige Ergänzung verleiht dem Salat eine erfrischende Textur und einen leichten Biss.

Sobald die Ruhezeit vorüber ist, füge die geschnittenen Gurkenscheiben hinzu und vermische alles behutsam miteinander.

Tipp:
Die heiße Gemüsebrühe in Kombination mit Essig mildert die Schärfe der Zwiebeln und lässt das Salz sowie den Pfeffer besser zur Geltung kommen. Das Öl wird immer zum Schluss hinzugefügt, um den Kartoffeln die Möglichkeit zu geben, Feuchtigkeit aufzunehmen und die Aromen gleichmäßig zu verteilen.

 

 

Nachtisch ist die beste OptonIn diesem ersten Teil ging es um das Grillgut und die Salate als Beilage. Im zweiten Teil kommen dann noch weitere Rezepte zu Broten, Dips und der Nachtisch dazu, denn wir wollten es uns natürlich richtig gut gehen lassen. Was auch schon das Abstimmungsergebnis gezeigt hat. 😉

Dirk Götz
Dirk Götz
Principal Consultant

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Puppet, Ansible, Foreman und andere Systems-Management-Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich wie nun bei NETWAYS.

Kubernetes 101: Wie sichere ich Kubernetes ab?

This entry is part 6 of 7 in the series Alles rund um Kubernetes

In meinen bisherigen Blogposts habe ich dir bereits einige wichtige Aspekte von Kubernetes näher gebracht. Von „Was ist Kubernetes“ über „Wie richte ich Kubernetes auf Linux ein“ zu „Wie installiere ich eine Anwendung in Kubernetes“. Im besten Fall hast du nun bereits Erfahrung in einer laufenden Umgebung sammeln können und bist bei der sogenannten „Day 2 Operation“, also dem alltäglichen, laufenden Betrieb angekommen. Eine Sache, die ich bisher allerdings ein wenig vernachlässigt habe, ist die Absicherung eines Kubernetes Clusters und der darin befindlichen Workloads.
In diesem Punkt ist Kubernetes‚ offener Standard Fluch und Segen gleichzeitig: Während die einfach erweiterbare Funktionalität ein großes Plus von Kubernetes ist, ist das Fehlen (fast) jeglicher Konfiguration von Security und Policing „out of the box“ definitiv ein großes Minus.
Deswegen zeige ich dir in diesem Beitrag, wie du in diesem Bereich nachbesserst!

Wie ist Kubernetes aufgebaut?

Wenn du meine bisherigen Blogposts verfolgt hast (oder bereits Erfahrung mit Kubernetes gesammelt hast) weißt du: Kubernetes ist ein verteiltes System.
Auf mehreren Nodes werden containerisierte Workloads geplant, die dann die eigentlichen Anwendungen ausführen. Hinzu kommen je nach Kubernetes-Distribution mehrere lokal auf dem jeweiligen Node laufende Services (bspw. Kubelet, kube-apiservercontainerd, etc.) sowie Container, die aufgrund ihrer Aufgaben manchmal erweiterte Privilegien auf den Nodes genießen. Etwa um den clusterinternen Netzwerkverkehr zu regeln oder im Cluster verteilten Speicher bereitstellen zu können.
Es gibt also eine einigermaßen klare Trennung zwischen Clusterinfrastruktur und Workloads, die in einer idealen Welt auch nur wenig miteinander zu tun haben (sollten). Eine Anwendung sollte schließlich in der Lage sein, ordnungsgemäß laufen zu können, ohne dass sie Kenntnisse über ihre Laufzeitumgebung (in diesem Fall Kubernetes) besitzt.
Wie klar diese Trennung in der Realität auch ausfallen mag, im Folgenden werde ich die zwei Welten und mögliche Ansatzpunkte für mehr Sicherheit getrennt voneinander betrachten.

Clustersicherheit bei Kubernetes

Wie bereits eingangs erwähnt, ist ein Kubernetes Cluster nach seiner Installation nicht unbedingt umfassend abgesichert – das beginnt bereits beim Zugriff auf das Kubernetes Cluster. Die kubeconfig, mit der du als Admin normalerweise arbeitest, ist mit maximalen Privilegien ausgestattet und sollte unter keinen Umständen verteilt oder von anderen Nutzern verwendet werden.
Deshalb solltest du weiteren User:innen einen alternativen Clusterzugriff (und damit verknüpfte Regeln) einrichten.

Zugriff und Zugriffskontrolle einrichten

Von Haus aus besitzt Kubernetes ein feingranular einstellbares RBAC-System (Role-based Access Control), mit dem sich grundsätzlich gut arbeiten lässt: Mittels (Cluster-)Roles, (Cluster-)RoleBindings und Usern bzw. ServiceAccounts lassen sich Verknüpfungen zwischen beliebigen Sets an Privilegien und einzelnen, im Cluster agierenden, Identitäten herstellen.
Für jede Gruppe an existierenden API-Objekten können durch Verbs die Privilegien entweder auf Namespace– oder auf Cluster-Ebene eingestellt werden. Die verfügbaren Verbs sind getlistcreateupdatepatchwatchdelete, und deletecollection und implizieren verschiedene Privilegien für die verknüpften API-Objekte.

Möchtest du eine hierarchische Struktur mehrerer Rollen erreichen, kannst du mehrere Clusterrollen zu einer übergeordneten Clusterrolle aggregieren. Auf diese Weise behältst du den Überblick, auch wenn die Anzahl an verfügbaren Rollen mit der Zeit wachsen sollte.
Überblick ist zudem ein gutes Stichwort, denn ab einer gewissen Anzahl an Rollen, Nutzern und Verknüpfungen zwischen den beiden Konzepten leidet unweigerlich die Übersichtlichkeit des Berechtigungskonstrukts. Zwar liefert Kubernetes‘ CLI kubectl mit dem Cmdlet auth can-i eine Möglichkeit des Auditings mit (siehe Auflistung aller Berechtigungen des Standard-Adminusers für den Namespace default unten), das Gelbe vom Ei ist dieser Ansatz der Nutzerverwaltung ab einer gewissen Clustergröße nicht mehr.

Oder möchtest du regelmäßig für alle User deines Clusters manuell die Berechtigungen prüfen?

kubectl auth can-i --list --namespace=default
Resources                                       Non-Resource URLs   Resource Names   Verbs
*.*                                             []                  []               [*]
                                                [*]                 []               [*]
selfsubjectaccessreviews.authorization.k8s.io   []                  []               [create]
selfsubjectrulesreviews.authorization.k8s.io    []                  []               [create]
                                                [/api/*]            []               [get]
                                                [/api]              []               [get]
                                                [/apis/*]           []               [get]
                                                [/apis]             []               [get]
                                                [/healthz]          []               [get]
                                                [/healthz]          []               [get]
                                                [/livez]            []               [get]
                                                [/livez]            []               [get]
                                                [/openapi/*]        []               [get]
                                                [/openapi]          []               [get]
                                                [/readyz]           []               [get]
                                                [/readyz]           []               [get]
                                                [/version/]         []               [get]
                                                [/version/]         []               [get]
                                                [/version]          []               [get]
                                                [/version]          []               [get]

 

Eine bessere Verwaltungsmöglichkeit für unsere Kubernetes Cluster User ist also dringend angeraten, sowohl aus Gründen der Übersichtlichkeit als auch der Sicherheit. Bei immer mehr Nutzern und komplexeren Berechtigungsstrukturen ist es sonst nur eine Frage der Zeit, bis bei einem Nutzer die falschen Berechtigungen gesetzt werden. Schaut man sich das Angebot an verfügbaren Lösungen für Zugriffskontrolle auf Kubernetes an, stechen ein paar Projekte heraus:

Als SUSE Partner setzen wir bei mehreren Kunden erfolgreich Rancher ein, ein Open-Source Tool zur ganzheitlichen Verwaltung von Clustern in der Cloud und on premise. Rancher setzt mit seinem Berechtigungskonzept direkt auf Kubernetes‘ RBAC-Modell auf und erweitert es um Projekte, die eine Abstrahierung um einen oder mehrere Namespaces bilden.
Das Web-Frontend bietet die Möglichkeit, (Cluster-)Rollen mit einzelnen Usern oder Usergruppen aus der in Rancher integrierten Benutzerverwaltung zu verknüpfen, zu auditieren und sich einen schnellen Überblick darüber zu verschaffen, welcher User in welchem Cluster welche Berechtigungen hat.

Grundlage für das Berechtigungskonzept sowohl in Rancher’s WebUI als auch in den verwalteten Clustern bieten die vielen verschiedenen Authentifizierungsplugins: Rancher unterstützt LDAP (z.B. Active Directory, OpenLDAP, AzureAD), OAuth (z.B. Google, GitHub), OIDC (z.B. Keycloak) und SAML (z.B. Okta, Shibboleth, ADFS).

Ein weiteres bewährtes Tool zur Zugriffskontrolle für u.A. Kubernetes ist Teleport, das ebenfalls eine Open-Source Software ist und kostenlos genutzt werden kann. Teleport fungiert als vorgelagerter Proxy, der die Anfragen an das Cluster terminiert, den Nutzer authentifiziert und authorisiert und diese Anfragen dann weitergibt. Stärken von Teleport sind zum Beispiel Policy-as-Code, umfangreiche Auditierbarkeit aller Zugriffe und vergangenen Sitzungen sowie die Kompatibilität nicht nur mit Kubernetes, sondern auch anderen gemanagten oder selbst betriebenen Services und Cloudressourcen.

Netzwerkabsicherung bei Kubernetes

Die Zugriffskontrolle für Endnutzer und Serviceaccounts, also handelnde Identitäten, haben wir nun abgearbeitet. Doch wie steht es mit Zugriffsversuchen, die von Services inner- und außerhalb des Clusters stammen und anderweitig beschränkt werden müssen? Schließlich besteht je nach Architektur und genutzten Dritt-Tools selbst ein „leeres“ Cluster aus (bis zu) mehreren hundert Containern, die untereinander kommunizieren (wollen), sich Updates aus dem Internet ziehen oder andere Services innerhalb der Infrastruktur deines Unternehmens (z.B. AD-Server) erreichen müssen.

Per Default können all diese Container das auch erst einmal ungestört. Kubernetes besitzt out-of-the-box kein Konzept einer „Firewall“ oder ähnlicher Maßnahmen, die den Netzwerkverkehr einschränken könnte. Weder in Ost-West, noch in Nord-Süd-Richtung, übrigens. Hierfür bedarf es eines Container Network Interfaces (CNI), das in der Lage ist, NetworkPolicies zu interpretieren und umzusetzen.
NetworkPolicies sind ein natives Konzept der Kubernetes-API, deren Umsetzung aber an externe CNIs übergeben wird. Ohne passendes CNI also keine Einschränkung des Netzwerkverkehrs.

Das Angebot an verfügbaren CNIs ist recht groß, beliebte Lösungen mit Support für NetworkPolicies auf Namespaceebene und teilweise einer ganzen Bandbreite weiterer Features (BGP-Routing, Nodefirewall, Networkpolicies auf Clusterebene) sind bspw. Cilium bzw. Calico.

„Best Practices“ für das Einrichten von Networkpolicies in Kubernetes gibt es wie Sand am Meer. Welche Blaupause für dein Unternehmen sinnvoll und geeignet sein könnte, ist meist eine Einzelfallentscheidung. Ein oft gesehenes Muster ist eine „globale“ NetworkPolicy über alle Namespaces hinweg (das CNI muss dieses Feature mitbringen!), die keinerlei Ingress bzw. Egress bis auf Anfragen an den clusterinternen DNS-Service erlaubt.
Auf diese Weise sperrst du sämtlichen Netzwerkverkehr, der nicht innerhalb eines einzigen Namespaces stattfindet und etablierst ein „Opt-in“-Modell, bei dem die Operatoren der Anwendungen bei Deployment die benötigten Networkpolicies mitdeployen müssen. Einziges Caveat hierbei ist, dass eventuell bereits vorhandene Infrastruktur im Cluster natürlich ebenfalls von den Regelungen betroffen ist.  Es ist deshalb ratsam, dass also ein etwas genauerer Namespace-Filter als „alle Namespaces“ zum Einsatz kommt.

Ressourcenverwaltung in Kubernetes

Ein weiterer wichtiger Punkt neben Zugriffskontrolle und Netzwerkpolicies ist das Verwalten der im Cluster vorhandenen Ressourcen. Der Grund hierfür ist einfach – hat ein Pod die Möglichkeit, alle Ressourcen eines Nodes für sich zu beanspruchen, nimmt er allen anderen Workloads auf diesem Clusternode buchstäblich die Luft zum Atmen. Doch nicht nur „herkömmliche“ Ressourcen wie Arbeitsspeicher und CPUs sollten reguliert sein – auch abstraktere Dinge wie PIDs oder Sockets können zum Problem werden – die in Pods laufenden Container befinden sich schließlich nach wie vor in Namespaces des jeweiligen Nodes. Spielt ein Container verrückt, kann das unangenehme Nachwirkungen für den gesamten Node nach sich ziehen. So kann beispielsweise mit einer Fork Bomb ein Denial of Service (DoS) erreicht werden.

Fälle wie oben beschrieben gilt es natürlich zu unterbinden – für Arbeitsspeicher und CPUs lässt sich das entweder auf Container– oder Namespaceebene umsetzen: Für Container innerhalb eines Pods können unterhalb des Felds resources sowohl requests als auch limits gesetzt werden. Was hier konkret eingetragen werden sollte, um einen möglichst reibungslosen Betrieb bei möglichst kompletter Auslastung eines Nodes durch die dort geschedulten Workloads herzustellen, ist eine seit Jahren diskutierte Frage. Die inzwischen häufigste Antwort lautet:

Für CPUs sollten Requests, aber keine Limits gesetzt werden. Für Arbeitsspeicher sollten Requests==Limits gesetzt werden.

Die Gründe für diese Richtlinie mögen etwas unklar sein, ohne tiefer darauf einzugehen, deswegen verlinke ich an dieser Stelle zwei Blogposts – einen zum Thema CPU-Limits und einen zu Memory-Limits, inklusive lustiger Vergleiche 😉.

An dieser Stelle neben den gängigsten Verwaltungseinstellungen für CPUs und Arbeitsspeicher auf all die anderen zu berücksichtigenden Stellschrauben für sichere Workloads in Kubernetes einzugehen, würde den Rahmen dieses als Überblick gedachten Posts sprengen – deswegen hier nur eine kurze Auflistung einiger Dinge, die man im Hinterkopf behalten sollte:

  • PID Limits für Pods, Nodes und PID-based eviction
  • (un)privilegierte Container
  • Sicherheitskontexte für Container
  • zusätzliche Policies (bspw. Nutzung von ausschließlich signierten Images)
  • Handhabe von Secrets (bspw. Verschlüsselung at rest)

Nodesicherheit sicherstellen

Neben den einzelnen Workloads und Netzwerkverkehr im Cluster muss man natürlich auch die Nodes, aus denen das Cluster besteht, ordentlich absichern. Insbesondere gilt es, die Nodes des Controlplanes, auf denen typischerweise auch etcd mitläuft, abzusichern – Zugriff auf etcd ist gleichzusetzen mit unbegrenztem schreibenden Zugriff auf das Cluster selbst.

Für die Absicherung von Nodes können klassische Technologien wie lokale Firewalls, SELinux oder AppArmor und beliebige weitere Härtungsmaßnahmen zum Einsatz kommen. Doch auch hier gibt es einige Cloud-Native-Technologien, die helfen können:
So unterstützen einige CNIs das Einrichten von Networkpolicies auf Node-Level. Mit nur einem Tool kann also nicht nur Netzwerkverkehr im Cluster reguliert werden, sondern in erweitertem Rahmen auch schon auf den vorgelagerten Nodes selbst.

Darüber hinaus gibt es einige Tools, die in der Lage sind, die komplexen Abläufe, die im Kontext von Kubernetes im Kubelet, den Pods und der Containerlaufzeitumgebung vor sich gehen, zu durchleuchten und ungewünschtes Verhalten zu unterbinden. Oftmals kommt hierbei eBPF zum Einsatz, eine Technologie, die die modulare Erweiterung des Betriebssystemkernels mit kleinen Programmen ermöglicht.

Anwendungssicherheit erhöhen

Ist das Cluster erst einmal abgesichert, kann man sich den darauf betriebenen Anwendungen widmen – auch wenn einige Mechanismen aus dem vorherigen Abschnitt bereits greifen sollten, beispielsweise Netzwerkpolicies und Ressourcenverwaltung.
Damit ist es jedoch in vielen Organisationen nicht getan – vielleicht gibt es Richtlinien, welche Images genutzt werden dürfen, aus welchen Registries sie bezogen werden sollen, ob gewisse Scans laufen müssen oder ob gewisse Signaturen erforderlich sind. Und übrigens dürfen auch anfangs grob geschätzte Ressourcenlimits anhand der tatsächlichen Leistungsdaten angepasst werden 😉.

Für viele dieser Zwecke gibt es Werkzeuge, die das Einrichten individueller Policies im Cluster ermöglichen. Die am weitesten verbreiteten sind zum Einen der Open Policy Agent und zum Anderen Kubewarden. Mit solchen Tools lassen sich verschiedenste Policies entsprechend den Vorgaben eurer Organisationen und Prozesse definieren die -as-Code vorliegen, versioniert und deployed werden können.

Für das Scannen von Workloads und deren Konfiguration gibt es ebenfalls etablierte Lösungen zum Beispiel Trivy oder Kubescape.
Beide Lösungen ermöglichen die Integration von CI/CD-Pipelines, um Sicherheitsrisiken und Misskonfigurationen noch vor Deployment zu bemerken und darauf reagieren zu können.
Trivy bietet darüber hinaus einen Operator, der in regelmäßigen Abständen aus dem Cluster herausselbstständig nach Sicherheitslücken suchen kann.

Für das Finetuning von Ressourcenrequests oder -limits benötigst du hingegen in erster Linie Metriken. Diese können aus verschiedenen Quellen stammen, die sich unter dem Begriff Observability zusammenfassen lassen. Mit Hilfe von Prometheus können so zum Beispiel Performancedaten wie genutzter Arbeitsspeicher, CPU-Last, Netzwerkverkehr auf Anwendungsebene nachvollzogen werden, sofern die Anwendung entsprechend instrumentalisiert wurde.
Mithilfe dieser Daten lassen sich dann Rückschlüsse ziehen ob wir mit unseren initial gewählten Ressourcerequests/limits zu großzügig oder doch eher zu optimistisch umgegangen sind und nun nachbessern.

Ein weiteres Tool zur Erkennung von zu lockeren oder fehlenden Ressourcerequests/limits ist KRR (Kubernetes Resource Recommender), das ebenfalls anhand von Prometheus-Daten die bestehenden Konfigurationen für Pods analysiert und Verbesserungen vorschlägt.

Zu voll umfänglicher Anwendungssicherheit gehört jedoch auch die Absicherung und Überwachung der CI/CD-Pipeline mit der die Anwendung erstellt bzw. ausgeliefert wird. Hier empfiehlt sich die Orientierung an Frameworks wie SLSA (Supplychain Levels for Software Artifacts), eine von Google veröffentlichte Sammlung an Empfehlungen für Software-Entwickler, wie und wo sie ihre Anwendungen härten sollten.
Zusätzlich lassen sich Anwendungen auch im Betrieb in Kubernetes (automatisiert) überwachen. So erlauben Tools wie NeuVector, in Containern ausgeführte Prozesse und versuchte/erfolgte Netzwerkaufrufe zu protokollieren, gewünschtes Verhalten zu „erlernen“ und nicht vorgesehene Aufrufe in Echtzeit zu unterbinden.

Fazit

Am Ende eines weiteren Blogposts in unserer „Kubernetes 101“ Reihe angekommen stellen wir einmal mehr fest: Kubernetes ist komplex.

Eine Vielzahl an Tools können in Sachen Security in Betracht gezogen haben und welcher „Stack“ letzten Endes für eure Anforderungen ausreichend und passend ist muss sich oft erst einmal herausstellen. Nicht zur Diskussion steht, dass eben aufgrund dieser Komplexität eine voll umfängliche Absicherung des Clusters als Plattform und der darin laufenden Anwendungen (ab dem Moment ihrer Entwicklung) oberste Priorität haben sollte. Denn ist erst einmal „der Wurm drin“ kann es ansonsten schwierig werden, Sicherheitslücken klar zu benennen, „den Schuldigen“ zu finden und das Ausmaß der Kompromittierung einzuschätzen.

Sollte dir dieser Blogpost gefallen haben, schau doch gerne noch die anderen in dieser Serie erschienenen Artikel an.
Und solltest du auf den Geschmack gekommen sein, aber an manchen Stellen noch Hilfe in Sachen Kubernetes brauchen, schau entweder einmal bei unseren Trainings zum Einstieg in Kubernetes vorbei oder buche direkt Consulting zu (fast) Allem rund um Kubernetes bei mir oder meinen Kolleg:innen.

Daniel Bodky
Daniel Bodky
Platform Advocate

Daniel kam nach Abschluss seines Studiums im Oktober 2021 zu NETWAYS und beriet zwei Jahre lang Kunden zu den Themen Icinga2 und Kubernetes, bevor es ihn weiter zu Managed Services zog. Seitdem redet und schreibt er viel über cloud-native Technologien und ihre spannenden Anwendungsfälle und gibt sein Bestes, um Neues und Interessantes rund um Kubernetes zu vermitteln. Nebenher schreibt er in seiner Freizeit kleinere Tools für verschiedenste Einsatzgebiete, nimmt öfters mal ein Buch in die Hand oder widmet sich seinem viel zu großen Berg Lego. In der wärmeren Jahreszeit findet man ihn außerdem oft auf dem Fahrrad oder beim Wandern.

OpenSearch: Dashboards Plugins einfach installieren

This entry is part 4 of 5 in the series OpenSearch Security

OpenSearch ist in seiner Vanilla Version schon sehr umfangreich. Doch erst mit den OpenSearch Plugins kannst du deine Experience personalisieren und das Maximum aus dem Elastic-Fork herausholen.
Eines vorab, bevor ich richtig ins Thema einsteige: die Geschwindigkeit, in der sich das Projekt aktuell weiterentwickelt ist extrem positiv. Deshalb kann man aktuell davon ausgehen, dass die Plugins beim Release des Blogposts noch mal besser geworden sind oder es noch mehr Regeln geben wird.

OpenSearch Plugins für Backend und Dashboards

Nun aber hinein ins Thema OpenSearch Plugins!
Hier muss direkt zwischen dem Backend „OpenSearch“ und den OpenSearch Dashboards unterschieden werden.

Das Backend kommt schon pre-Bundled mit einer Menge nützlicher Plugins. Diese vorinstallierten Plugins kannst du dir mit einem einfachen Befehl anzeigen lassen:

/usr/share/opensearch/bin/opensearch-plugin list

opensearch-alerting
opensearch-anomaly-detection
opensearch-asynchronous-search
opensearch-cross-cluster-replication
opensearch-geospatial
opensearch-index-management
opensearch-job-scheduler
opensearch-knn
opensearch-ml
opensearch-neural-search
opensearch-notifications
opensearch-notifications-core
opensearch-observability
opensearch-performance-analyzer
opensearch-reports-scheduler
opensearch-security
opensearch-security-analytics
opensearch-sql

Im Gegensatz dazu steht das Frontend OpenSearch Dashboards. Hier gibt es out-of-the-box keine Plugins und du kannst, darfst oder musst hier selbst Hand anlegen. Dadurch haben Anpassungen an deine individuellen Bedürfnisse jedoch nur die Grenze der Software.

Auch wenn du alle Plugins selbst installieren musst, ist dort so schnell viel in Bewegung gekommen, dass es leicht geworden ist, Plugins zu installieren. Und das Ganze ohne sich um Versionen / Git-Repositories kümmern zu müssen.

WICHTIGER HINWEIS: Es wird NICHT empfohlen, nachfolgende Skripte als Root auszuführen. Der Vollständigkeit halber habe ich die Flagge als Kommentar auskommentiert im Skript stehen lassen, solltest du das doch tun wollen.
Zum Installieren von Plugins habe ich mir folgendes „./deploy-plugins.sh„-Skript gebaut, das einfach mit dem Pfad der Binärdatei eine Installation über die Namen der Plugins macht:

#!/bin/bash

PLUGINS=(
alertingDashboards
anomalyDetectionDashboards
customImportMapDashboards
ganttChartDashboards
indexManagementDashboards
mlCommonsDashboards
notificationsDashboards
observabilityDashboards
queryWorkbenchDashboards
reportsDashboards
searchRelevanceDashboards
securityAnalyticsDashboards
securityDashboards
)

for PLUGIN in "${PLUGINS[@]}"
do
    /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install $PLUGIN # --allow-root
done

Mit diesem kleinen, von mir geschriebenen Skript ist es schnell und unkompliziert möglich, mehrere OpenSearch Dashboard Plugins gleichzeitig zu installieren.

Da man Plugins in den meisten Fällen nicht nur installieren, sondern auch einmal entfernen will, habe ich dazu ebenfalls ein kleines Skript geschrieben. Es hört auf den Namen „./remove-plugins.sh„:

#!/bin/bash

PLUGINS=(
alertingDashboards
anomalyDetectionDashboards
customImportMapDashboards
ganttChartDashboards
indexManagementDashboards
mlCommonsDashboards
notificationsDashboards
observabilityDashboards
queryWorkbenchDashboards
reportsDashboards
searchRelevanceDashboards
securityAnalyticsDashboards
securityDashboards
)

for PLUGIN in "${PLUGINS[@]}"
do
    /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin remove $PLUGIN # --allow-root
done
systemctl restart opensearch && systemctl restart opensearch-dashboards

Mit dem letzten Befehl startest du OpenSearch und OpenSearch Dashboards neu. Nur so können wir sichergehen, dass die Installation oder Deinstallation von Plugins auch angenommen wird.

OpenSearch Dashboards: Plugin Überblick

Wenn du mein Skript verwendet hast, um Plugins für das Dashboard zu installieren, solltest du jetzt eine größere Seiten-Leiste haben als zuvor. Denn irgendwie musst du ja auch auf die Plugins zugreifen.
Damit du weißt, welche OpenSearch Plugins ich in meinem Skript verwende, folgt hier nun für jedes Plugin eine kurze Beschreibung sowie ein Screenshot, um dir die visuelle Darstellung vorzustellen.

Query Workbench:
Mit diesem Plugin kannst du in SQL und PPL Abfragen machen. Interessant finde ich vor allem die Explain-Funktion, die die Darstellung im JSON-Format zurückgibt.

Reporting:
Mit Reporting lassen sich bequem alle relevanten Daten, zum Beispiel deine individuell angelegten Dashboards, aber auch viele weitere Daten exportieren. Der Export kann natürlich auch mit Schedulern automatisiert werden.
Ich kann mir vorstellen, das exportiere Reportings in den Formaten PDF und PNG in vielen Business-Umgebungen eine sinnvolle Erweiterung darstellen.

Alerting:
Hiermit kannst du für alle Parameter, die du überwachst, etwa Anomalien in deinen Datensätzen, Schwellwerte setzen und Aktionen auslösen lassen. Stark sind hier die vielen Möglichkeiten, die geboten werden. Du kannst dich zum Beispiel benachrichtigen lassen, wenn ein „whoami“ eingegeben wird oder ein Icinga2Host ausfällt! Die Grenzen sind sehr weit gefasst, dass sicher auch für deinen Use Case das passende Alerting einstellbar ist.

Stark sind vor allem mitgelieferten Notification Channels und das freundliche UI!

Anomaly Detection:
Hier wird der Nutzer mit mehr Neugier, Statistikwissen und tieferer Kenntnis seiner Daten (sowie, deren Felder) besseren Nutzen rausholen können.
In meinem Screenshot siehst du ein kleines Beispiel der Anomalien der Event Codes eines Active Directories der letzten 30 Tage. Solche Möglichkeiten sind natürlich genial für alle Admins, Data Scientists oder Analysten die projizieren und erkennen wollen:

Maps:
Richtig spannend wird es, wenn dir Geodaten zur Verfügung stehen. Im OpenSearch Dashboards Plugin Maps kannst du dann aus mehreren visuellen Layern auswählen. Damit kann man schnell beeindrucken und mit den unterschiedlichen Layern sogar seine präferierte Ansicht wählen.

Security Analytics:
Vielleicht hast du mittlerweile auch ähnliche Gedankengänge wie ich zum Zeitpunkt, als ich OpenSearch getestet habe. Einer der prominentesten Gedanken bei mir war „Okay cool. Und das ist wirklich alles umsonst?“. Die einfache Antwort: Yes!

Aber als ich dann bei Security Analytics mit einem Klick einen Detector anlegen wollte, war ich dann einfach nur (positiv) schockiert. Hier sind massig Sigma Regeln eingebunden und das komplett umsonst!
Allein die Auswahl an Providern ist der Wahnsinn.

Fast 1600 Sigma-Regeln für Windows?! Wow!

Die Auswahl an Linux-Regeln ist auch stark und auch wenn es nicht viele sind, scheint man sich mit der Auswahl sehr viel Gedanken gemacht zu haben, um eine breite Trickkiste abzufangen:

Also ist hier alles perfekt? Sehr gut, ja, aber nicht perfekt. Denn ein kleiner Haken im Vergleich zu Graylog und Elastic, die fertig eingerichtet kommen, ist, dass du die Detector-Regeln erst mal an die Felder der Indices anpassen musst. Dafür benötigst du schon einiges an Wissen und Zeit. Das heißt aber nicht, dass das so bleiben muss / wird!

Kaum am Laufen und minimale Anpassungen später hatte ich direkt einen simulierten Treffer in einem Honeypot-AD von mir:

Index Management & Snapshot Management:
Snapshots sind für viele Admins und Entwickler wichtig. Ebenso wichtig sind Rollups mit denen man abbilden kann, wie lange die Daten der einzelnen Indizes verwahrt werden sollen.
In meinem Anwendungsbeispiel lege ich mir einfach einen neuen Index an und schiebe den alten dort hinein. Das Feld ist zusätzlich noch zeitgesteuert, womit man sehr viel Customization erhält:

Search Relevance:
Mit diesem Plugins sich verschiedene Suchen vergleichen. Ziemlich hilfreich, um schnell Daten, etwas Felder aus verschiedenen Indizes miteinander zu vergleichen. Das setzt natürlich voraus, sich einmal mit der OpenSearch Query DSL auseinanderzusetzen.

Maschine Learning:
Um dieses Plugin einzusetzen, willst du genug Cluster haben, mit genug CPU & GPU Power. Dabei ist auch die Frage, wo du die Arbeit verrichten lassen willst, denn Logging braucht so schon genug Leistung und du brauchst auch extra Libraries.
Den Einsatz dieses OpenSearch Dashboard Plugins solltest du also etwas genauer planen. Auch Maschine Learning Modell-Deployments habe ich im Rahmen meiner OpenSearch Analyse genauer unter die Lupe genommen. Dieser Abschnitt würde jedoch den Rahmen dieses Blogbeitrags sprengen. Deshalb werde ich zum Thema OpenSearch Machine Learnung einen gesonderten Blogpost schreiben.

Ich hoffe, ich konnte dir mit diesem Blogpost ein paar Beispiele für die vielfältigen Plugins in OpenSearch zeigen und freue mich auf dein Feedback!

Herausforderungen beim Prometheus Scaling

Prometheus ist eine ausgezeichnete Monitoring-Lösung, wenn es um die Überwachung von Verfügbarkeit und Performance geht. Das initiale Deployment geht schnell und mit ein bisschen PromQL KnowHow hat man die Dashboards und Alarme schnell am Laufen. Schon steht die Prometheus Monitoring Lösung. Aber wie skaliert das Ganze?

In größeren oder wachsenden Umgebungen ergeben sich einige Herausforderungen, die es zu überwinden gilt. Im ersten Teil dieses Artikels sollen diese zunächst problematisiert werden. Der zweite Teil stellt dann im Prometheus Ökosystem etablierte Werkzeuge vor, die diese Herausforderungen lösen können.

 

Zentrale Oberfläche für mehrere Prometheus Instanzen

Eine häufige Anforderung ist, eine zentrale Anlaufstelle für mehrere Prometheus Instanzen abzubilden. Soll heißen, dass über die Zeit mehr und mehr Instanzen in Betrieb genommen werden und keine zentralen Abfragen möglich sind. Gründe dafür können sein, dass mehrere unabhängige Systeme jeweils eine oder mehrere Prometheus Instanzen bekommen (beispielsweise Kubernetes Cluster). Außerdem könnten verschiedene Teams oder Netzwerkzonen eigenständige Instanzen benötigen. Häufig zeigt sich: ein Prometheus kommt selten allein.

Fun Fact: der Plural von „Prometheus“ ist „Prometheis“. Im Deutschen wird aber auch gerne „die Prometheus“ als Plural genutzt. Vermutlich auch, weil der dentale Frikative „th“ des Englischen im Deutschen aber als Plosiv zur Geltung kommt und /pʁoˈmeːtaɪ̯s/ komisch klingt.

Auch wenn dank Federation und Remote Write verschiedene zentrale, dezentrale oder hochverfügbare Prometheus Architekturen möglich sind, haben diese oft hohen operativen Aufwand. In zentralen Architekturen könnten zudem einzelne Instanzen, die sich „danebenbenehmen“, das Gesamtkonstrukt stören. Damit sind beispielsweise Daten mit hoher Kardinalität gemeint, oder Instanzen, die hohe Last erzeugen. Es kann also durchaus sinnvoll sein, eigenständige Prometheus Instanzen zu betreiben.

Dadurch hat man aber nun keine zentrale API, um die Daten abzufragen. Heißt, eine Lösung, die eine globale Sicht auf mehrere Instanzen bereitstellt, muss her.

 

Prometheus Mandantenfähigkeit

Da sich, wie eben beschrieben, schnell mehrere Instanzen in der Infrastruktur tummeln, die an einer zentralen Stelle zusammenlaufen sollen, sollte diese Stelle idealerweise Mandantentrennung unterstützen. Heißt beispielsweise, Team A und B möchten sich beim Schreiben und Lesen von Daten nicht über die Füße laufen, aber dennoch die zentrale Infrastruktur nutzen. Daten sollen im besten Fall getrennt voneinander gespeichert werden und Abfragen isoliert voneinander sein.

Mandantenfähigkeit soll also dafür sorgen, dass wir zentrale Infrastruktur gemeinsam nutzen können. Wenn sich diese dann noch in bestehenden Authentifizierungslösung integrieren lässt, wäre das natürlich optimal.

 

Langzeitspeicherung von Daten

Die Anforderungen, für wie lange Metriken aufbewahrt werden müssen, unterscheiden sich je nach Anwendungsfall sehr stark. Dabei sind verschiedenste Faktoren ausschlaggebend.

Für produktive Systeme oder Testumgebungen möchte man vielleicht verschiedene Aufbewahrungsfristen. Daneben ist natürlich die Größe der jeweiligen Umgebung zu beachten, eine handvoll Nodes erzeugen wesentlich weniger Daten, als hunderte. Selbstverständlich spielen auch hier Netzwerkzonen oder Teams eine Rolle. Oder auch ganz einfach der Kostenfaktor, Speicher ist zwar günstig, aber nicht umsonst.

Man möchte also womöglich Daten von Prometheus Instanzen nur für 30 Tage lokal aufbewahren, um das tagtägliche Monitoring zu bewerkstelligen, aber gleichzeitig 6 oder 12 Monate historische Daten, um längerfristige oder wiederkehrende Trends zu erkennen.

Im Folgenden werden einige etablierte Lösungen für die eben beschriebenen Herausforderungen beim Prometheus Scaling beschreiben.

 

Thanos

Thanos (https://thanos.io/) besteht aus einer handvoll Komponenten, die zusätzlich zu Prometheus Instanzen laufen, um so ein skalierbares und hochverfügbares Gesamtkonstrukt zu bauen. Jede Komponente hat hier eine sehr spezifische Aufgabe und versucht diese so gut wie möglich zu lösen (KISS-Prinzip).

Anmerkung des Autors: auch wenn sich einzelne Komponenten eines Systems nach dem „Keep It Simple“ Prinzip ausrichten, heißt das nicht, dass das daraus resultierende Konstrukt nicht durchaus komplex sein kann.

Dieses modulare Design von Thanos hat einige Vorteile. Nicht alle Komponenten müssen zum Einsatz kommen, viele davon sind „stateless“ (speichern also keinen Zustand) und sie skalieren unabhängig voreinander.

Als ein Kernstück von Thanos könnte man das „Store Gateway“ sehen. Diese Komponente spricht mit einem Objektspeicher (beispielsweise S3), um historische Daten zu speichern und stellt eine gRPC API bereit, über welche die Daten angefragt werden können.

Bestehende Prometheus Instanzen können unverändert weiterlaufen und werden jeweils mit der Thanos Sidecar Komponente ausgestattet. Diese schiebt die Prometheus Zeitserienblöcke regelmäßig in den Objektspeicher. Gleichzeitig können mehrere Sidecars über die „Query Frontend“ Komponente gebündelt werden, damit wird eine zentrale API erzeugt, die alle Prometheus Instanzen so wie die historischen Daten abfragen kann.

Eine optionale Downsampling Komponente kann die historischen Daten im Objektspeicher in regelmäßigen Intervallen komprimieren. Außerdem kann eine „Receiver“ Komponente genutzt werden, um Metriken direkt aus Prometheus mittels Remote Write abzuliefern, so vermeidet man die Sidecar Komponente.

Mit Thanos lässt sich problemlos eine zentrale Oberfläche für mehrere Prometheus Instanzen erstellen und auch Langzeitspeicherung von Daten ist machbar. Die Mandantenfähigkeit ist jedoch (Stand August 2023) noch nicht ganz ausgereift. Zwar kennen einige Komponenten das Konzept von Mandanten, die Implementierung ist aber noch nicht sehr einheitlich (ist aber in Arbeit). Dazu muss man fairerweise auch sagen, dass Thanos eine Apache-2.0-lizenzierte freie Software ist, hinter der keine Firma steht, sondern die CNCF.

 

Cortex

Cortex (https://cortexmetrics.io/) basiert in Teilen auf Thanos/Prometheus Code und hat ähnliche Features wie Thanos. Ein wesentlicher Unterschied ist, dass Prometheus Instanzen die Daten immer mittels Remote Write selbst einliefern. Es gibt also keine Sidecar Komponente, aber die Prometheus Konfiguration muss angepasst werden. Diese Anpassung ist jedoch trivial.

Interessant am Cortex Design ist auch, dass es sich um eine einzelne Binärdatei handelt, die alle Komponenten beinhalten. Heißt, Cortex kann im einfachsten Fall als ein Prozess laufen. Ändern sich die Anforderungen, kann man entweder mehrere Instanzen starten, die auf den gleichen Objektspeicher zugreifen, oder einzelne Komponenten skalieren. Sind die Daten einmal im Objektspeicher ist die Architektur sehr ähnlich zu Thanos.

Es gibt aber auch entscheidende Unterschiede. Beispielsweise ist das Downsampling von historischen Daten noch auf der Roadmap (Stand August 2023). Ein vorteilhafter Unterschied ist aber, dass die Mandantenfähigkeit in allen Komponenten verfügbar ist.

Cortex unterstützt Mandantenfähigkeit mittels einem HTTP-Header (X-Scope-OrgID), welcher den jeweiligen Tenant beinhaltet. Jeder Tenant hat dann eine eigene Zeitseriendatenbank im Cortex Objektspeicher und auch jede Abfrage muss diesen HTTP-Header mit der Tenant-ID schicken. Cortex vertraut diesem HTTP-Header, heißt, externe Tools (beispielsweise ein Reverse Proxy) müssen für die Authentifizierung sorgen. HTTP Authentifizierung ist immerhin ein gut verstandenes Problem mit vielen Lösungen.

 

Grafana Mimir

Grafana Mimir (https://grafana.com/oss/mimir/) basiert auf dem Cortex Code. Grafana Labs – ein Haupt-Contributor bei Cortex – hat hier zusätzliche Features zum Produkt „Mimir“ entwickelt. Die Architektur ist großteils identisch und Mimir wurde bewusst in der Version 2.0 veröffentlicht, um den Fork und dessen Features zu differenzieren. Außerdem wurde, basierend auf der Grafana Mimir Code-Base, das Produkt „Grafana Enterprise Metrics (GEM)“ entwickelt, was nochmals weitere Features für den Enterprise-Bereich enthält.

In den Versionen nach dem Fork wurde der Fokus auf Performance-Optimierung und Mandantenfähigkeit gelegt. Erwähnenswert ist allerdings auch, dass Grafana Mimir unter der AGPL-3.0 Lizenz veröffentlicht wurde.

 

Fazit

Monitoring mit Prometheus bringt einige Herausforderungen mit sich. Nicht nur, dass man PromQL verstehen und schreiben lernen muss, bei wachsender Infrastruktur hat man operative Hürden zu bewältigen. Meine persönliche Empfehlung ist aktuell Cortex oder Mimir. Zum einen ist die elegante Deployment Option mit einer (Golang) Binärdatei ein Faktor, und zum anderen die durchgängige Mandantenfähigkeit mittels HTTP-Header. Trotzdem muss man auch sagen, dass die Authentifizierung mit HTTP eigene Herausforderungen mitbringt. Technologisch könnte man das Ganze als gelöstes Problem sehen, Authentifizierung/Autorisierung/Verschlüsselung mit HTTP sind gut verstandene Probleme. Aus einer organisatorischen Perspektive ist das Thema aber immer noch trickreich, da viele Komponenten integriert und betreut werden müssen.

Alles in allem ist Prometheus Monitoring ein spannender Bereich, in dem es noch viele spannende Probleme zu lösen gibt.

Markus Opolka
Markus Opolka
Senior Consultant

Markus war nach seiner Ausbildung als Fachinformatiker mehrere Jahre als Systemadministrator tätig und hat währenddessen ein Master-Studium Linguistik an der FAU absolviert. Seit 2022 ist er bei NETWAYS als Consultant tätig. Hier kümmert er sich um die Themen Container, Kubernetes, Puppet und Ansible. Privat findet man ihn auf dem Fahrrad, dem Sofa oder auf GitHub.