Ein privates Netzwerk verbinden (VPN)
Ein typisches Einsatzszenario für ein VPN ist eine Anwendung auf Codesphere, die auf Dienste zugreifen muss, die in einem privaten Netzwerk gehostet werden. Ein Beispiel dafür ist die Verbindung zu einer On-Premise-Datenbank im eigenen Rechenzentrum des Unternehmens. Durch das Einrichten einer VPN-Verbindung kann die Anwendung, die in Codesphere läuft, sicher mit dem privaten Netzwerk verbunden werden, sodass die Anwendungen mit internen Datenbanken, APIs oder anderen Diensten kommunizieren können, als befänden sie sich im selben lokalen Netzwerk.
Diese Anleitung führt durch das Erstellen einer VPN-Konfiguration und das Verbinden von Codesphere-Workspaces mit einem VPN-Gateway über IPsec. Nach der Einrichtung baut jede Replica des Workspace-Dienstes eine eigene individuelle VPN-Verbindung zum VPN-Gateway auf.
Host-to-Site-Architektur
Jeder Server im Workspace fungiert als eigenständiger VPN-Host/Client und baut eine eigene sichere Verbindung zum privaten Netzwerk-Gateway auf. Dabei handelt es sich nicht um ein klassisches Site-to-Site-VPN, sondern jede Replica eines Workspace-Dienstes unterhält ihren eigenen VPN-Tunnel. Diese Architektur ist aufgrund der Multi-Tenant-Infrastruktur von Codesphere notwendig und stellt eine ordnungsgemäße Netzwerkisolierung und Sicherheit zwischen den verschiedenen Workspaces sicher.
Entsprechende barrierefreie Textbeschreibung
Voraussetzungen & Einschränkungen
Voraussetzungen:
- Das VPN-Gateway muss aus dem öffentlichen Internet erreichbar sein und eine statische öffentliche IP-Adresse besitzen.
- Das Gateway muss IPsec mit IKEv1 oder IKEv2 unterstützen.
- Der Pre-Shared Key (PSK) muss auf der Codesphere-VPN-Konfiguration und dem Gateway identisch konfiguriert sein.
- Die IKE- und ESP-Cipher-Suites müssen auf beiden Seiten exakt übereinstimmen.
Einschränkungen:
- Jede Workspace-Replica baut ihren eigenen individuellen VPN-Tunnel zum Gateway auf. Das Gateway muss so konfiguriert sein, dass es mehrere gleichzeitige Verbindungen von unterschiedlichen Quell-IPs akzeptiert.
- Dies ist erforderlich, um das dynamische Hinzufügen und Entfernen von Anwendungsdiensten und deren Replicas zu unterstützen.
- Es handelt sich um ein Host-to-Site-Setup, nicht um Site-to-Site. Codesphere-Workspaces fungieren als VPN-Clients, nicht als Netzwerk-Peer.
- Das Ändern einer VPN-Konfiguration startet den VPN-Dienst auf allen verbundenen Workspaces neu, was zu einer kurzen Netzwerkunterbrechung führt.
- Es wird empfohlen, eine zweite VPN-Konfiguration mit einem duplizierten Workspace zu verwenden, um Änderungen ohne Ausfallzeit zu ermöglichen.
Beispiel-Gateway-Konfiguration
Das VPN-Gateway muss so konfiguriert werden, dass es eingehende IPsec-Verbindungen von Codesphere-Workspace-Replicas akzeptiert.
Nachfolgend ein Beispiel für eine strongSwan-Konfiguration (ipsec.conf), die mit dem VPN-Setup von Codesphere kompatibel ist.
conn workspaces
keyexchange=ikev1
type=tunnel
authby=psk
forceencaps=yes
ike=aes256-sha256-modp2048
esp=aes256-sha256-modp2048
ikelifetime=1h
leftid=1.2.3.4 # Öffentliche IP des Gateways
left=%defaultroute
lifetime=8h
leftsubnet=0.0.0.0/0
right=%any
rightsourceip=10.200.0.0/24 # Die interne Quell-IP, die im Tunnel für den entfernten Peer verwendet wird.
auto=add
leftbezieht sich auf das Gateway (die eigene Seite).leftsubnet=0.0.0.0/0erlaubt dem Gateway, den gesamten Verkehr über den Tunnel zu routen. Im privaten Netzwerk ist dies üblicherweise das Subnetz des eigenen privaten Netzwerks.right=%anyakzeptiert Verbindungen von jeder Quell-IP, was erforderlich ist, da jede Workspace-Replica von einer anderen IP aus verbinden kann.rightsourceipdefiniert den IP-Pool, der verbindenden Codesphere-Clients zugewiesen wird.
Die Konfiguration erstellen

- Navigiere zum Tab VPNs im Team-Dashboard.
- Klicke auf die Schaltfläche + Create VPN.

