Fullmoon System

The Operations Loop bouwen — Van PXE tot NetBox, AWX en Zabbix

AI_Manager

Dit artikel beschrijft de daadwerkelijke installatieprocedure waarbij serverinstallatie, assets, automatisering en monitoring worden gekoppeld binnen vier interne netwerken van VirtualBox. De centrale services worden samen geplaatst op fml-ops-01/02, maar de beheerseenheden worden gescheiden via Compose en K3s. Voor elke stap worden zowel de online als de gesloten netwerkprocedures vermeld.

De commando’s zijn gebaseerd op de adressen en vaste versies van deze oefening. Wachtwoorden, tokens en SSH-private keys worden niet als voorbeeld of in Git opgenomen. Plaatsvervangers in configuratiebestanden worden ingevoerd vanuit uw eigen geheime opslagplaats. Het uitgevoerde bereik en de werkelijke resultaten worden gecontroleerd op basis van het verificatieartikel.

Volgorde van dit artikel

1. Versies en installatievolgorde

Component Gebruikte versie / methode Reden van keuze
Virtualisatie / OS VirtualBox 7.2.18 / Rocky Linux 10.2 Reproduceerbare Linux-oefening op een fysieke pc
Docker / Compose 29.8.1 / 5.5.1 Containerbeheer voor Centraal/Proxy
Zabbix 7.0.30 LTS Server/Web/Proxy/Agent 2 Versie-uitlijning tussen Server en Proxy, vastgezet op de officiële LTS-patch
NetBox 4.7.1, netbox-docker 5.1.1 API-gebaseerd activabeheer met twee apps/workers
PostgreSQL / Patroni PostgreSQL 15 / Patroni 4.1.5 Centrale DB-replicatie en rolwisseling
Redis / etcd Redis 7.4 / etcd 3.7.1 Gedistribueerde storingsdetectie met Sentinel
AWX / Operator 24.6.1 / 2.19.1 Officiële installatiemethode voor Operator
K3s v1.37.0+k3s1 Basis voor het uitvoeren van AWX op een enkele VM
NetBox collection netbox.netbox 3.23.0 Inventarisplugin die NetBox v2 Bearer-tokens gebruikt

De installatievolgorde is OS/netwerk → DNS/NTP/CA → etcd/PostgreSQL/Redis → toegang tot VIP → NetBox/Zabbix → omgevingsspecifieke Proxy/Bastion → K3s/AWX/Git → PXE-doel → automatiseringsintegratie → verificatie van storing/herstel. Controleer eerst of de DB-rol, naamomzetting en tijdsynchronisatie van de vorige stap correct zijn, zelfs als de UI van de volgende stap verschijnt.

Met ‘latest’ wordt hier de vastgelegde versie op de implementatiedatum 2026-09-20 bedoeld. Controleer bij latere herbouwingen het ondersteuningsbeleid en de image-digest opnieuw, en combineer de versies in dit artikel niet met nieuwe versies. Maak onderscheid tussen de nieuwste algemene release van Zabbix en de nieuwste officiële LTS.

2. VM- en netwerkvoorbereiding

CORE is 10.77.10.0/24, PROD is 10.77.20.0/24, DEV is 10.77.30.0/24 en STG is 10.77.40.0/24. Maak ze respectievelijk aan als interne netwerken fml-core/prod/dev/stg. Verbind de vier interne netwerk-NIC’s met Gateway en Provision, en verbind Edge en doelen met hun eigen omgevingsnetwerk.

Bij configuratie in een online netwerk

Controleer de checksum van de officiële ISO en maak een Rocky minimale installatiesjabloon. Gebruik op de beheer-VM gedurende de installatieperiode een gescheiden NAT-NIC en intern netwerk-NIC. Bind de SSH-port-forwarding van de host alleen aan 127.0.0.1. Sluit geen NAT aan op de doel-PXE-VM.

$VBox = 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe'
& $VBox list vms
& $VBox showvminfo fml-ops-01 --machinereadable
# Maak het doelsysteem alleen aan op een goedgekeurde, lege schijf.
.\lab-v2\Create-PxeTarget.ps1 -Environment prod

Bij het klonen van sjablonen, genereer je telkens een nieuwe hostname, machine-id, SSH-hostkey en MAC. Controleer of het vaste adres, de sleutel en de machine-id van de bronsjabloon niet achterblijven op meerdere VM’s. Handhaaf SELinux Enforcing en firewalld, en beperk externe root-aanmelding en wachtwoordaanmelding.

Bij configuratie in een geïsoleerd (air-gapped) netwerk

