Infra-as-Code

Echo from the edge of the cyberworld

Verkon yli

Palvelinten hallinta ICI001AS3A-3010 - Syksy 2024

päivä aihe
2024-10-31 w44 Thu Verkon yli. Herra-orja -arkkitehtuuri verkon yli. Orjan tavoittaminen tuntemattomasta osoitteesta, NAT ja tulimuurin takaa. Harjoitusympäristöjen rakentaminen Vagrantilla. Vianselvitys verkkoyhteydessä.

Laitteisto

h2 Infra-as-code

Tehtävänanto

Olin perehtynyt viikon aiheisiin muutaman päivän ennen tehtävien tekoa. Aloitin tehtävien tekemisen Ma 11.11 klo 14:00 ja olin valmis Ti 12.11 0:30, pidin satunnaisesti taukoa ja jatkoin. Pitkät taukovälit klo 16-18 ja 19:30-22:00

x) Lue ja tiivistä

a) Hello Vagrant!

Näyttökuva 2024-11-11 kello 14 08 40

Vagrant on asennettuna isäntäkoneeseen.

b) Linux Vagrant. Tee Vagrantilla uusi Linux-virtuaalikone.

Vagrantin voi asentaa Macille (intel) seuraavilla komennoilla

$ brew tap hashicorp/tap
$ brew install hashicorp/tap/hashicorp-vagrant

Tai sen voi asentaa sivulta https://developer.hashicorp.com/vagrant/install [3]

Tein uuden kansion vagrantStart, ja siirryin kansioon. Tämän jälkeen aloitin Vagrantin komennolla

$ vagrant init hashicorp/bionic64
$ vagrant up 

Näyttökuva 2024-11-11 kello 14 31 37

Toimii, ja vagrant käynnisti Virtualboxissa uuden virtuaalikoneen vagrantStart_default_...

Näyttökuva 2024-11-11 kello 14 15 38

[4]

c) Kaksin kaunihimpi.

Vagrantin käynnistys teki uuden tiedoston Vagrantfile, tähän tiedostoon tein konfiguraatiot

Vagrant.configure("2") do |config|
  config.vm.define "server1" do |server1|
      server1.vm.box = "hashicorp/bionic64"
      server1.vm.network "private_network", ip: "192.168.56.4"
  end

  config.vm.define "server2" do |server2|
      server2.vm.box = "hashicorp/bionic64"
      server2.vm.network "private_network", ip: "192.168.56.5"
  end
end

config.vm.define “server1” ja config.vm.define “server2” määrittelevät kaksi virtuaalikonetta nimeltä server1 ja server2

Seuraavaksi käynnistin Vagrantin.

$ vagrant up

Varmistin että koneet pingaavat toisiaan, tein vuorotellen kirjautumalla ensiksi server1 ja sitten server2

$ vagrant ssh server1
$ vagrant ssh server2

Pingaus server1 koneesta

Näyttökuva 2024-11-11 kello 16 18 27

Pingaus server2 koneesta

Näyttökuva 2024-11-11 kello 16 19 47

d) Herra-orja verkossa.

Käynnistin ensimmäisen vagrant koneen server1, johon asennan salt-master.

$ vagrant ssh server1
$ sudo apt-get update
$ sudo apt-get install salt-master

Tarkistin salt-masterin statuksen

Näyttökuva 2024-11-11 kello 16 30 52

Tämä jälkeen siirryin toiseen vagrant koneeseen server2, tähän asensin salt-minionin ja samalla muokkasin /etc/salt/minion -tiedostoa, lisäämällä masterin osoitteen.

$ vagrant ssh server2
$ sudo apt-get update
$ sudo apt-get install salt-minion
$ sudoedit /etc/salt/minion

Näyttökuva 2024-11-11 kello 16 35 55

Tarkistin vielä että minion on aktiivinen

Näyttökuva 2024-11-11 kello 16 37 12

Siirryin vielä takaisin server1jossa on salt-master, jossa hyväksyin salt-minion avaimen.

Näyttökuva 2024-11-11 kello 16 40 19

sudo salt-key -A komennolla tarkistin avainpyynnöt, ja hyväksyin sen.

Kokeilin vielä pingaa minionia, mutta sain viestin että masteri ei vastaa. Kävin tarkistamassa konfiguraatiot /minion tiedostosta, että on oikea master osoite, ja että palomuurit 4505 ja 4506/tcp ovat auki.

Näyttökuva 2024-11-11 kello 17 18 39

salt-minion

Näyttökuva 2024-11-11 kello 17 22 30

salt-master

Näyttökuva 2024-11-11 kello 17 21 38

