138 lines
5.3 KiB
Markdown
138 lines
5.3 KiB
Markdown
### Kort antwoord
|
||
- Ja, je kunt kubectl port-forward als een systemd service draaien op je Linux-machine.
|
||
- Ja, je kunt eender welke lokale poort gebruiken (niet beperkt tot 8080), via het formaat LOCAL:REMOTE (bijv. 18080:80).
|
||
- Ja, je kunt de lokale forward achter Nginx Proxy Manager (NPM) zetten. Let wel op extra beveiliging als je dit publiek maakt.
|
||
|
||
---
|
||
|
||
### 1) Port-forward als Linux service (systemd)
|
||
Hiermee start de forward automatisch bij boot en herstart hij bij fouten.
|
||
|
||
#### Benodigd
|
||
- Werkende kubeconfig voor jouw user (zodat `kubectl` verbinding kan maken met je cluster).
|
||
- De juiste servicenaam (bijv. `pgadmin-pgadmin4`). Controleer met:
|
||
- `kubectl -n tools get svc`
|
||
|
||
Onderstaande voorbeelden binden op localhost (127.0.0.1) voor veiligheid. Pas de servicenaam en poorten aan naar jouw situatie.
|
||
|
||
#### Stap 1: Wrapper-script
|
||
Maak `/usr/local/bin/pf-pgadmin.sh`:
|
||
```bash
|
||
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# Optioneel, als je kubeconfig niet in ~/.kube/config staat:
|
||
# export KUBECONFIG=/home/<user>/.kube/config
|
||
|
||
NAMESPACE="tools"
|
||
SERVICE="pgadmin-pgadmin4" # pas aan indien anders
|
||
LOCAL_PORT="18080" # kies je eigen lokale poort
|
||
REMOTE_PORT="80" # servicepoort in de cluster
|
||
|
||
# Bind alleen op localhost voor veiligheid
|
||
exec kubectl -n "${NAMESPACE}" port-forward --address=127.0.0.1 "svc/${SERVICE}" "${LOCAL_PORT}:${REMOTE_PORT}"
|
||
```
|
||
Maak uitvoerbaar:
|
||
```bash
|
||
sudo chmod +x /usr/local/bin/pf-pgadmin.sh
|
||
```
|
||
|
||
#### Stap 2: systemd unit
|
||
Maak `/etc/systemd/system/pgadmin-portforward.service`:
|
||
```ini
|
||
[Unit]
|
||
Description=Kubernetes port-forward for pgAdmin (tools namespace)
|
||
After=network-online.target
|
||
Wants=network-online.target
|
||
|
||
[Service]
|
||
User=<jouw-linux-user>
|
||
Group=<jouw-linux-user>
|
||
# Eventueel: Environment=KUBECONFIG=/home/<jouw-linux-user>/.kube/config
|
||
ExecStart=/usr/local/bin/pf-pgadmin.sh
|
||
Restart=always
|
||
RestartSec=3
|
||
KillSignal=SIGINT
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
Vervang `<jouw-linux-user>` door je gebruikersnaam.
|
||
|
||
Activeer en start:
|
||
```bash
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl enable pgadmin-portforward
|
||
sudo systemctl start pgadmin-portforward
|
||
sudo systemctl status pgadmin-portforward
|
||
```
|
||
Logs volgen:
|
||
```bash
|
||
journalctl -u pgadmin-portforward -f
|
||
```
|
||
Hierna staat pgAdmin lokaal op http://127.0.0.1:18080.
|
||
|
||
Beveiligingstip: laat `--address=127.0.0.1` staan. Wil je LAN-toegang, overweeg dan `--address=0.0.0.0` maar beveilig met firewall/IP-allowlist op de host.
|
||
|
||
---
|
||
|
||
### 2) Andere lokale poort gebruiken
|
||
Je kunt de lokale poort zelf kiezen met `LOCAL:REMOTE`:
|
||
- Voorbeeld: 18080 lokaal naar 80 in de cluster:
|
||
- `kubectl -n tools port-forward svc/pgadmin-pgadmin4 18080:80`
|
||
- Je kunt meerdere forwards tegelijk draaien zolang elke lokale poort uniek is.
|
||
|
||
---
|
||
|
||
### 3) Beschikbaar maken via Nginx Proxy Manager (NPM)
|
||
Ik ga uit van Nginx Proxy Manager (de reverse proxy UI). Als je Node Package Manager bedoelde, laat het weten.
|
||
|
||
Doel: NPM publiceert een hostnaam en reverse-proxy’t naar jouw lokale forward op 127.0.0.1:18080.
|
||
|
||
Voorwaarden:
|
||
- De port-forward draait stabiel (bijv. via systemd op poort 18080).
|
||
- NPM draait op dezelfde host (aanbevolen) of kan de host bereiken waar de forward draait.
|
||
|
||
Stappen in NPM:
|
||
1) Login in NPM.
|
||
2) Add Proxy Host:
|
||
- Domain Names: bijv. `pgadmin.local.mijnlan` (LAN) of een publiek domein (alleen als strikt noodzakelijk).
|
||
- Scheme: `http`
|
||
- Forward Hostname/IP: `127.0.0.1` (als NPM op dezelfde host draait) of het LAN-IP van de host met de port-forward.
|
||
- Forward Port: `18080`
|
||
3) SSL:
|
||
- LAN: vaak geen SSL nodig.
|
||
- Publiek: vraag Let’s Encrypt aan in NPM, zet Force SSL/HTTP2/HSTS aan.
|
||
4) Access List / Security:
|
||
- Sterk aanbevolen: IP-allowlist, Basic Auth of SSO voor publieke toegang.
|
||
|
||
Belangrijke waarschuwing:
|
||
- Een publieke NPM-proxy naar pgAdmin vergroot het aanvalsoppervlak. Gebruik sterke admin-credentials (heb je), overweeg extra Basic Auth/SSO, en houd pgAdmin up-to-date.
|
||
|
||
Alternatief voor publieke toegang:
|
||
- Cloudflared/Zero Trust tunnel of inlets tunnel naar een subdomein met policies.
|
||
- Of later een Kubernetes Ingress met dedicated host + TLS, zoals eerder besproken.
|
||
|
||
---
|
||
|
||
### Alternatieven en tips
|
||
- SSH-tunnel: kan ook, maar kubectl port-forward is vaak het eenvoudigst (gebruikt de K8s API).
|
||
- kubefwd: handig als je meerdere services tegelijk lokaal wilt resolven.
|
||
- Teamtoegang: liever een VPN (Tailscale/WireGuard) dan publieke NPM. Bind de forward op 127.0.0.1 en laat teamleden via VPN op je host browsen.
|
||
|
||
---
|
||
|
||
### Troubleshooting
|
||
- Niet-startende service: bekijk `journalctl -u pgadmin-portforward -f`. Vaak is kubeconfig-onbereikbaar de oorzaak; zet `Environment=KUBECONFIG=...` in de unit of export in het script.
|
||
- Verkeerde servicenaam: check met `kubectl -n tools get svc` en pas aan in je script.
|
||
- Poort bezet: kies een andere lokale poort (bijv. 18081).
|
||
- NPM werkt niet: controleer of NPM dezelfde host is (dan 127.0.0.1 gebruiken), anders gebruik het LAN-IP; check firewall.
|
||
|
||
---
|
||
|
||
### Samenvatting
|
||
- Service: ja, via systemd; voorbeeldscript en unit hierboven.
|
||
- Andere poort: ja, stel de linkerzijde van LOCAL:REMOTE in (bijv. 18080:80).
|
||
- NPM: ja, reverse proxy naar 127.0.0.1:18080; voeg extra beveiliging toe als je het publiek maakt.
|
||
|
||
Als je wilt, kan ik het script en de unit exact invullen met jouw servicenaam en gewenste poort. Stuur me de output van `kubectl -n tools get svc` en je Linux-gebruikersnaam. |