Importeer de ISO, geverifieerde installatiepakketten, interne CA, openbare sleutels en configuratiesjablonen en bouw vervolgens dezelfde interne netwerkstructuur op. Zelfs zonder aangesloten NAT-NIC moet er toegang zijn tot de OS-installatie en de interne DNS/NTP. Registreer ‘een bestaande installatie waarbij NAT later is uitgeschakeld’ en ‘installatie vanaf het begin na importeren van vereiste afhankelijkheden’ als afzonderlijke tests.

Op deze pc liep het opstarten met 2 vCPU’s van een nieuw BIOS PXE-doel vast, dus werd 1 vCPU gebruikt. Centrale machine nr. 1 draaide met 4 vCPU’s in het Intel Core i7-6700K CPU-profiel. Deze profielnaam is niet de daadwerkelijke pc-CPU. Hyper-V/VBS/geheugenintegriteit zijn niet gewijzigd. Gedetailleerde VM-problemen worden behandeld in een afzonderlijke blog.

3. Routering, DNS, NTP en toegangspaden

Communicatie tussen omgevingen wordt toegestaan via het firewalld-beleid van de Gateway. Provision is direct verbonden met elke omgeving om DHCP, PXE en opslag te leveren, en wordt niet gebruikt als router.

Bron Bestemming Poort Doel
Centraal .11/.12 Omgeving Edge .10 TCP 22 Bastion-toegang
Omgeving Edge .10 Goedgekeurde doel .101 TCP 22 SSH forwarding
Doelomgeving Zelfde omgeving Edge .10 TCP 10051 Agent Active-gegevens
Omgeving Edge .10 Centraal .11/.12 TCP 10051 Active Proxy en HA Server
Goedgekeurd omgevingsnetwerk VIP 10.77.10.10 TCP 443 NetBox/Zabbix/AWX API·web
Doelomgeving Zelfde omgeving Provision .20 DNS 53, NTP 123, HTTP 80, PXE-gerelateerde poorten Installatie, naamomzetting, tijd, interne opslag
Centraal/quorum Betreffende interne servicenode etcd 2379/2380, Patroni 8008, PG 5432/6432, Redis 6379/26379, NFS 2049 Datareplicatie, quorum, gedeelde media

De bovenstaande tabel is een samenvatting van communicatiedoelstellingen. Controleer voor de daadwerkelijke toestemmingsregels zowel de hostfirewall als het routerbeleid. Stel DB, etcd en Redis niet bloot aan het internet of alle omgevingsnetwerken.

Bij configuratie in een online netwerk

Installeer de benodigde pakketten op de beheer-vm en maak de interne interface en statische route aan. Meng de standaardroute voor internet en de statische route van het oefennetwerk niet door elkaar.

nmcli connection modify fml-internal \
  +ipv4.routes '10.77.20.0/24 10.77.10.1'
nmcli connection modify fml-internal \
  +ipv4.routes '10.77.30.0/24 10.77.10.1'
nmcli connection modify fml-internal \
  +ipv4.routes '10.77.40.0/24 10.77.10.1'
nmcli device reapply enp0s8
ip route
chronyc tracking

Bij configuratie in een afgesloten netwerk

Laat interne DNS netbox.fullmoon.test, zabbix.fullmoon.test en awx.fullmoon.test omzetten naar VIP 10.77.10.10, en git.fullmoon.test naar 10.77.10.12. Vertrouw niet op externe DNS-fallback. Gebruik de chrony van Provision als interne referentie, maar zorg voor een extern gevalideerde tijdbron en synchronisatiebeleid in daadwerkelijke productie.

getent hosts netbox.fullmoon.test git.fullmoon.test
chronyc sources -v
ip route get 10.77.20.10

Toegang via de browser gebeurt via de HTTPS-naam vanaf een beheereindpunt dat de oefen-CA vertrouwt. Als Windows het interne netwerk niet direct routeert, kan een loopback-SSH-tunnel worden gebruikt. Controleer eerst of de lokale poort 443 niet al in gebruik is.

ssh -i <관리용_개인키> -p 22031 -N -L 127.0.0.1:443:10.77.10.10:443 labadmin@127.0.0.1

In de hosts van het beheereindpunt moeten de drie servicenamen worden gekoppeld aan 127.0.0.1, en moeten geverifieerde openbare CA-certificaten in de vertrouwensopslag worden geregistreerd. Neem de privésleutel van de server-CA niet mee. Gebruik beheer-SSH-poort 22032 van centrale knooppunt 2 om bereikbaar te blijven tijdens een storingstest van centrale knooppunt 1. Het negeren van certificaatwaarschuwingen mag geen deel uitmaken van de normale verbindingsprocedure.

4. Container-runtime en importpakket

Bij configuratie in een online netwerk

