A távoli rendszerek biztonságos elérésére és a fejlesztési projektek hatékony kezelésére elengedhetetlen a megfelelő SSH (Secure Shell) és Git konfigurációk alkalmazása. Az alábbiakban bemutatott lépések segítenek abban, hogy könnyedén navigálhassunk a hálózaton, távoli rendszerekhez csatlakozhassunk, valamint verziókezelési megoldásokat alkalmazhassunk fejlesztési munkafolyamataink során.
Az SSH segítségével biztonságosan csatlakozhatunk távoli gépekre, miközben titkosított kapcsolatot biztosítunk az adatforgalom számára. A legfontosabb lépés, hogy az SSH kulcsokat előkészítsük és konfiguráljuk a megfelelő fájlokban, mint például a ~/.ssh/config és a saját kulcsaink. Ha a felhasználói név eltér a távoli gépen használt névtől, akkor a következő parancs használata javasolt:
Ebben az esetben a rendszer a megfelelő felhasználót fogja használni az SSH kapcsolathoz. Ha nem konfiguráltuk előre az SSH fájlt, akkor egy egyszerű parancs is működhet, például:
Ezután az SSH kulcsokat és egyéb biztonsági beállításokat a konfigurációs fájlban kell meghatározni, hogy a távoli elérés mindig zökkenőmentesen történjen. A biztonsági alapelvek betartása elengedhetetlen: az SSH kulcsok alkalmazása, a távoli root belépés letiltása, valamint a kapcsolat próbálkozások számának korlátozása mind hozzájárulnak a rendszer védelméhez.
Ezen kívül a Git verziókezelő rendszer használata is kulcsfontosságú, különösen akkor, ha több fejlesztő dolgozik egy projekten, vagy ha fontos a konfigurációs fájlok változásainak nyomon követése. A Git segítségével könnyen verziózhatjuk a projektjeinket, létrehozhatunk új ágakat, és visszaállíthatunk előző verziókat, ha valami nem működik megfelelően.
A Git működésének alapjai az alábbiak szerint alakulnak. Először is, a projektet egy távoli tárolóba helyezzük, amely bárhonnan elérhető. A helyi gépen a projekt másolatát a git clone parancs segítségével hozhatjuk létre. Ezután új ágat hozhatunk létre a helyi tárolóban, amelyen dolgozhatunk anélkül, hogy befolyásolnánk a fő ágat, az ún. main ágat.
Miután befejeztük a módosításokat, a következő lépés, hogy a fájlokat rögzítjük (commit), majd feltöltjük a távoli tárolóba a git push parancs segítségével. Ezáltal a módosításaink elérhetővé válnak a többi fejlesztő számára, akik szintén hozzáférhetnek a legfrissebb verziókhoz. Az új ágak kezelése és a pull requestek használata segít abban, hogy minden változtatás megfelelően átnézhető és validálható legyen.
A Git konfigurálása is kulcsfontosságú. Ehhez a következő globális beállításokat kell elvégezni:
Ezután SSH kulcsot kell beállítani a GitHub vagy GitLab fiókhoz, hogy biztosítani tudjuk a biztonságos kommunikációt a távoli tárolóval. Ezt az SSH konfigurációs fájl módosításával érhetjük el, amely az alábbiakat tartalmazza:
Ezekkel a beállításokkal egyszerűsíthetjük a parancsokat, mivel nem kell minden alkalommal megadnunk a felhasználónevet és jelszót.
A Git és SSH beállítások után érdemes egy projects könyvtárat létrehozni, hogy rendezetten tároljuk a fejlesztési projekteket. Ehhez használhatjuk a következő parancsokat:
Ezáltal biztosíthatjuk, hogy minden projekt egy központi helyen, könnyen elérhető módon lesz tárolva.
Fontos megjegyezni, hogy a verziókezelés és a biztonságos távoli elérés nem csupán az egyes fejlesztők számára hasznos. Egy jól konfigurált rendszer segíthet abban, hogy a csapatok együttműködése zökkenőmentes legyen, és hogy a munkafolyamatok biztonságosak és követhetőek maradjanak. Az SSH és Git megfelelő beállítása kulcsfontosságú lépése a hatékony fejlesztési és üzemeltetési munkák végzésének.
Hogyan kezeljük a divergens Git ágakat és a távoli repóval való szinkronizációt?
A Git rendkívül hasznos eszköz a forráskód kezelésében, de előfordulhatnak olyan helyzetek, amikor a lokális és a távoli ágazatok eltérnek egymástól. Ilyenkor fontos, hogy tisztában legyünk a megfelelő lépésekkel, hogy a fejlesztési folyamat ne akadjon meg, és a változások ne vesszenek el. A következő példák és megoldások bemutatják, hogyan kell kezelni az ilyen helyzeteket.
Tegyük fel, hogy dolgozol egy lokális Git ágban, és próbálkozol a változások feltöltésével a távoli repóba. Az alábbi parancsokat használva próbálkozol az összes változtatás feltöltésével:
Ez a hibaüzenet azt jelzi, hogy a távoli ágon már vannak olyan változások, amelyek még nem szerepelnek a lokális másolatban. Ez azt jelenti, hogy a helyi fő ág (main) elavult, és tartalmaz olyan fájlokat, amelyek még nem kerültek szinkronizálásra a távoli repóval. Ezt a problémát az okozhatja, hogy valaki más változtatásokat végzett a repóban, és azok nincsenek jelen a te lokális verziódban.
Az ilyen hibák elkerülése érdekében mindig érdemes először a távoli repó legfrissebb verzióját letölteni a következő paranccsal:
Ez a parancs letölti a távoli repó legfrissebb változásait, de előfordulhat, hogy újabb hibaüzenetet kapunk, amely arra figyelmeztet, hogy a helyi és távoli ágak eltérnek egymástól:
Ez azt jelenti, hogy a Git nem tudja automatikusan egyesíteni a két ágat, mivel azok már eltértek. Ebben az esetben két lehetséges megoldás van:
-
Rebase alkalmazása: A rebase lehetővé teszi, hogy az új változtatásokat a meglévő változtatások alá rendezd. Ezzel biztosítható, hogy az új kódok a legfrissebb állapotban maradnak. A következő parancsot használhatod:
Ez a parancs letölti a távoli változásokat, és egyesíti azokat a helyi ágaddal úgy, hogy a helyi módosításokat nem írja felül. Miután a rebase sikeresen befejeződött, ellenőrizheted a státuszt a következő paranccsal:
Ha minden rendben van, akkor a következő paranccsal feltöltheted a változtatásokat a távoli repóba:
-
Hard reset alkalmazása: Ha biztos vagy benne, hogy a helyi változtatások nem szükségesek, és szeretnéd, hogy a távoli repó teljesen felülírja a helyi változatot, használhatsz hard resetet. Ez a művelet visszaállítja a helyi repót a távoli verzióra, és törli az összes helyi változtatást.
Ez a parancs törli az összes olyan változtatást, amelyet a helyi gépen végeztél, és szinkronizálja a repót a távoli verzióval.
Ezek után a kódot újra feltöltheted a következő parancsokkal:
A merge parancs összefűzi a tesztág változtatásait a fő ágba, és végül sikeresen feltöltheted a módosításokat a távoli repóba.
A változások ideiglenes eltárolása
Gyakran előfordul, hogy egy projektben dolgozva közben sürgős javítást kell végezni a fő ágon, de nem szeretnéd elveszíteni a már végzett munkát. Ilyenkor jön jól a git stash parancs, amely lehetővé teszi, hogy ideiglenesen félretegyük a helyi változtatásokat anélkül, hogy el kellene tárolni őket egy külön mappában.
Ha például hozzáadsz egy új fájlt a projektedhez, de nem akarod azt commitolni, használhatod a következő parancsokat:
Ez ideiglenesen eltárolja a változtatásokat, és lehetővé teszi, hogy más módosításokat végezz anélkül, hogy a félbehagyott munkát el kellene dobni. Miután elvégezted a szükséges javításokat és feltöltötted őket, a változtatásokat visszaállíthatod a következő paranccsal:
Ezzel visszaállíthatod az eltárolt fájlokat, és folytathatod a munkát ott, ahol abbahagytad.
A tesztág törlése
Miután a módosításokat sikeresen feltöltötted a fő ágba, a tesztágat törölheted, ha már nincs rá szükség. A következő parancs törli a tesztágat:
Ez a művelet nem befolyásolja a már feltöltött változtatásokat, de tisztítja a helyi környezetet. A fejlesztés befejeződött, de mindig tartsd észben, hogy bármikor újra változtathat valaki a repón, így a következő szinkronizáció már új problémákat hozhat.
Mi még fontos, amit érdemes megérteni?
Git használata során gyakran találkozhatunk olyan helyzetekkel, amikor az ágazatok eltérnek egymástól. A legfontosabb, hogy mindig gondosan szinkronizáljuk a távoli repót a helyi változtatásokkal. Ha több fejlesztő dolgozik egy projekten, kulcsfontosságú a rendszeres kommunikáció, hogy elkerüljük az ütközéseket és a nem kívánt felülírásokat.
Emellett mindig fontos a git status és a git log használata, hogy tisztában legyünk a változtatásokkal, és lássuk, milyen fájlok lettek módosítva vagy hozzáadva a verzióba. A rendszeres mentés és a helyes szinkronizáció megakadályozza a nagyobb problémákat, így a munka folyamatos és zökkenőmentes maradhat.
Hogyan telepíthetjük és konfigurálhatjuk az Elastic Agent-et és a Fleet-et a Kibana segítségével?
A telepítés során az Elastic Agent összekapcsolása az Elasticsearch-sel kulcsfontosságú lépés a teljes rendszer sikeres működéséhez. A --force opciók kikerülik a telepítés során megjelenő jóváhagyási promptokat, ami különösen hasznos lehet, ha több ügynököt telepítünk Ansible segítségével (erről bővebben a 11. fejezetben olvashatunk). Fontos megjegyezni, hogy a fleet-server* TLS beállításai az ügynök Elasticsearch-hez való csatlakozását szolgálják, míg az elastic-agent* TLS beállításai az ügynök saját magához, a helyi Fleet Server folyamatához való csatlakozást kezelik. A további ügynök telepítések az elastic-agent* TLS beállításokat használják majd. Az alapértelmezett kliens-hitelesítés none, de ha kölcsönös TLS-t szeretnénk alkalmazni, ezt módosíthatjuk required-ra, ahogyan a könyv egyéb részeiben is látható. Ez a beállítás arra kényszeríti az új ügynököket, hogy telepítéskor tanúsítványt és kulcsot biztosítsanak. Ha minden megfelelően történt, az alábbihoz hasonló üzeneteket kell látnunk:
Amennyiben a telepítés valami oknál fogva meghiúsul, az ügynök telepítője eltávolítja az összes fájlt az /opt/Elastic/ könyvtárból, így újra létre kell hozni a certs almappát, és újra le kell tölteni a TLS fájlokat.
A Kibana felületén a 6. lépésnél a státusz zöldre vált, és „Fleet Server connected” üzenetet kell látnunk. Ha frissítjük a Fleet oldalt, az új szerver is megjelenik, valamint annak CPU- és memóriahasználata is láthatóvá válik.
Az ügynök hozzáadása a Fleet-hez a következőképpen történik. Először is, ismételjük meg az ügynök beállítási folyamatát az első Elastic virtuális gépen. Mivel ez az ügynök nem lesz Fleet Server, bizonyos lépéseket kihagyhatunk. Hozzunk létre egy könyvtárat a TLS fájloknak, és töltsük le őket:
Ezután a Kibana felületén navigáljunk a Fleet menübe, és kattintsunk az "Add agent" gombra. Az első lépésnél hagyjuk az "Agent policy 1" beállítást, és kattintsunk a „Create policy” gombra. A második lépésnél az "Enroll in Fleet" opciót hagyjuk engedélyezve, majd folytassuk a telepítést. A harmadik lépésben további telepítési parancsokat láthatunk az Elastic Agenthez, és ami még fontosabb, az ügynök regisztrációs tokenjét, amely engedélyezi az ügynök számára a Fleet-be való csatlakozást; ezt ideiglenesen másoljuk el.
A telepítéshez töltsük le és csomagoljuk ki az Elastic Agent tarball fájlt, majd az alábbi parancsokat futtassuk:
A root terminálban vagy sudo használatával futtassuk az alábbi parancsot az ügynök telepítéséhez:
A sikeres telepítést követően a Kibana felületén a negyedik lépés zöldre vált, és az „Agent enrollment confirmed” üzenet jelenik meg. Ezzel most egy teljes Elasticsearch, Kibana, Fleet és Elastic Agent szoftvercsomagot telepítettünk.
A Logstash használata következik, amelyről a "Stand-Alone Agents" fejezetben olvashatunk bővebben. A második Elastic VM-en kövessük ugyanazokat a lépéseket, mint a 2. fejezetben, és futtassuk a Logstash-ot a letöltött tarball fájlból. Ne felejtsük el létrehozni a certs és conf.d könyvtárakat, ha azok nincsenek jelen. Használjuk a korábban generált wildcard flex tanúsítványt.
A Kibana Discover funkcióján keresztül az események megtekintése egyszerű: itt láthatjuk az egyes hostok és hálózati eszközök eseményeit. Az Elasticsearch rendszeres eseményei és az Elastic Agent-ek által generált események fognak megjelenni.
A Kibana-ban történő kereséshez használjuk a field:value szintaxist. Például, ha a source.ip:192.168.8.130 keresőt használjuk, az összes olyan eseményt találhatjuk, amelyek a megadott IP címről származnak.
Integrációk használata is elérhető az Elastic Agent-ben, amelyek segítségével adatokat gyűjthetünk a különböző technológiákból, mint például felhőszolgáltatások, routerek, kapcsolók és host szintű hálózati metadokumentációk. A különböző integrációk lehetővé teszik, hogy az ügynökök számos technológiához csatlakozzanak, például a Packetbeat használatával a hálózati forgalmat is figyelhetjük.
A hálózati adatgyűjtés nem végez teljes csomagok rögzítését, hanem csak a hálózati metaadatokat, mint például a folyamatok nevét, forrás- és cél IP címeket, portokat, hálózati protokollokat, időbélyegeket és egyebeket rögzíti. Ez a rendszer hasonló a Zeekhez, de a host szintjén működik.
Az integrációs lehetőségek bővítése és az egyéni konfigurációk alkalmazása révén az Elastic Agent képes egyedi adatgyűjtési igények kielégítésére is.
Hogyan állítsunk be TLS-t és konfiguráljuk a Kafka-t biztonságos környezetben
A Kafka telepítése és konfigurálása számos lépést igényel, különösen akkor, ha biztonságos kapcsolatokra van szükség a broker-ek és a kliensek között. A következőkben bemutatjuk a TLS (Transport Layer Security) alkalmazásának folyamatát és annak beállítását Kafka környezetben, hogy a rendszer megfelelően titkosítva és védve legyen.
Első lépésként töltsük le a Kafka bináris csomagot az Apache hivatalos weboldaláról, a legfrissebb Scala verzióval. A csomag letöltése után kicsomagoljuk azt a /opt/kafka mappába. A letöltéshez használhatjuk a wget parancsot:
A Kafka fájlok előkészítése után következik a TLS tanúsítványok létrehozása. Mivel a Kafka kliens kapcsolatok fogadását és közvetítését végzi a broker-ek között, szükség van TLS titkosításra, hogy biztosítsuk a kommunikáció biztonságát. Minden Kafka node-hoz létre kell hozni egy saját tanúsítványt és kulcsot.
A TLS tanúsítványok létrehozása előtt fontos, hogy a rendszer rendelkezzen a szükséges Java fejlesztői csomaggal, mivel a Kafka a Java KeyStore (JKS) formátumot használ a tanúsítványok és kulcsok tárolására. Ehhez a keytool eszközt kell használni, amely a Java fejlesztői csomag része.
A következő lépésben készítsünk egy PKCS#12 (P12) fájlt minden egyes node-hoz, amely tartalmazza a privát kulcsot és a tanúsítványt. Például:
Ezután a PKCS#12 fájlokat importáljuk egy új JKS fájlba:
Ezután a truststore fájlokat kell létrehozni, amelyek a CA (Certificate Authority) láncot tartalmazzák. Az egész Kafka cluster számára csak egy ilyen fájlra van szükség, amelyet minden egyes node-ra másolunk. A következő parancs segítségével importálhatjuk a CA láncot a truststore-ba:
A TLS fájlokat az összes node-ra másolhatjuk egy egyszerű Python web szerver segítségével:
Ezután a következő parancsokkal letölthetjük a fájlokat minden egyes broker node-ra:
A Kafka konfigurálása során két fájlt kell módosítanunk: a server.properties fájlt, valamint szükség szerint a broker.properties és controller.properties fájlokat, amelyek a különböző szerepeket (broker és controller) konfigurálják a clusterben.
A server.properties fájlban kezdjük a következő alapbeállítások hozzáadásával:
A node.id az egyes node-ok azonosítója, amelyet minden egyes node-ra egyedileg kell beállítani. A process.roles beállításban megadjuk, hogy a node egyszerre broker és controller szerepet is betölt. A bootstrap.servers sorban megadjuk a node-ok címét, amelyet a cluster csatlakozásakor használnak.
Ezután állítsuk be a Kafka listener-eket, amelyek meghatározzák, hogy mely portokon kommunikálnak a broker-ek és a kliensek. A következő beállításokkal biztosíthatjuk a TLS titkosítást:
Az advertised.listeners beállítás biztosítja, hogy a kliensek és broker-ek is a megfelelő porton és titkosítással kapcsolódjanak egymáshoz. Az inter.broker.listener.name beállítja, hogy a broker-ek közötti kommunikáció is SSL-en keresztül történjen.
Fontos figyelembe venni, hogy ha nem használunk különböző hálózati interfészeket, vagy nem adtunk hozzá .internal domain-t a tanúsítványok Subject Alternative Name (SAN) mezőjéhez, akkor egyszerűen távolíthatjuk el az .internal részt a hostnevek közül.
A TLS és SSL beállítások megfelelő alkalmazása kulcsfontosságú a Kafka környezet biztonságos működéséhez, és lehetővé teszi, hogy a rendszer minden egyes kommunikációja titkosítva legyen, ezzel biztosítva a magas szintű adatvédelmet.
Hogyan állítsuk be a Kafka TLS-kapcsolatait és konfiguráljuk a klustert
A Kafka konfigurálása és működtetése több szintű technikai döntéseket igényel, különösen a biztonságos kommunikáció biztosítása érdekében. Az egyik legfontosabb aspektus ennek a beállításnak a TLS (Transport Layer Security) használata, amely lehetővé teszi a broker-ek közötti titkosított adatátvitelt, és biztosítja az adatok védelmét a különböző szerverek közötti hálózati kommunikáció során. Az alábbiakban részletesen bemutatjuk, hogyan kell konfigurálni és beállítani a TLS-t a Kafka környezetben, különös figyelmet fordítva a broker-ek és a kliensek közötti biztonságos kapcsolat létrehozására.
A konfigurálás első lépése, hogy biztosítsuk: minden broker számára rendelkezésre állnak a megfelelő hostname és hostname.local bejegyzések a megfelelő /etc/hosts fájlokban. Ahogy a könyvben eddig bemutattuk, minden tanúsítványban szerepelniük kell a hostname és hostname.local bejegyzéseknek, miközben a /etc/hosts vagy DNS bejegyzések a megfelelő 10.x IP-címekre kell hogy irányítsák a kafka01 és kafka02 broker-eket. Az egyes broker-ek frissítésekor fontos, hogy mindkét listener beállításban frissítsük a hostneveket. A controller lista vesszővel elválasztott formátumban szerepel, például: controller.quorum.voters=211@kafka01:9093,212@kafka02:9093. Ezt követően győződjünk meg arról, hogy minden controller rendelkezik a megfelelő TLS beállításokkal. Az inter.broker.listener.name beállítás használatával most már a controller-kapcsolók számára is szükséges megadni a megfelelő listener-t.
A TLS fájlok beállításának konfigurálása nem bonyolult, de pontosan kell eljárni. Az ssl.keystore.location és ssl.truststore.location bejegyzéseknél meg kell adni a kulcsok és a tanúsítványok elérési útját. Az ssl.keystore.password és ssl.key.password beállítások a titkos kulcsokhoz szükséges jelszavakat tartalmazzák, míg az ssl.truststore.password biztosítja a megbízható tanúsítványok elérését. Az ssl.client.auth=required beállítás biztosítja a kölcsönös TLS (mTLS) használatát, amely egy kritikus biztonsági elem, hiszen ez lehetővé teszi a kétoldalú hitelesítést a kliensek és broker-ek között.
A következő lépés a Kafka témák viselkedésének meghatározása. A log.message.timestamp.type=LogAppendTime beállítással lehetőségünk van arra, hogy a Kafka az üzeneteket ne az események dátuma és időpontja alapján, hanem annak alapján tartja meg, hogy mennyi ideje van egy üzenet a logban. Ez elengedhetetlen, mivel különben előfordulhatna, hogy Kafka automatikusan törli a régi adatokat, ha azok egy nem várt időpontból származnak. Ezen kívül fontos, hogy a topic-ok törlése engedélyezve legyen, miközben a dinamikus topic-képzés le van tiltva.
A Kafka konfigurációban számos további alapbeállítás szerepel, például a num.partitions=1, amely az új topic-ok esetében csak egy partíciót hoz létre alapértelmezettként. Ezen kívül beállítható a logok megtartásának időtartama is: a log.retention.hours=168 azt jelenti, hogy az üzenetek egy hétig lesznek megtartva. Ezen paraméterek finomhangolásával szabályozhatjuk, hogy a Kafka hogyan kezelje az adatokat és a logokat.
A következő lépés a csatlakozási beállítások megadása, különösen a TLS/SSL kapcsolatot biztosító fájlok létrehozása és konfigurálása. A /opt/kafka/config/client-ssl.properties fájl tartalmazza a minimum szükséges SSL beállításokat, például a bootstrap.servers=SSL://kafka01.local:9094,SSL://kafka02.local:9094 sort, ami biztosítja, hogy a Kafka kliensek a megfelelő TLS-kapcsolaton keresztül kommunikáljanak a broker-ekkel.
Ezen kívül a Kafka klaszterek számára egy belső azonosítót generálunk, amely segíti a klaszter tagjainak követését. Ehhez egy egyszerű parancsot kell végrehajtani a szerveren, amely véletlenszerűen generál egy 22 karakter hosszú azonosítót. Ezt az azonosítót később minden node konfigurációjában meg kell adni, hogy a klaszter minden tagja felismerje egymást.
A Kafka cluster felállításának egyik alapvető lépése a szolgáltatás indítása. Az új szolgáltatást a systemd segítségével indítjuk el, amely biztosítja, hogy a Kafka folyamatok megfelelően futnak és leállnak, ha szükséges. A megfelelő rendszerkonfiguráció biztosítja, hogy a Kafka cluster folyamatosan működjön, amíg azt manuálisan le nem állítják.
Mindezek mellett fontos megjegyezni, hogy az SSL/TLS beállítások és konfigurációk nem csupán technikai részletek, hanem kulcsfontosságú biztonsági tényezők, amelyeket soha nem szabad figyelmen kívül hagyni. A TLS konfigurálása nemcsak a megfelelő adatvédelem biztosítását szolgálja, hanem azt is, hogy minden egyes kapcsolat hitelesítése garantált legyen a Kafka környezetben.
Végül, ha a disk használat gyors növekedését tapasztaljuk, akkor számos konfigurációs beállítást kell finomhangolni, például a log.retention.hours értékét, hogy elkerüljük a nem kívánt adatvesztést. Emellett fontos a hálózati kapcsolat és a címek megfelelő ellenőrzése, hogy a broker-ek közötti kommunikáció biztonságosan működjön.
Miért a tökéletes folyadék sebességének forgása nulla a szférikusan szimmetrikus téridőben?
Hogyan használjuk az IBM Granite 3.0 modelleket a VS Code-ban és AI alapú kódjavítást
Hogyan befolyásolja a görbék és egyenesek viselkedését az egyenletek normál formája?
Hogyan kezeljük a harmadik trimesztert a várandósság alatt: A fizikai és érzelmi változások megértése
Miért különösen fontos a székletinkontinencia kezelése idős korban, és milyen sebészeti lehetőségek állnak rendelkezésre?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский