Proxmox – PVE aan datacenter toevoegen

Uitgangspositie:

  • Debian geinstalleerd met gewenste hostname
  • Proxmox PVE daar aan toegevoegd
  • PVE draait ‘standalone’, niet als deel van een bestaand datacenter
  • Netwerk: DHCP-pool adres

Doelsituatie:

  • De node heeft ‘t juise (vaste) IP
  • De node heeft een LetsEncrypt certificaat
  • De node maakt deel uit van het bestaande datacenter

Stappen voor IP-adressering

  • DHCP inrichten als fallback
    • reservering maken voor IPMI/iKVM/iLO/DRAC in de IPMI-range
    • reservering maken voor ‘t MAC van eth0 of bond0, afhankelijk van waarop de kabel aangesloten is, in de hypervisor-range
  • Reboot, verifieer dat:
    • IPMI beschikbaar is op het gereserveerde adres
    • PVE beschikbaar is op het gereserveerde adres
  • PVE statisch IP toekennen
    • Via GUI in het menu van de node: System –> Network –> Create –> Linux Bridge
      • Name : vmbr0
      • IPv4/CIDR : hetzelde adres als in de reservering
      • Gateway (IPv4) : gateway van ‘t netwerk
      • IPv6/CIDR : het juiste adres uit de hypervisor range
      • Autostart : ja
      • VLAN aware : indien nodig
      • Bridge ports : minstens een van de poorten waar een kabel in zit, meestal eth0 of enpNs0
    • OK in de popup, en “Apply Configuration” in het netwerkmenu om de pending changes te activeren.
      • De gewijzigde configuratie is nu ook zichtbaar via /etc/network/interfaces
  • /etc/hosts : corrigeer het IP adres ; het adres dat hier genoemd staat is het hoofd-adres van deze node, en is ook het adres dat getoond wordt als welkomstbericht op de locale tty / CLI

Reboot om te verifieren dat ook na een reboot alles werkt als verwacht.

Stappen voor datacenter

Het ligt voor de hand om na configuratie van de IP-adressen, de TLS-certificaten in orde te maken. Een deel van de configuratie voor ACME is echter op datacenter-niveau, en is dus al beschikbaar op het doel-datacenter.

Het is daarom efficienter om de nieuwe host op IP en self-signed certificate aan het datacenter toe te voegen, en daarna pas via ACME een certificaat voor de hostname te genereren.

  • Via een node in het bestaande datacenter:
    • Datacenter –> Cluster –> “Join Information”
      • Kopieer de gegevens in de popup
  • Via de nieuwe node:
    • Datacenter –> Cluster –> “Join Cluster”
      • Vink “Assisted join” aan
      • Plak de gekopieerde gegevens, OK en wachtwoord van de _andere_ node invullen
      • OK
  • Log opnieuw in op de nieuwe node

Stappen voor certificaten

Uitgebreider stappenplan: de korte instructies (ouder) of die met plaatjes (nieuwer)

De basisinstellingen zijn al gedaan op het bestaande datacenter waar de node nu deel van uitmaakt. Maak eventueel een nieuw account aan onder datacenter –> ACME –> Accounts, of hergebruik een bestaand account.

  • Buiten PVE om, bij de DNS provider van het domein: maak de node bekend in DNS (ook voor private IP’s), anders werkt de ACME DNS-plugin niet
  • Daarna, in het menu van de node:
  • System –> Certificates –> ACME-deelscherm
    • Using account :
      • Edit
      • kies de zojuist aangemaakte, of een bestaande; begin met een account op Letsencrypt Staging
      • Apply
    • Add (popup)
      • Challenge Type : DNS
      • Plugin : de voor DNS geconfigureerde plugin
      • Domain : de FQDN van de node
      • OK
    • “Order Certificates Now”
    • Popup, zonder fouten, als het meezit
    • Fouten? Dan uitzoeken/troubleshoot. Geen fouten? Dan account vervangen door een non-staging account
  • ACME: edit account, switch naar productie-account
  • Opnieuw : “Order Certificates Now”

Dat was ‘t. De nieuwe node is nu beschikbaar in het datacenter.

Print this entry

Let’s Encrypt ACME op PBS

Na automatische update van de certificaten is er een fingerprint mismatch tussen PVE en PBS.

De oplossing is het verwijderen van de fingerprint in de opslagconfiguratie op PVE (/etc/pve/storage.conf). Controleer daar meteen of de locatie via de FQDN of via het IP gerefereerd wordt: zonder fingerprint geeft IP een foutmelding. Na het verwijderen van de fingerprint is het dus nodig ook het IP te vervangen door de FQDN van PBS in overeenstemming met de hostname in het certificaat:

pbs: markttweak
        datastore bak_sdc
        server 172.26.2.20
        content backup
        fingerprint 2e:30:b5:fa:0f:64:9b:3b:b7:97:c9:07:87:22:9a:49:80:ad:26:48:17:49:6a:a3:16:13:8a:72:1b:7e:61:2c

wordt:

pbs: markttweak
        datastore bak_sdc
        server markttweak.osba.nl
        content backup

De aanpassing van storage.conf wordt (vrijwel) direct opgemerkt door PVE; is het niet nodig een service of een machine opnieuw te starten.

Print this entry

Proxmox ACME voor Let’s Encrypt

Het is telkens weer puzzelen, nu een aantkening voor de volgende keer:

  • Account aanmaken
    • Kan op datacenterniveau, maar ook vanuit de node
    • Ik maak een account per node
  • Challenge-plugin activeren, indien nodig
    • HTTP-01 is het meest gebruikelijk, maar vereist (read only) toegang vanuit Letsencrypt naar de webserver; het werkt zonder plugin
    • DNS-01 verifieert via een TXT record op de DNS server. Zodoende ook te gebruiken voor private IP’s en machines die niet vanuit het publieke Internet te bereiken zijn (of geen webserver hebben draaien). De plugin heeft toegang nodig tot de API van je DNS server om het TXT record te maken.
  • Domein toevoegen
    • Op node-niveau
    • Kies hier ook het te gebruiken account

Account aanmaken, eventueel plugin activeren onder “Datacenter”

Register account

Geef een naam op voor het account, maak een emailalias en vul die in; kies eerst de staging directory, maak als alles goed ingericht is een nieuw account voor de reguliere (production) directory. Ik hergebruik het emailadres.

yunohost user update mailbox_account --add-mailalias letsencrypt_pve_node@osba.nl

Voor de DNS-01 plugin is de naam vrij te kiezen; de delay laat ik op de default staan. De DNS API moet natuurlijk die van je DNS server zijn. Mijn DNS loopt via dns.he.net (HE), de API data zijn “HE_Username=accountnaam”, “HE_Password=accountwachtwoord”. Gezien de gevoeligheid van die gegevens, geef ik de voorkeur aan HTTP-01.

Certificaat toevoegen onder “Certificates”

De bovenste helft van het scherm is al gevuld met de self-signed certificaten van Proxmox. Kies in de onderste helft , achter ACME, eerst het zojuist aangemaakte account en klik apply:

Voeg een te certificeren domein toe met de “Add”-knop. Zonder instellen van de DNS-01 plugin, wordt automatisch voor HTTP-01 als methode gekozen, daaronder geef je het domein op:

Klik nu “Order certificates”. Succesvol? Dan een account voor productie aanmaken, en opnieuw een account aanvragen.

CLI opdrachten

Tekstopdrachten om hetzelfde te bereiken:

  • pvenode acme account register pve-node-staging letsencrypt_pve_node@osba.nl
  • pvenode acme config set --acme accoun=pve-node-staging domains=pve-node.osba.nl
  • pvenode acme cert order
  • systemctl restart pveproxy

PVEproxy restart

Let op: na het aanvragen van certificaten, wordt de GUI herstart. Zolang er enkel een self-signed certificaat is, of enkel de staging gedraaid heeft, komt de browser waarschijnlijk (opnieuw) met een beveiligingswaarschuwing.

Na aanvragen van een certificaat via ACME productie kan je inloggen via de domeinnaam.

Print this entry

Proxmox TLS certificaat via LetsEncrypt

Kort stappenplan:

  • Emailalias aanmaken voor het account
  • Account via certificates/ACME/create account
  • Accountnaam = nodenaam + staging, email = alias, directory = staging v2
  • Domein voor certificaat toevoegen op datzelfde scherm, certificates/ACME/Add
  • Publiek toegankelijk? Dan werkt HTTP als challenge makkelijk. Interne domeinnamen? Dan is DNS eenvoudiger.
  • Klaar? “Order Certificates Now”
  • Alles OK? Dan nieuw account maken met de productie-URL
    • Ga naar het tweede tabje, “ACME Accounts”
    • “Add” onder accouns
    • Gebruik nu nodenaam zonder staging als toevoeging, en “Let’s Encrypt V2” als directory
    • Terug naar tabje “Certificates”
    • Ververs de pagina, kies nu “Using Account:” de zojuist toegevoegde. Niet beschikbaar? Dan pagina (nogmaals) verversen.
    • “Order Certificates Now”
    • En klaar!

De node is nu bereikbaar onder de domeinnaam, zonder een beveiligingsuitzondering in je browser te maken.

Print this entry