Installeer Docker/Compose vanuit de officiële Docker RHEL-repository. Verdeel de Compose-projectpaden onder in /opt/fullmoon-lab/core, /opt/fullmoon-lab/apps en /opt/fullmoon-lab/edge. Bewaar gevoelige omgevingsbestanden met root-eigendom en machtiging 0600, en de bovenliggende map met 0700.

docker version
docker compose version
docker compose --project-directory /opt/fullmoon-lab/core \
  -f /opt/fullmoon-lab/core/compose.yml config --quiet
docker image inspect --format '{{json .RepoDigests}}' \
  zabbix/zabbix-server-pgsql:alpine-7.0.30

Aangezien de volledige gerenderde compose-uitvoer wachtwoorden kan bevatten, mag u de inhoud van config niet opslaan in openbare logboeken. Maak ook onderscheid tussen of SELinux Enforcing actief is op de host en of SELinux-integratie in de Docker-daemon is ingeschakeld. Deze oefening behoudt host Enforcing, maar claimt geen omgeving waarin ook Docker SELinux-integratie is toegepast.

Bij configuratie in een afgesloten netwerk

Download RPM’s en afhankelijkheden van een verbonden voorbereidings-vm met dezelfde CPU-architectuur en Rocky major release. Het Docker-image-archief en het K3s/containerd-archief zijn afzonderlijk. Dat u images in Docker hebt geladen, betekent niet dat ze in K3s kunnen worden gebruikt.

# Voorbereidings-VM: sla de vereiste RPM-versies en alle afhankelijkheden op
dnf download --resolve --alldeps --destdir ./rpms \
  docker-ce docker-ce-cli containerd.io docker-compose-plugin
createrepo_c ./rpms
docker image save -o images.tar <반입할_고정_이미지_목록>
sha256sum images.tar > images.tar.sha256

# Na overdracht naar het geïsoleerde netwerk
sha256sum -c images.tar.sha256
docker image load -i images.tar
k3s ctr images import fullmoon-ee-r2.tar

De importlijst bestaat uit OS ISO/RPM-opslagplaatsen, Docker/Compose, Patroni-buildresultaten, NetBox/Zabbix/Redis/etcd-images, K3s-binaire bestanden en airgap-images, Operator/RBAC proxy/AWX/EE-images, Git-bundels, configuratiesjablonen/openbare CA, ondertekeningssleutels en controlesommen. Valideer op een nieuw doel zonder externe NIC om te voorkomen dat de handeling per ongeluk slaagt dankzij de cache van de voorbereidings-vm.

5. Configuratie van PostgreSQL, etcd en Redis

etcd en Sentinel worden geplaatst op de twee centrale knooppunten en het quorumknooppunt. PostgreSQL/Patroni en Redis worden op de twee centrale knooppunten geplaatst. De database scheidt accounts en databases voor NetBox, Zabbix en AWX.

Bij configuratie in online netwerk

Pull/build de vaste images en plaats NODE_NAME/NODE_IP per knooppunt, de Patroni-configuratie, Redis/Sentinel-configuratie en beperkte vertrouwelijke bestanden. Start de centrale database nadat is gecontroleerd of de drie etcd-knooppunten met elkaar communiceren.

docker compose --project-directory /opt/fullmoon-lab/core \
  -f /opt/fullmoon-lab/core/compose.yml --profile central up -d
docker compose --project-directory /opt/fullmoon-lab/core \
  -f /opt/fullmoon-lab/core/compose.yml exec -T postgres \
  patronictl -c /etc/patroni/patroni.yml list
curl --fail http://10.77.10.11:8008/patroni
curl --fail http://10.77.10.12:8008/patroni

Het quorumknooppunt voert alleen etcd en Sentinel uit zonder centraal profiel. Patroni’s synchronous_mode is ingeschakeld en synchronous_mode_strict is ingesteld op false. De replicatiestatus en het risico op commit-verlies bij storingen moeten worden beoordeeld op basis van de operationele voorwaarden. Gebruik niet de methode waarbij beide databases handmatig als primaire database worden ingesteld.

Bij configuratie in een afgesloten netwerk

Omdat de Patroni Dockerfile externe repositories zoals pip en apt vereist, voltooit u de images in de online voorbereidingsfase en importeert u ze. Vermijd het ter plekke bouwen waarbij internetafhankelijkheden worden aangetroffen. Laad hetzelfde archief op beide centrale knooppunten, vergelijk de image-ID’s en start ze volgens dezelfde procedure.

De DB-verbindingspoort van HAProxy is 6432. Alleen knooppunten waar Patroni /primary 200 retourneert, worden gebruikt als DB-schrijfbackend. Omdat inactieve DB-verbindingen kunnen wegvallen bij de initiële timeout van 60 seconden, zijn de client/server-timeouts van de DB-listener gescheiden naar 1 uur. Pas deze waarde aan op basis van werkelijke query- en connection pool-beleidsregels.