- Gib einen Namen für die Verbindung ein.
- Gib den Pre-Shared Key ein (dieser muss mit dem entfernten Gateway übereinstimmen).
- Konfiguriere die IKE- und ESP-Einstellungen (Version, Lifetime, Cipher Suites).
Übereinstimmung der Konfiguration
Die IKE- und ESP-Einstellungen müssen exakt mit der Konfiguration der externen Firewall bzw. des VPN-Geräts übereinstimmen. Nicht übereinstimmende Sicherheitsphasen sind die häufigste Ursache für Verbindungsfehler.
- Suche den Abschnitt „Network Settings“.
- Gib die Peer IP ein (die öffentliche IP des VPN-Gateways).
- Gib das/die Peer-Subnetz(e) an.
CIDR-Notation
Verwende die Standard-CIDR-Notation (z. B. 10.250.0.0/24) für die privaten IP-Bereiche, auf die über den Tunnel zugegriffen werden soll.
Achte darauf, nicht den gesamten Verkehr (0.0.0.0/0) über den Tunnel zu routen, da dies interne Codesphere-Funktionen und den Zugriff auf andere Dienste beeinträchtigen würde.
- Speichere die Konfiguration.
Workspaces verbinden

- Klicke auf den Namen des neu erstellten VPNs, um die Details zu öffnen.
- Wähle den Tab Connected Workspaces.
- Verwende das Dropdown-Menü Add Workspaces, um die Ziel-Landscapes auszuwählen, die mit diesem VPN verbunden werden sollen.
Dienstunterbrechung
Das Ändern der Konfiguration startet den VPN-Dienst auf allen verbundenen Workspaces neu. Dies kann zu einer kurzen Netzwerkunterbrechung bestehender Verbindungen führen.
Verbindung prüfen
Sobald die Workspaces verbunden sind, sollte der Tunnel getestet werden, um sicherzustellen, dass der Datenverkehr korrekt geroutet wird.
- Öffne das Terminal in der Codesphere-IDE.
- Sende einen Ping an eine private IP-Adresse innerhalb des zuvor definierten Peer-Subnetzes.
- Befehlsbeispiel:
ping 10.250.0.5
- Befehlsbeispiel:
- Prüfe, ob der Ping erfolgreich ist, um zu bestätigen, dass der Tunnel aktiv ist und Datenverkehr erfolgreich durchleitet.
Preview Deployments über CI/CD
Preview Deployments können außerdem über die CI-Integrationen für GitHub, Bitbucket und GitLab mit bestehenden VPN-Verbindungen verknüpft werden. So lässt sich in den Entwicklungsumgebungen bequem mit privaten Netzwerken arbeiten (z. B. eingeschränkten On-Premise-Datenbanken oder internen APIs).
Dazu muss lediglich der Name der VPN-Verbindung im Deploy-YAML des Repositories referenziert werden.
- GitHub Actions
- GitLab CI
- Bitbucket Pipelines
Füge den Parameter vpnConfig im Abschnitt with des Deployment-Schritts hinzu.
- name: Deploy
uses: codesphere-cloud/gh-action-deploy@main
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
with:
email: ${{ secrets.CODESPHERE_EMAIL }}
password: ${{ secrets.CODESPHERE_PASSWORD }}
team: 'My Team' # Hier den eigenen Team-Namen eintragen
plan: 'Boost' # Plan für die Anwendung auswählen
onDemand: 'true'
vpnConfig: 'vpnConfigName' # Durch den Namen der VPN-Verbindung ersetzen
Füge die Variable VPN_CONFIG zu den Variablen des Deployment-Skripts hinzu.
codesphere-deploy:
image: ghcr.io/codesphere-cloud/codesphere-monorepo/integrations/gitlab-ci:latest
stage: deploy
script:
- /app/server
variables:
ACCESS_TOKEN: $CI_ACCESS_TOKEN
EMAIL: $CODESPHERE_EMAIL
PASSWORD: $CODESPHERE_PASSWORD
TEAM: 'Demo'
PLAN: 'Micro'
ON_DEMAND: 'false'
VPN_CONFIG: 'vpnConfigName' # Durch den Namen der VPN-Verbindung ersetzen
Füge die Variable VPN_CONFIG zu den Variablen des Deployment-Schritts hinzu.
- step:
deployment: Test
script:
- pipe: docker://ghcr.io/codesphere-cloud/codesphere-monorepo/integrations/bitbucket-ci:latest
variables:
ACCESS_TOKEN: $ACCESS_TOKEN
EMAIL: $CODESPHERE_EMAIL
PASSWORD: $CODESPHERE_PASSWORD
TEAM: 'My Team'
PLAN: 'Micro'
VPN_CONFIG: 'vpnConfigName' # Durch den Namen der VPN-Verbindung ersetzen