HTTP-Proxys richtig setzen: Bun, Node, Docker und Kubernetes
In Unternehmensnetzen läuft ausgehender Traffic häufig über einen HTTP-Proxy. Damit ProcessCube®-Komponenten dorthin finden, steuern drei Umgebungsvariablen das Verhalten: HTTP_PROXY, HTTPS_PROXY, NO_PROXY. Die Tücke: Bun und Node gehen unterschiedlich damit um, und in Docker und Kubernetes kommen Fallstricke dazu.
Welche Komponente läuft worauf?
Welche Regeln gelten, hängt von der Laufzeit-Basis der jeweiligen Komponente ab:
| Komponente | Basis | maßgeblicher Abschnitt |
|---|---|---|
| Cuby | Bun | Bun |
ProcessCube CLI (pc) | Bun | Bun |
| Engine | Node.js | Node |
| Low-Code | Node.js | Node |
| App-SDK | Node.js | Node |
| Studio | Node.js (Electron) | Node |
Faustregel: Bun-Komponenten verstehen die Proxy-Variablen sofort, Node-Komponenten brauchen NODE_USE_ENV_PROXY=1 (oder eine Bibliothek).
Die drei Variablen
| Variable | Wofür |
|---|---|
HTTP_PROXY | Proxy für http://-Requests |
HTTPS_PROXY | Proxy für https://-Requests (der Großteil) |
NO_PROXY | Komma-Liste von Hosts/Domains/CIDRs, die direkt (ohne Proxy) erreicht werden |
- Der Wert von
HTTPS_PROXYist meist selbst einehttp://-URL — der Proxy spricht HTTP-CONNECT, nicht TLS. - Groß-/Kleinschreibung: Viele Werkzeuge lesen sowohl
HTTPS_PROXYals auchhttps_proxy. Im Zweifel beide setzen.
NO_PROXY ist nicht standardisiert — das Matching unterscheidet sich je nach Runtime, und das ist der häufigste Stolperstein:
| Runtime | NO_PROXY-Matching |
|---|---|
Node (NODE_USE_ENV_PROXY) | nur Hostname: exakter Treffer oder .suffix/Wildcard (Endung). Kein CIDR. |
| Bun | hostnamenbasiert (kein bestätigtes CIDR) |
Go-Tools (k3s, containerd, kubectl) | Hostname/Suffix und CIDR (10.0.0.0/8) |
CIDR (10.42.0.0/16) gehört nicht in das NO_PROXY einer Node- oder Bun-Anwendung — es würde dort nur als literaler Hostname „10.42.0.0/16” interpretiert und nie greifen. Node/Bun matchen den Hostnamen der Ziel-URL, nicht die aufgelöste IP. In Kubernetes also auf DNS-Suffixe setzen (.svc.cluster.local), nicht auf Pod-/Service-CIDRs. CIDR ist Sache der Go-basierten Cluster-Komponenten (siehe unten).
Bun — versteht die Variablen nativ
Bun respektiert HTTP_PROXY / HTTPS_PROXY / NO_PROXY in fetch() und bei bun install ohne weiteres Zutun. Da die ProcessCube® CLI ein Bun-Single-Binary ist, gilt das direkt für pc:
export HTTPS_PROXY=http://proxy.firma.local:8080
export NO_PROXY=localhost,127.0.0.1,.firma.local
pc engine login --url https://engine.extern.example.com- Per-Request lässt sich der Proxy auch über die
proxy-Option vonfetch()setzen. - Seit Bun 1.3.9 wird
NO_PROXYauch dann ausgewertet, wenn ein Proxy explizit über dieproxy-Option übergeben wird.
Node — opt-in (Node 24) oder Bibliothek
Anders als Bun ignoriert Nodes eingebautes fetch / node:http / node:https die Proxy-Variablen standardmäßig.
Mit NODE_USE_ENV_PROXY
NODE_USE_ENV_PROXY=1 (oder das Flag --use-env-proxy) aktiviert, dass die Variablen ausgewertet werden — für fetch() ab Node 24.0 bzw. 22.21 (LTS-Backport), für node:http/node:https ab 24.5 bzw. 22.21. Noch als experimentell markiert, daher opt-in:
NODE_USE_ENV_PROXY=1 \
HTTPS_PROXY=http://proxy.firma.local:8080 \
NO_PROXY=localhost,127.0.0.1 \
node app.jsHTTPS_PROXY greift nur für https://-Ziele. Interne Engine-/Authority-URLs wie http://localhost:56000 fallen unter HTTP_PROXY — meist gehören sie aber in NO_PROXY.
Docker
Build
Für Paket-Installationen während des Builds (npm/bun install) die Proxy-Werte als Build-Args übergeben (HTTP_PROXY, HTTPS_PROXY, NO_PROXY sind vordefinierte Build-Args):
docker build \
--build-arg HTTPS_PROXY=http://proxy.firma.local:8080 \
--build-arg NO_PROXY=localhost,127.0.0.1,.firma.local \
-t meine-app .NO_PROXY muss Container-/Service-Namen und localhost enthalten, damit Container-zu-Container-Verkehr (z. B. Engine ↔ Authority ↔ Postgres) nicht über den Proxy läuft. Der Image-Pull des Docker-Daemons ist davon getrennt und wird über die Daemon-Konfiguration (~/.docker/config.json bzw. systemd) gesteuert.
Kubernetes / k3s
In Pods werden die Variablen am saubersten über eine ConfigMap gesetzt und per envFrom eingebunden:
apiVersion: v1
kind: ConfigMap
metadata:
name: proxy-env
data:
HTTP_PROXY: "http://proxy.firma.local:8080"
HTTPS_PROXY: "http://proxy.firma.local:8080"
# App-Pods (Node/Bun) matchen per Hostname → DNS-Suffixe, KEINE CIDRs
NO_PROXY: "localhost,127.0.0.1,.svc,.svc.cluster.local,.cluster.local"# Deployment (Auszug)
spec:
template:
spec:
containers:
- name: engine
envFrom:
- configMapRef:
name: proxy-env
env:
- name: NODE_USE_ENV_PROXY # Engine/Low-Code laufen auf Node 24
value: "1"Der häufigste Fehler: NO_PROXY zu knapp — dann läuft auch In-Cluster-Verkehr (API-Server, Services, DNS) über den Proxy und bricht. Entscheidend ist, wer den Verkehr macht:
- App-Pods (Node/Bun) sprechen Services über DNS an (
authority.processcube-prd.svc.cluster.local). Da das Matching hostnamenbasiert ist, decken die DNS-Suffixe.svc,.svc.cluster.local,.cluster.local(+localhost) den internen Verkehr ab. CIDRs bringen hier nichts (s. o.). - CIDRs (Pod-/Service-Range, k3s-Defaults
10.42.0.0/16/10.43.0.0/16) greifen nur bei den Go-basierten Komponenten — und die verwalten das selbst (siehe k3s unten).
Für k3s selbst (Image-Pulls über containerd, Go) gehören die Proxy-Variablen in die systemd-Env-Datei:
# /etc/systemd/system/k3s.service.env
HTTP_PROXY=http://proxy.firma.local:8080
HTTPS_PROXY=http://proxy.firma.local:8080
NO_PROXY=localhost,127.0.0.1k3s ergänzt die Cluster-internen Pod-/Service-CIDRs und die Cluster-DNS-Domain automatisch zu NO_PROXY seines eigenen Prozesses — die obige Liste reicht daher für k3s aus. Für die Anwendungs-Pods gilt das jedoch nicht; dort die vollständige NO_PROXY-Liste (siehe ConfigMap oben) selbst pflegen.
Checkliste
- ✅
HTTPS_PROXYgesetzt (nicht nurHTTP_PROXY) — der meiste Traffic isthttps://. - ✅ Proxy-Wert als
http://…-URL (nichthttps://). - ✅ Node:
NODE_USE_ENV_PROXY=1(Node 24) oder eine Proxy-Bibliothek — sonst wirkungslos. - ✅
NO_PROXYumfasst interne Ziele:localhost, Engine/Authority, Service-Namen, in k8s die Cluster-DNS-Suffixe (.svc.cluster.local). CIDRs nur für Go-Tools (k3s/containerd), nicht für Node/Bun. - ✅ Im Zweifel Groß- und Kleinschreibung der Variablen setzen.
Weiterführend
- Node.js: Enterprise Network Configuration —
NODE_USE_ENV_PROXYundNO_PROXY-Matching-Regeln (Hostname/Suffix, kein CIDR) - Node.js 24 Release Notes
- Bun: Proxy HTTP requests using
fetch()