6. VIP, HTTPS en NetBox-redundantie

De Keepalived VIP is 10.77.10.10 en het normale voorkeursknooppunt is ops01. HAProxy op beide knooppunten maakt verbinding met NetBox 8082, Zabbix Web 8080 en AWX 30080. De actieve rollen van Node, DB, Redis en VIP hoeven niet altijd op hetzelfde knooppunt te liggen.

Bij configuratie in een online netwerk

Geef certificaten uit met de oefen-CA waarin de drie webnamen zijn opgenomen in de SAN, en plaats de certificaten/sleutels met beperkte rechten op de twee centrale knooppunten. Gebruik dezelfde SECRET_KEY, API token pepper en Redis Sentinel-instellingen voor NetBox App en Worker.

# Belangrijkste configuratierelaties in netbox-configuration.py
DATABASES = {'default': {
    'ENGINE': 'django.db.backends.postgresql',
    'NAME': 'netbox', 'USER': 'netbox',
    'PASSWORD': '<비밀_파일에서_주입>',
    'HOST': '127.0.0.1', 'PORT': 6432,
}}
# Gebruik dezelfde waarden voor SECRET_KEY / API_TOKEN_PEPPERS op beide App-nodes.
# Geef voor REDIS tasks/caching de Sentinel-service en de bijbehorende DB-nummers op.

Gebruik het werkelijke versieafhankelijke formaat van het standaardconfiguratiebestand op basis van de geleverde NetBox-configuratie en officiële documentatie. Als u alleen de omgevingsvariabelen aanpast maar ze niet uitleest in de Python-configuratie, worden ze niet toegepast. Voltooi de initiële databasemigratie eerst op één knooppunt en start pas dan de overige knooppunten en Worker.

Media wordt gedeeld via /srv/fullmoon/netbox-media op het quorum via NFSv4. Alleen de twee centrale knooppunten krijgen exporttoegang en root_squash blijft behouden. Controleer de werkelijke UID van het NetBox-image om de mapmachtigingen af te stemmen. De gecontroleerde NFS SELinux-boolean in deze Rocky-omgeving is virt_use_nfs.

findmnt /srv/fullmoon/netbox-media
haproxy -c -f /etc/haproxy/haproxy.cfg
keepalived -t -f /etc/keepalived/keepalived.conf
systemctl is-active haproxy keepalived
curl --fail https://netbox.fullmoon.test/login/ -o /dev/null

Bij configuratie in een afgesloten netwerk

Het NetBox-image bevat de Python-afhankelijkheden die nodig zijn voor uitvoering, dus images met dezelfde digest worden naar beide knooppunten geïmporteerd. Voeg de interne CA niet alleen toe aan de host, maar ook aan AWX EE. Zorg dat er een herstelprocedure voor geheimen is zodat SECRET_KEY/pepper op beide knooppunten niet van elkaar gaan verschillen. Een NFS-onderbreking beïnvloedt media los van het succes van de web-API en moet dus afzonderlijk worden getest.

Een daadwerkelijk aangetroffen probleem betrof de NetBox health check. Als /login/ werd gecontroleerd zonder HTTP/1.1 Host, retourneerde NetBox een 400-fout, waardoor HAProxy alle backends als down beoordeelde en de VIP 503 retourneerde. De Host werd als volgt opgegeven.

backend netbox_ui
    mode http
    option httpchk
    http-check send meth GET uri /login/ ver HTTP/1.1 hdr Host netbox.fullmoon.test
    http-check expect status 200
    server ops01 10.77.10.11:8082 check
    server ops02 10.77.10.12:8082 check

Tijdens storingstests nam een enkele NetBox-cache-lookup ongeveer 55,6 seconden in beslag vanwege de standaardretry voor Redis-verbindingen. Na controle van de geïnstalleerde versies van NetBox 4.7.1 en django-redis is dit aangepast om eerst de lokale Sentinel te raadplegen. Voor de cache zijn verbindings- en responstimeouts en een retry-beleid expliciet opgegeven in de ondersteunde KWARGS. De loopback is een ander verbindingsadres van dezelfde Sentinel en betekent niet dat er een meerderheid van leden is toegevoegd.

from redis.backoff import NoBackoff
from redis.retry import Retry

# Vraag op elke NetBox-node eerst de lokale Sentinel op.
SENTINELS = [('127.0.0.1', 26379), ('10.77.10.13', 26379),
             ('10.77.10.11', 26379), ('10.77.10.12', 26379)]
REDIS['caching']['KWARGS'] = {
    'socket_connect_timeout': 3,
    'socket_timeout': 3,
    'retry': Retry(NoBackoff(), 0),
}

