Henry Isakoff 🥕 Palvelinten Hallinta

| Palvelinten Hallinta | 6 min

Daemonit ja salt

Tässä raportissa tutkitaan Salttia daemonien näkökulmasta. Asennetaan ihan perus ssh, katsotaan toissaviikon apache ohjelmistoon nimipalvelinpohja kuntoon, kokeillaan traefikkia/caddyä reverseproxyyn ja kokeillaan SQL tietokantaa käyttäjälle.

Käytetään viime viikon vagrant kokonaisuutta tässä sopivasti hyödyksi. Eli Mac OS M2 macbook koneeni luomaan vagrantilla pari debian-12 alamaista saltille ja yksi valtaamaan kaikki.

Terolla SSH asennukseen aika selkeä pohja josta voi ottaa apua.

Oletuksena nyt viime viikon koneet jo pystyssä. Meillä alamainen1, alamainen2 ja masteri - joissa jo asennettu salt ja minionit.

SSH config

SSH

Eli SSH on hyvä aloitusesimerkki. Nyt haluamme luoda klusterin koneita joissa SSH on alkujaankin asennettu, määritelty toimimaan tietyssä portissa ja muutenkin toimimaan aika meidän omien tarpeidemme mukaan.

Kertauksen: ssh toimii oletuksena portista 22. Saamme säädettyä tätä /etc/ssh/sshd_config tiedostossa. Tässä voi olla siis muitakin portteja. Nyt tähän demoon käytetään 22 ja 2222. Eli laitetaan aktiivisiksi.

SSH config

Käynnistetään ssh palvelu uudestaan ja tarkastetaan socket-search komennolla, että palvelu pystyssä molemmissa porteissa.

sudo systemctl restart ssh

sudo ss -tlpn | grep sshd
# t = näytetään yhdistykset l = näytetään kuunneltavat yhdistykset p = näytä koko prosessi n= numerona portti

SSH config

Eli nyt teknisesti todistettu, että portti ohjautuu, voidaan automatisoida tämä saltilla. (Muutetaan asetukset takaisin alkuperäisiin asetuksiin).

Saltilla

Luon masterille salttiin ssh palvelun pystyyn ja luon sinne sshd_config.oma tiedoston. Tänne luodaan käytännössä kaikki asetukset mitä haluamme tarkasti koneiden ssh asetusten sisältävän.

Nyt tähän esimerkkiin lisään vain kaksi riviä. Tämä on hyvin yksinkertaistettu esimerkki, mutta proof-of-consept, että monipuolisemminkin saa toimimaan. Tähän hyvä lähteä rakentamaan ihan perustiedostosta. Nyt kyseessä kuitenkin toimiva demo.

Port 22
Port 2222

’init.sls’ seuraava ja kommenteilla

# /srv/salt/ssh/init.sls

# Tila 1: varmistetaan, että paketti on asennettu.
openssh-paketti:
  pkg.installed:
    - name: openssh-server

# Tila 2: File - Hallinnoi asetuksia.
sshd-asetustiedosto:
  file.managed:
    - name: /etc/ssh/sshd_config
    - source: salt://ssh/sshd_config.oma

# Tila 3: Service - Varmista, että palvelu on käynnissä JA VAHTII tiedostoa.
ssh-palvelu:
  service.running:
    - name: ssh
    # Varmistaa, että palvelu käynnistyy myös käynnistyksen yhteydessä.
    - enable: True
    # TÄRKEIN OSA: watch-sääntö.
    # Tämä "vahtii" yllä olevaa tilaa. Jos Salt muuttaa
    # sshd-asetustiedostoa, tämä käynnistää ssh-palvelun uudelleen.
    - watch:
      - file: sshd-asetustiedosto

SSH config

Sitten ajetaan sync

sudo salt '*' state.apply

Teen kokeilun porteille 2222 ja 2233 - todistaakseni, että salt päivitys ajaa.

SSH config SSH config SSH config SSH config

Toimii!

Käyttäjä, caddy ja palvelun ohjaus.

Nyt kun tiedämme miten nämä toimii - voidaan viedä kokonaisuus pidemmälle.

Haluamme jakaa nettisivun suoraan nimipalvelimeen. Teimme jo toissaviikolla Apachella yksinkertaisen systeemin pyörimään.