Tässä vaiheessa huomasin että enhän pääse itse enää kumpaakaan koneeseen. Vain portit 4505 ja 4506 portit jäivät auki, eikä portti 22/tcp ollut auki, josta itse pääsisin sisään.

Tuhosin nykyisen vagrantin ja loin uudestaan

$ vagrant destroy -f
$ vagrant up

Aloitin tehtävän uudestaan, ja tarkistin että asetukset ja yhteydet ovat oikein.

Vagrantfile:

Näyttökuva 2024-11-11 kello 19 53 57

Tarkistin että salt-master hyväksytyt avaimet ja palomuurin:

Näyttökuva 2024-11-11 kello 19 58 18

/etc/salt/minion konfiguraatio:

Näyttökuva 2024-11-11 kello 20 00 45

Tällä kertaa kokeilin lisätä kokeilin komentoa sudo salt '*' test.ping

Näyttökuva 2024-11-11 kello 20 14 54

Master voi komentaa minionia. Se näkyi komennolla sudo salt '*' cmd.run 'whoami'

Tämä näytti toimivan. Ihmettelin kuitenkin miksi pingi ei lähde komennolla sudo salt 'server2' test.ping

VagrantFile tietokoneen nimi oli vagrant

e) Hei infrakoodi!

local1

local2

local3

local4

f) Aja esimerkki sls-tiedostosi verkon yli orjalla.

Ohjeet: Run Salt Command Locally

Aloitin tekemällä kansion

$ sudo mkdir -p /srv/salt/hello
$ sudoedit /srv/salt/hello/init.sls

/srv/salt/hello/init.sls

/tmp/iaas:
  file.managed

Näyttökuva 2024-11-11 kello 20 32 39

Kuvassa näkyy, että masterin kone ohjaa minionin tekemään kansion /tmp kansioon iaas tiedoston. Tässä kävi myös ilmi idempotenssi. Kävin tarkistamassa minionistä että tiedosto on luotu oikeaan paikkaan. Seuraavassa kuvassa näkyy iaas tiedosto on toisena listalla.

Näyttökuva 2024-11-11 kello 20 37 47

[1]

g) Tee sls-tiedosto, joka käyttää vähintään kahta eri tilafunktiota näistä: package, file, service, user.

Näyttökuva 2024-11-11 kello 21 12 05

Tässä sls-tiedostossa käytin useampaa tilafunktiota.

Tulos:

Näyttökuva 2024-11-11 kello 23 04 34

jatkuu…

Näyttökuva 2024-11-11 kello 23 05 34

Kuvassa näkyy file.managed funktio vihreänä, eli se oli jo olemassa.

Seuraavaksi Vagrant asensi apache2-weppipalvelimen onnistuneesti, tässä kesti vähän pidempään kuin aikaisemmissa ajoissa. Duration: 35376.96 ms

service.running-funktio ei onnistunut. Syynä oli että, Vagrant ei tunnistanut nimeä apache2_service. Tarkoituksena oli erottaa pkg.installed ja service.running tilafunktioiden nimet.

Viimeisenä Vagrant teki käyttäjän ‘leonardo’ tilafunktiolla user.present

Kävin tarkistamassa Karvinen 2023: Salt Vagrant - automatically provision one master and two slaves, YAML syntaksia, ja korjasin init.sls tiedostoa [1]

Näyttökuva 2024-11-11 kello 23 17 35

Korjattu syntaksi:

apache2_service:
  service.running:
    - name: apache2

Tällä kertaa kaikki näytti vihreätä. Apachen lataaminen myös käynnistää palvelimen, joten se oli jo päällä joten Vagrant todisti sen idempotenssin.

Näyttökuva 2024-11-11 kello 23 20 28

Kävin tarkistamassa vielä minion koneelta että Vagrant todella teki kaiken:

Näyttökuva 2024-11-11 kello 23 22 36

h) Top file.

Tässä tehtävässä tarkoituksena oli automatisoida yhdestä tiedostosta vähintään kahden tilan / modulin ajaminen.

Karvinen 2023: Salt Vagrant - automatically provision one master and two slaves [1] Tästä löytyi varsin helpot ohjeet tähän.

hello kansio oli jo luotu edellisessä tehtävässä, ja loin uuden kansion moikka ja lisäsin siihen init.sls tiedoston. Seuraavaksi tein /srv/salt kansioon top.sls tiedoston. Kuvassa näkyy tiedostojen sisällöt:

Näyttökuva 2024-11-11 kello 23 50 00

Tämän jälkeen pystyin ajamaan lyhyemmän komennon sudo salt '*' state.apply.

Näyttökuva 2024-11-11 kello 23 54 37

Vagrant näköjään tunnistaa top.sls, ja että sieltä löytyy ajettavat tilafunktiot. Huomasin tämän koska, aluksi top.sls tiedosto oli väärin sijoitettu polkuun /srv/salt/top/top.sls, josta sain virheviestin

Näyttökuva 2024-11-11 kello 23 53 24

i) Asenna ja konfiguroi Apache. manuaalinen asennus

Tehtävä tehty automatisoituna seuraavan viikon palautuksessa Asenna ja konfiguroi Apache

Tarkistin aluksi että Apachen sivu toimii ja näkyy

Näyttökuva 2024-11-12 kello 0 07 09

curl localhost komento tulosti Apachen kotisivun, curl -I localhost komento tulosti lyhyemmän ytimekkään vastauksen.

Kaikki näytti olevan OK! Voin aloittaa tekemällä kansion käyttäjän hakemistoon:

$ sudo mkdir -p /home/leonardo/public_html/examplevagrant.com

Apache sivujen konfiguraatio:

$ sudoedit /etc/apache2/sites-available/examplevagrant.com.conf 

Näyttökuva 2024-11-12 kello 0 19 42

Etusivu index.html sisältö:

Näyttökuva 2024-11-12 kello 0 28 07

Otin Apachen oletussivun pois käytöstä ja otin omat sivut käyttöön komennoilla:

$ sudo a2dissite 000-default.conf
$ sudo a2ensite examplevagrant.com.conf

Jonka jälkeen Apache täytyy käynnistää uudelleen komennolla:

$ sudo systemctl restart apache2

kuva

Varmistetaan vielä että etusivua pystyy muokkaamaan ilman sudoa chown

Näyttökuva 2024-11-12 kello 0 39 07

Vaihdoin kansion uudeksi omistajaksi käyttäjän leonardo, näin käyttäjä pystyy muokkaamaan ilman sudoa.

PÄIVITYS 14.11.2024. Tehtävää on jatkettu, Apache piti asentaa ja konfiguroida automaattisesti master-minion tekniikalla. Tämä tuli esille rinnakkaisarvioinnissa.

Poistin käyttäjän ja käyttäjän hakemiston:

$ sudo deluser leonardo
$ sudo rm -rf /home/leonardo

Poistin Apache latauksen ja konfiguraatiot:

$ sudo apt purge apache2
$ sudo apt autoremove apache2
$ $ sudo rm -rf /etc/apache2/sites-available/

Näyttökuva 2024-11-13 kello 12 15 25

Nyt voidaan aloittaa alusta Master koneelta

Tehtävä oli haastava, joten kävin etsimässä esimerkkejä edellisiltä toteutuksilta.

Löysin nimimerkillä Vapalo:n .sls tiedoston. [6]

Luin hänen koodia ja muokkasin sitä niin että, olisin itsekkin voinut käyttää.

kuva

Ajoin ensin käskyt yksitellen, varmistin että jokainen toimii. Sen jälkeen ajoin komennot samaan aikaan jonka tuloksena:

kuva2

Eli, 1. käyttäjä on luotu, 2. Apache asennettu, 3. Apache on käynnissä (varmistus), 4. Käyttäjä pystyy muokkaamaan omassa hakemistossa olevia tiedostoja URL:n avulla, 5. Apachen oletus .html sivu on muokattu, 6. Käyttäjän hakemistoon on luotu kansio, jossa käyttäjä voi muokkaa sivuja.

Tehtävä alkoi käydä erittäin haastavaksi, sillä käyttäjän piti pystyä muokkaamaan sivuja omasta hakemistostaan ilman sudoa, sekä .conf tiedosto piti vaihtaa omaan konfiguraatioon ja aktivoida se.

Tehtävää päivitetään lisää tulevaisuudessa.

Päivitykset

Lähteet

  1. https://terokarvinen.com
    • https://terokarvinen.com/palvelinten-hallinta/#h2-infra-as-code
    • https://terokarvinen.com/2021/two-machine-virtual-network-with-debian-11-bullseye-and-vagrant/
    • https://terokarvinen.com/2018/salt-quickstart-salt-stack-master-and-slave-on-ubuntu-linux/
    • https://terokarvinen.com/2024/hello-salt-infra-as-code/
    • https://terokarvinen.com/2023/salt-vagrant/#infra-as-code—your-wishes-as-a-text-file
    • https://terokarvinen.com/2021/salt-run-command-locally/
  2. https://docs.saltproject.io/salt/user-guide/en/latest/topics/overview.html#rules-of-yaml
  3. https://developer.hashicorp.com/vagrant/tutorials/getting-started/getting-started-index
  4. https://developer.hashicorp.com/vagrant/install
  5. -
  6. https://github.com/Vapalo
    • https://github.com/Vapalo/suolagit/blob/main/apache/init.sls
  7. https://httpd.apache.org/docs/2.4/mod/mod_userdir.html