Aangezien dit beperkte waarden zijn om fouten snel terug te geven, verschillen de vertraging bij afzonderlijke verzoeken en de servicehersteltijd. Raadpleeg het verificatieartikel voor de daadwerkelijke tijd tot herstel van de API na een storing in de primaire DB/Redis-knooppunten. Generaliseer niet dat dezelfde resultaten optreden bij operationele belasting of andere versies.

7. Zabbix LTS HA en omgevingsspecifieke Proxy/Bastion

Bij configuratie in een online netwerk

Server/Web/Proxy gebruiken de tag alpine-7.0.30 en Agent 2 voor Rocky gebruikt de 7.0.30 RPM voor el10. Beide servers gebruiken dezelfde Zabbix-database, maar zijn geconfigureerd met verschillende HANodeNames en NodeAddresses. Web is ingesteld om geen specifiek serveradres vast te leggen, maar om het actieve knooppunt te vinden via de HA-informatie.

# ops01
ZBX_HANODENAME=fml-ops-01
ZBX_NODEADDRESS=10.77.10.11:10051
# ops02
ZBX_HANODENAME=fml-ops-02
ZBX_NODEADDRESS=10.77.10.12:10051
# Scheid de adressen binnen hetzelfde HA-cluster voor de actieve proxy met een puntkomma
ZBX_SERVER_HOST=10.77.10.11:10051;10.77.10.12:10051

De proxynaam moet exact overeenkomen met de naam die is geregistreerd in de Zabbix-API. Maak onderscheid tussen de omgevingsspecifieke Proxy PSK en Agent PSK. Plaats Proxy SQLite-gegevens op een persistent volume en pas beleid voor schijfbuffers toe. Pas als is gecontroleerd of vertraagde gegevens na onderbreking opnieuw zijn verzonden, kan worden gezegd dat de bufferwerking is geverifieerd.

Bij configuratie in een geïsoleerd netwerk

Proxy-images worden geladen via docker load. Agent-RPM’s worden geleverd via een interne repository met behoud van GPG-handtekeningverificatie. Deze el10-RPM is geverifieerd met de sleutel B5333005. Omdat de verificatie mislukte in de configuratie die alleen de bestaande sleutel A14FE591 gebruikte, is de vingerafdruk van de officiële ondertekeningssleutel gecontroleerd en toegevoegd.

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-B5333005
rpm -K zabbix-agent2-7.0.30-release1.el10.x86_64.rpm
# Gecontroleerde vingerafdruk van de sleutel
# 4C3D6F2CC75F5146754FC374D913219AB5333005

De Bastion stuurt uitsluitend door naar .101:22 van het doelsysteem in de betreffende omgeving. Interactieve shells en agent-forwarding zijn niet toegestaan. Er wordt verbinding gemaakt met het doelsysteem via de centrale sleutel, zonder privésleutels op de Edge achter te laten. Met behoud van de SSH-toegang van het bestaande beheerdersaccount wordt de configuratie gecontroleerd met sshd -t en opnieuw geladen.

Match User bastion
    AuthenticationMethods publickey
    AllowTcpForwarding local
    PermitOpen 10.77.20.101:22
    PermitTTY no
    AllowAgentForwarding no
    ForceCommand /bin/false
Match all

8. Git, K3s, AWX en uitvoeringsomgeving

Bij configuratie in een online netwerk

De Git bare repository bevindt zich op ops02 onder /srv/git/fullmoon-automation.git. AWX haalt de main branch op met behulp van de alleen-lezen deploy-sleutel van fmlgit. Om ervoor te zorgen dat git-shell forced commands correct kan interpreteren, is het pad omsloten door enkele aanhalingstekens.

restrict,command="git-upload-pack '/srv/git/fullmoon-automation.git'" ssh-ed25519 <공개키>

K3s is geïnstalleerd op ops01 en SELinux en Secret-versleuteling zijn ingeschakeld. Traefik, ServiceLB en metrics-server zijn uitgesloten omdat deze niet nodig zijn voor deze oefening. AWX is vastgezet op Operator 2.19.1 en AWX 24.6.1, en het PostgreSQL-secret verwijst naar het pad 6432 van de bestaande HA-database. Het beheerderswachtwoord, het database-wachtwoord en de CA-bundel worden geïnjecteerd als Kubernetes Secrets.

k3s kubectl -n awx get pods,jobs
k3s kubectl -n awx apply -f awx.yml
curl --fail https://awx.fullmoon.test/api/v2/ping/

Omdat het gcr.io-pad voor de initiële RBAC-proxy-image van de Operator een 404-fout gaf, is dit gewijzigd naar de officiële quay.io/brancz-image met dezelfde versie v0.15.0. In de AWX CRD moeten cookie-instellingen strings zijn en host_aliases arrays. Als SYSTEM_TASK_ABS_MEM als getal werd opgegeven, riep de bijbehorende AWX-code stringmethoden aan, wat leidde tot een mislukte dispatcher; daarom zijn onnodige handmatige instellingen verwijderd.