Tehdään nyt Caddyllä ja traefikilla sivustot ylös. Olen optellut kubernetesta viime aikoina innokkaasti ja traefikista tullut vähän tutumpi työkalu.

Näitä varten tarvitsemme kuitenkin käyttäjän jolla omat oikeudet näihin järjestelmiin. Tässä voisin luoda oikeudet omalle käyttäjälleni, mutta koska tehdään töitä vagrantilla, voidaan luoda vaikka käyttäjä netti jolla nämä oikeudet.

Tietenkin 🦄saltilla🦄.

# /srv/salt/ktj_netti/init.sls
ktj:
  user.present:
    - name: netti
    - shell: /bin/bash
    - createhome: True

Nyt en ihan varma tarvitaanko omaa ryhmää oikeuksille myös, mutta jätetään merkitsemättä vielä. Caddy on uusi tuttavuus niin pylly edellä puuhun!

Caddy

Luodaan samalla saltille projektit caddylle ja traefikille.

Tässä kohtaan käytän mistral_small3.2 mallia jäsentämään itselleni molempien init.sls tiedostojen pohjarakenteen.

Luen samalla caddyn asennus-dokumentaatiosta, että apt asennusta ei tarjolla. Eli tähän tarvitsemme saltin pkgrepo.managed työkalua. Tämä huikean kätevä. Eli voimme pyytää asentamaan paketit suoraan reposta avaimilla.

Koostan mistralin avulla ’caddy/init.sls’ tiedoston. Repo piti itse määritellä ohjeiden mukaan. Kommentit mukana.

# /srv/salt/caddy/init.sls

# Varmistetaan, että käyttäjä 'netti' luodaan ensin.
include:
  - ktj_netti

# Määritellään Caddyn pakettivarasto.
caddy_pakettivarasto:
  pkgrepo.managed:
    - name: deb [arch=amd64 signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main
    - file: /etc/apt/sources.list.d/caddy-stable.list
    - key_url: https://dl.cloudsmith.io/public/caddy/stable/gpg.key
    - gpg_keyring: /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Asennetaan Caddy-paketti.
caddy_asennettu:
  pkg.installed:
    - name: caddy
    - refresh: True
    - require:
      - pkgrepo: caddy_pakettivarasto # Vaatii, että pakettivarasto on määritelty

# Luodaan web-hakemisto käyttäjän 'netti' kotihakemistoon.
caddyn_sivuhakemisto:
  file.directory:
    - name: /home/netti/caddy
    - user: netti
    - group: netti
    - require:
      - user: ktj # Vaatii, että käyttäjä on luotu

# Luodaan etusivu web-hakemistoon.
caddy_etusivu:
  file.managed:
    - name: /home/netti/caddy_site/index.html
    - source: salt://caddy/index.html
    - user: netti
    - require:
      - file: caddyn_sivuhakemisto # Vaatii, että sivuhakemisto on olemassa

# Hallinnoidaan Caddyn asetustiedostoa.
caddyn_asetustiedosto:
  file.managed:
    - name: /etc/caddy/Caddyfile
    - source: salt://caddy/Caddyfile
    - require:
      - pkg: caddy_asennettu # Vaatii, että Caddy-paketti on asennettu

# Varmistetaan, että Caddy-palvelu on päällä ja vahtii asetuksia.
caddy_palvelu_kaynnissa:
  service.running:
    - name: caddy
    - enable: True
    - watch:
      - file: caddyn_asetustiedosto # Jos asetustiedosto muuttuu, käynnistä palvelu uudelleen

Lisään myös index-sivun ja Caddyfilen viereen.

index.html
<h1>Caddy-sivusto toivottavasti netti-käyttäjän kotihakemistosta?</h1>
# Tämä on Name-Based -määritys Caddyllä
caddy.sivu {
    root * /home/netti/caddy
    file_server
}

16.11 Jatkuu. Joudun palauttamaan keskeneräisenä, koska en saanut vielä repoa toimimaan. Huomenna jatkuu.

Lähteet

Teron apureita https://terokarvinen.com/2018/04/03/pkg-file-service-control-daemons-with-salt-change-ssh-server-port/?fromSearch=karvinen%20salt%20ssh

Socket-search (ss) https://man7.org/linux/man-pages/man8/ss.8.html

Traefik https://traefik.io/traefik

Caddy https://caddyserver.com https://caddyserver.com/docs/install#debian-ubuntu-raspbian