Bij configuratie in een geïsoleerd netwerk

Importeer zowel de K3s airgap-image als alle images die door de Operator worden gegenereerd. Als met name de init-, migration-, EE- en RBAC-proxy-images ontbreken, zal de installatie mislukken, zelfs als de web-image aanwezig is. Controleer na import naar K3s containerd of de daadwerkelijke imagenaam overeenkomt met de naam in de CR.

De oefen-EE heeft netbox.netbox:3.23.0, een openbare CA en geverifieerde Git/Edge SSH host keys toegevoegd aan awx-ee:24.6.1. De imagenaam is localhost/fullmoon-ee:24.6.1-netbox3.23.0-r2 en het pull-beleid van de AWX-uitvoeringsomgeving is Never. De aanwezigheid van localhost in de naam betekent niet dat er een registry wordt uitgevoerd; er wordt gebruikgemaakt van een lokaal vooraf geïmporteerde image in K3s.

k3s ctr images import fullmoon-ee-r2.tar
k3s ctr images list
git bundle verify fullmoon-automation.bundle

In AWX worden een Project, een goedgekeurde bootstrap-inventaris, een NetBox-inventarisbron, een SSH-credential, NetBox/Zabbix API-credentials, Onboard/Verify Job Templates en een Workflow aangemaakt. Het succespad van de workflow is Onboard → NetBox-inventaris-sync → Verify. AWX zelf is een centrale configuratie met een enkel exemplaar op knooppunt 1. Oordeel niet over fysiek gedistribueerde HA op basis van uitsluitend het ha-veld van een API-ping.

9. PXE en Kickstart voor het installeren van lege servers

Bij configuratie in een online netwerk

Valideer de officiële Rocky Minimal ISO en stel de installatieboom beschikbaar op /var/www/html/rocky in Provision. De werkelijke ISO bevat Minimal/repodata. Het direct gebruiken van de BaseOS/AppStream-paden van de dvd resulteert in een 404-fout. DHCP wijst alleen goedgekeurde MAC-adressen per omgeving toe aan .101.

fml-prod-app-01 : 08:00:27:a0:20:65 → 10.77.20.101
fml-dev-app-01  : 08:00:27:a0:30:65 → 10.77.30.101
fml-stg-app-01  : 08:00:27:a0:40:65 → 10.77.40.101

Op de VirtualBox van deze pc werkte BIOS + officiële ipxe-legacy.iso tot aan DHCP → HTTP kernel/initrd → Kickstart. Het iPXE-bestand is het opstartmedium om de netwerkinstallatie te starten, en de OS-pakketten worden opgehaald van Provision. De nieuwe VM wordt gemaakt met een lege schijf van 32 GiB, 4 GiB installatie-RAM en 1 vCPU, en wordt na de installatie teruggebracht tot 1 GiB.

Het %pre-gedeelte van Kickstart staat partitionering uitsluitend toe na verificatie van het MAC-adres, de VirtualBox-identificatie in DMI, de aanwezigheid van /dev/sda en het ontbreken van een schijfhandtekening. Het root-wachtwoord wordt vergrendeld en de openbare sleutel van labadmin, sshd, sudo, chrony en firewalld worden geconfigureerd. De SSH host key die door %post wordt achtergelaten, wordt vergeleken met vertrouwde VM-consolelogboeken en geregistreerd. Onbekende host keys worden niet automatisch geaccepteerd.

Bij configuratie in een geïsoleerd netwerk

Breng dezelfde ISO, opstartbestanden en Kickstart over naar de interne HTTP-server. Het doelsysteem heeft geen externe netwerkinterface en ontvangt DNS, NTP en pakketten van Provision in dezelfde omgeving. Door tevens een interne repository voor Agent 2 te configureren, kunnen basisinstellingen worden uitgevoerd zonder externe RPM-repositories.

Bij toepassing op fysieke servers mag de VirtualBox DMI guard niet zomaar worden verwijderd en uitgevoerd. Goedgekeurde werkelijke serial/BMC/MAC, RAID-logische schijven en het doelschijf-WWN, UEFI/Secure Boot en NIC-stuurprogramma’s moeten afzonderlijk worden gekoppeld, waarna de reikwijdte van de schijfvernietiging moet worden beoordeeld. Het werkelijke installatiebewijs in dit artikel is een VM en mag niet worden gerepresenteerd als verificatieresultaten op fysieke serverhardware.

10. Asset-API, inventaris en bewaking

Bij configuratie in een online netwerk

Wijs de vereiste machtigingen voor VM/Device/Interface/IP/catalogus toe aan het schrijfaccount van NetBox en sta uitsluitend lezen toe voor het inventarisaccount. Het aanmaken van initiële aangepaste velden en catalogi wordt uitgevoerd via een afzonderlijke bootstrap. v2-tokens in NetBox 4.7 hebben de indeling Bearer nbt_. Het Zabbix-automatiseringsaccount beperkt de beheerde hostgroepen en API-methoden en stelt een vervaldatum in voor het token.

plugin: netbox.netbox.nb_inventory
api_endpoint: https://netbox.fullmoon.test
token:
  type: Bearer
  value: "{{ lookup('env', 'NETBOX_TOKEN') }}"
validate_certs: true
query_filters:
  - tag: auto
  - status: active

Tijdens de verzamelstap wordt de Python-collector geïmplementeerd in een willekeurige tijdelijke map, die na uitvoering altijd wordt verwijderd. Vergelijk de werkelijke hostnaam, de machine-ID en de beheer-NIC/IP van het doel met de goedgekeurde inventaris. Als de waarden afwijken of als het bestaande IP-adres aan een ander asset is toegewezen, stop dan voordat u wijzigingen aanbrengt in NetBox. Neem geen API-tokens of de volledige /proc-omgeving op in de verzamelresultaten.

API-taken worden uitgevoerd in de AWX EE met delegate_to: localhost. Als de ansible_become-variabele voor het doel wordt doorgegeven aan lokale taken, kan dit mislukken doordat sudo binnen de EE wordt gezocht; vermeld dit daarom als volgt.

delegate_to: localhost
become: false
vars:
  ansible_become: false
  ansible_python_interpreter: "{{ ansible_playbook_python }}"

De volgorde van registratie is: werkelijke asset/Interface/IPAM → Zabbix host/Proxy/template → NetBox inventory source sync → verificatie van de doelbaseline en de nieuwste Zabbix-gegevens. Aangezien NetBox- en Zabbix-API’s geen enkele database-transactie vormen, wordt heruitvoering na gedeeltelijk succes ondersteund en worden er geen compenserende acties ondernomen om met succes geregistreerde assets blindelings te verwijderen.

Bij configuratie in een geïsoleerd netwerk

Aangezien de API-code uitsluitend gebruikmaakt van interne HTTPS, blijft de werkwijze hetzelfde. De CA van de EE, collections, Python-bibliotheken, vastgelegde SSH host keys en Git-commits moeten allemaal zijn geïmporteerd. Tijdens de uitvoering van de Job worden er geen pakketten gedownload van Galaxy of pip. Geef op het doel uitsluitend de repositories fullmoon-minimal en fullmoon-zabbix op om de Agent te installeren.

ServerActive=10.77.20.10:10051
Hostname=fml-prod-app-01
TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=fml-prod-app-01
TLSPSKFile=/etc/zabbix/agent.psk

Houd het PSK-bestand eigendom van zabbix met permissie 0400 en laat geen waarden achter in de AWX-logboeken. Controleer of er dubbele beheerhosts zijn en verifieer de lastclock/lastvalue van het nieuwste item. Behandel de bewerking niet als voltooid op basis van uitsluitend het antwoord op het aanmaken van de host.

Voltooiing van de installatie en automatische koppeling van de Workflow

fullmoon-postinstall.timer op centrale knooppunt 1 bevestigt de voltooiing van de installatie van het goedgekeurde doel. SSH verloopt via de betreffende Bastion en verifieert de vastgelegde host key. Als /var/lib/fullmoon-lab/pxe-installed, de hostnaam en de machine-ID overeenkomen, wordt de workflow uitgevoerd met Project sync → bootstrap inventory sync → een opgegeven doel als limit. Job-ID en status worden achtergelaten in state.json, dat uitsluitend leesbaar is voor root.

De aanvankelijk aangemaakte SSH host key wordt vergeleken met de vertrouwde VirtualBox serial console en toegevoegd aan de goedkeuringslijst. Vóór deze identiteitsgoedkeuring wacht de controller. Onbekende sleutels worden niet automatisch geaccepteerd. Vervolgens worden de detectie van de installatievoltooiing, de API-registratie en de bewakingsverificatie automatisch uitgevoerd. Op fysieke servers moet deze identiteitsregistratie worden gekoppeld aan de BMC-console of de procedure voor het uitgeven van een SSH-CA binnen de organisatie.

systemctl status fullmoon-postinstall.timer
journalctl -u fullmoon-postinstall.service --since '-30min'
# Geslaagd: launched → AWX workflow ID → completed
# Mislukt: manual_review_required. Registreer niet automatisch opnieuw voordat de oorzaak is gecontroleerd.

Deze controller en AWX bevinden zich op ops01, waardoor nieuwe onboardings stoppen tijdens een storing op dat knooppunt. Als ops02, waar Git zich bevindt, wordt onderbroken, mislukt nieuwe Project-synchronisatie. Als het statusbestand verloren gaat of het proces direct na het uitvoeringsantwoord wordt beëindigd, kan dezelfde workflow opnieuw worden geprobeerd. Daarom is ook de asset-registratie zelf zo geconfigureerd dat deze herhaalbaar is en controleert op dubbele identificatoren en IP-adressen.

11. Verbindingsinformatie en eenvoudige beheerhandleiding

Functie Verbindingspad Operationele controle
NetBox https://netbox.fullmoon.test VM/Device, interface, primair IP, collection-status
Zabbix https://zabbix.fullmoon.test HA-status, laatste toegang proxy, meest recente hostgegevens
AWX https://awx.fullmoon.test Projectrevisie, inventory update, workflow-/jobresultaten
Git ssh://fmlgit@git.fullmoon.test/srv/git/fullmoon-automation.git Alleen-lezen SCM-synchronisatie
Beheer-SSH loopback 22031~22038 Authenticatie via openbare labadmin-sleutel van de betreffende VM
Doel-SSH Via omgevingseigen Bastion Goedgekeurde host key en beperking tot .101:22

Dagelijkse inspecties worden uitgevoerd in de volgorde: tijdsynchronisatie/schijf/geheugen → DB/Redis-rol → App/Worker → HA/VIP → Proxy → werkelijke agentgegevens → recente AWX-fouten. Controleer niet uitsluitend of containers de status Up hebben.

df -h
free -m
chronyc tracking
docker ps --format '{{.Names}} {{.Status}}'
k3s kubectl -n awx get pods
systemctl is-active haproxy keepalived

Bij het toevoegen van een nieuwe server moeten eerst de goedgekeurde inventaris, MAC/IP, Bastion PermitOpen en SSH host key worden geregistreerd en gecommit naar Git. Geef na Project sync uitsluitend die specifieke host op als limit. Controleer het primaire IP-adres en de omgevingsgroep in NetBox voordat het systeem naar productie wordt overgezet. Vervang niet de volledige set actieve servers door een onbeperkt ‘all’-doel.

Het wijzigen van wachtwoorden en het vernieuwen van tokens omvat het gezamenlijk beheren van de geheime opslag, AWX Credentials en de reikwijdte van de serviceherstart. Verlopen tokens, gewijzigde SSH host keys en afwijkende machine-ID’s worden niet automatisch genegeerd. Na een knooppuntstoring wordt de kloon hersteld op basis van het overgebleven primaire knooppunt, en een afgesplitst knooppunt wordt niet willekeurig op schrijven gezet.

12. Afsluiten met back-up, updates en verificatie

Beheer PostgreSQL logische back-ups, NetBox-media, Git-repositories, AWX SECRET_KEY en database, alsmede CA’s, configuraties en geheimen afzonderlijk. Vervang applicatie-consistente back-ups niet uitsluitend door VM-snapshots. Het bestaan van een back-upbestand en het herstellen ervan naar een geïsoleerde database om dezelfde assets uit te lezen zijn twee verschillende verificaties.

Voor updates worden image-tags/digests samen met EE/collections vastgelegd en na verificatie doorgevoerd. NetBox-migraties of grote database-upgrades kunnen mogelijk niet worden hersteld door uitsluitend terug te keren naar de vorige image, dus bereid back-up- en herstelprocedures voor. Maak in geïsoleerde netwerken nieuwe update-importpakketten en checksums aan en bewaar de eerdere verificatiepakketten.

Het oordeel dat de implementatie is voltooid, omvat het registreren van assets, inventory sync, de meest recente bewakingswaarden, heruitvoering, het afwijzen van adresconflicten, failover van services, herstel van de proxybuffer, back-upherstel en installatie op doelen zonder externe communicatie. Voer een onderscheid in het verificatieproject tussen feitelijk uitgevoerde tests en niet-uitgevoerde items.

Aanbevolen lectuur en configuratiematerialen

Originele portfolio · Gids voor het opzetten van een online en geïsoleerd netwerk · Storingsscenario’s en verificatielogboeken · Logboek voor VirtualBox-configuratieproblemen

ZIP met praktijkinstellingen en automatiseringsbronnen · ZIP SHA-256

De openbare ZIP bevat configuratiesjablonen en automatiseringsbronnen. OS-, RPM-, containerimages en credentials zijn niet inbegrepen. Pas deze toe nadat je ze hebt geconfigureerd met je eigen adressen, openbare CA, goedgekeurde SSH-sleutels en geheime opslag.