Klassische VPN-Konnektivität einrichten
Diese VPN-Informationen sind bestimmt für klassische Cluster. VPN-Informationen zu VPC-Clustern finden Sie unter VPC-VPN-Konnektivität einrichten.
Mit der VPN-Konnektivität können Sie Apps in einem Kubernetes-Cluster unter IBM Cloud® Kubernetes Service sicher mit einem lokalen Netz verbinden. Sie können auch Apps, die nicht in Ihrem Cluster enthalten sind, mit Apps verbinden, die Teil Ihres Clusters sind.
Um eine Verbindung Ihrer Workerknoten und Apps mit einem lokalen Rechenzentrum einzurichten, können Sie eine der folgenden Optionen konfigurieren.
-
strongSwan IPSec VPN Dienst: Sie können einen strongSwan IPSec VPN Dienst einrichten, der Ihren Kubernetes Cluster sicher mit einem lokalen Netzwerk verbindet. Der strongSwan-IPSec-VPN-Service stellt einen sicheren End-to-End-Kommunikationskanal über das Internet bereit, der auf der standardisierten IPSec-Protokollsuite (IPSec – Internet Protocol Security) basiert. Um eine sichere Verbindung zwischen Ihrem Cluster und einem lokalen Netz einzurichten, konfigurieren und implementieren Sie den strongSwan-IPSec-VPN-Service direkt in einem Pod in Ihrem Cluster.
-
IBM Cloud® Direct Link: IBM Cloud Direct Link ermöglicht Ihnen, eine direkte private Verbindung zwischen Ihren fernen Netzumgebungen und IBM Cloud Kubernetes Service ohne Routing über das öffentliche Internet zu erstellen. Die IBM Cloud Direct Link-Angebote sind nützlich, wenn Sie Hybrid-Workloads, Cross-Provider-Workloads, umfangreiche oder häufige Datenübertragungen oder private Workloads implementieren müssen. Informationen zum Auswählen eines IBM Cloud Direct Link-Angebots und zum Einrichten einer IBM Cloud Direct Link-Verbindung enthält die Einführung in IBM Cloud IBM Cloud Direct Link in der Dokumentation zu IBM Cloud Direct Link.
-
Virtual Router Appliance (VRA): Sie können eine VRA(Vyatta) einrichten, um einen IPSec VPN-Endpunkt zu konfigurieren. Diese Option ist hilfreich, wenn der Cluster größer ist, Sie über ein einzelnes VPN auf mehrere Cluster zugreifen möchten oder Sie ein routenbasiertes VPN benötigen. Informationen zum Konfigurieren einer VRA finden Sie unter VPN-Konnektivität mit VRA konfigurieren.
Wenn Ihr Cluster mit lokalen Netzen verbunden werden soll, ziehen Sie die folgenden hilfreichen Funktionen in Betracht.
-
Mit dem von IBM bereitgestellten Standardbereich 172.30.0.0.0/16 für Pods und dem Standardbereich 172.21.0.0.0/16 für Services können Teilnetzkonflikte auftreten. Sie können Subnetzkonflikte vermeiden, wenn Sie einen Cluster über die Befehlszeilenschnittstelle erstellen, indem Sie in der Option
--pod-subnet
eine benutzerdefinierte Subnetz-CIDR für Pods und in der Option--service-subnet
eine benutzerdefinierte Subnetz-CIDR für Dienste angeben. -
Wenn Ihre VPN-Lösung die Quellen-IP-Adressen von Anforderungen beibehält, können Sie angepasste statische Routen erstellen und so sicherstellen, dass Ihre Workerknoten Antworten von Ihrem Cluster an Ihr lokales Netz weiterleiten können.
Die Teilnetzbereiche 172.16.0.0/16
, 172.18.0.0/16
, 172.19.0.0/16
und 172.20.0.0/16
sind nicht zulässig, da sie für die Funktionalität der IBM Cloud Kubernetes Service-Steuerebene reserviert sind.
Helm-Chart für strongSwan-IPSec-VPN-Service
Verwenden Sie ein Helm-Chart, um den strongSwan-IPSec-VPN-Service innerhalb eines Kubernetes-Pods zu konfigurieren und bereitzustellen.
Da strongSwan in Ihren Cluster integriert ist, benötigen Sie keine externe Gateway-Appliance. Wenn die VPN-Konnektivität eingerichtet ist, werden Routen automatisch auf allen Workerknoten im Cluster konfiguriert. Diese Routen ermöglichen eine bidirektionale Konnektivität über den VPN-Tunnel zwischen Pods auf allen Workerknoten und dem fernen System. Das Beispiel im folgenden Diagramm zeigt, wie eine App in IBM Cloud Kubernetes Service über eine strongSwan-VPN-Verbindung mit einem lokalen Server kommunizieren kann.
-
Eine App in Ihrem Cluster,
myapp
, empfängt eine Anforderung von einem Ingress- oder LoadBalancer-Service und muss eine sichere Verbindung mit Daten in Ihrem lokalen Netz herstellen. -
Die Anforderung an das lokale Rechenzentrum wird an den IPSec-strongSwan-VPN-Pod weitergeleitet. Die IP-Zieladresse wird verwendet, um zu bestimmen, welche Netzpakete an den IPSec-strongSwan-VPN-Pod gesendet werden sollen.
-
Die Anforderung wird verschlüsselt und über den VPN-Tunnel an das lokale Rechenzentrum gesendet.
-
Die eingehende Anforderung passiert die lokale Firewall und wird an den VPN-Tunnelendpunkt (Router) zugestellt, wo sie entschlüsselt wird.
-
Der VPN-Tunnelendpunkt (Router) leitet die Anforderung abhängig von der in Schritt 2 angegebenen Ziel-IP-Adresse an den lokalen Server oder Mainframe weiter. Die erforderlichen Daten werden über die VPN-Verbindung über denselben Prozess an
myapp
zurückgesendet.
Hinweise zu strongSwan-VPN-Service
Prüfen Sie folgende Überlegungen und Einschränkungen, bevor Sie das strongSwan-Helm-Chart verwenden.
- Das StrongSwan-Helm-Chart wird nur für klassische Cluster und nicht für VPC-Cluster unterstützt. VPN-Informationen zu VPC-Clustern finden Sie unter VPC-VPN-Konnektivität einrichten.
- Für das strongSwan-Helm-Chart ist erforderlich, dass die NAT-Traversierung (NAT – Network Address Translation) vom fernen VPN-Endpunkt aktiviert wird. Für die NAT-Traversierung ist neben dem IPSec-UDP-Standardport 500 der UDP-Port 4500 erforderlich. Für beide UDP-Ports muss eine eventuell konfigurierte Firewall Durchlass gewähren.
- Das strongSwan-Helm-Chart unterstützt keine routenbasierten IPSec-VPNs.
- Die Tabelle strongSwan Helm unterstützt IPSec VPNs, die Pre-Shared Keys verwenden, aber keine IPSec VPNs, die Zertifikate benötigen.
- Das strongSwan-Helm-Chart lässt nicht zu, dass mehrere Cluster und andere IaaS-Ressourcen eine einzige VPN-Verbindung gemeinsam nutzen.
- Das strongSwan-Helm-Chart wird innerhalb des Clusters als Kubernetes-Pod ausgeführt. Die Speicher- und Netzverwendung von Kubernetes und anderen Pods, die im Cluster ausgeführt werden, wirkt sich auf die VPN-Leistung aus. Wenn Sie eine leistungskritische Umgebung haben, sollten Sie in Betracht ziehen, eine VPN-Lösung zu verwenden, die außerhalb des Clusters auf dedizierter Hardware ausgeführt wird.
- Das strongSwan-Helm-Chart führt einen einzelnen VPN-Pod als IPSec-Tunnel-Endpunkt aus. Wenn der Pod fehlschlägt, startet der Cluster den Pod erneut. Es kann jedoch zu einer kurzen Ausfallzeit kommen, während der neue Pod startet und die VPN-Verbindung wiederhergestellt wird. Wenn für Sie eine schnellere Fehlerbehebung oder eine ausgefeiltere Hochverfügbarkeitslösung erforderlich ist, sollten Sie in Betracht ziehen, eine VPN-Lösung zu verwenden, die außerhalb des Clusters auf dedizierter Hardware ausgeführt wird.
- Das strongSwan-Helm-Chart stellt keine Messwerte oder eine Überwachung des Netzwerkverkehrs bereit, der über die VPN-Verbindung fließt. Eine Liste der unterstützten Überwachungstools finden Sie im Abschnitt Protokollierungs- und Überwachungsservices.
- Es werden nur die Versionen des StrongSwan-Helm-Charts unterstützt, die in den letzten 6 Monaten veröffentlicht wurden. Stellen Sie sicher, dass das strongSwan-Helm-Chart fortlaufend mit aktuellen Features und Sicherheitskorrekturen aktualisiert wird.
Ihre Clusterbenutzer können den strongSwan-VPN-Service verwenden, um über den Private-Cloud-Serviceendpunkt eine Verbindung zu Ihrem Kubernetes-Master herzustellen. Die Kommunikation mit dem Kubernetes-Master über den privaten Cloud-Serviceendpunkt
muss jedoch über den IP-Adressbereich 166.X.X.X
erfolgen, der nicht über eine VPN-Verbindung weitergeleitet werden kann. Sie können den Private-Cloud-Serviceendpunkt des Masters für Ihre Clusterbenutzer mithilfe einer privaten Netzlastausgleichsfunktion (NLB) zugänglich machen. Die private NLB macht den Private-Cloud-Serviceendpunkt des Masters als interne 172.21.x.x
-Cluster-IP-Adresse zugänglich, auf die der strongSwan-VPN-Pod zugreifen kann. Wenn Sie nur den Private-Cloud-Serviceendpunkt
aktivieren, können Sie das Kubernetes-Dashboard verwenden oder vorübergehend den Public-Cloud-Serviceendpunkt aktivieren, um die private NLB zu erstellen.
strongSwan-VPN in einem Mehrzonencluster konfigurieren
Multizone-Cluster bieten eine hohe Verfügbarkeit für Anwendungen im Falle eines Ausfalls, indem sie Anwendungsinstanzen auf Worker Nodes in mehreren Zonen verfügbar machen. Allerdings ist die Konfiguration des strongSwan-VPN-Service in einem Mehrzonencluster komplexer als die Konfiguration von strongSwan in einem Einzelzonencluster.
Bevor Sie strongSwan in einem Mehrzonencluster konfigurieren, versuchen Sie zunächst, ein strongSwan-Helm-Chart in einem Einzelzonencluster bereitzustellen. Wenn Sie zuerst eine VPN-Verbindung zwischen einem Einzelzonencluster und einem lokalen Netz herstellen, erleichtert dies das Ermitteln der Firewalleinstellungen für ferne Netze, die für eine strongSwan-Konfiguration mit mehreren Zonen von Bedeutung sind.
- Einige ferne VPN-Endpunkte haben Einstellungen wie
leftid
oderrightid
in der Dateiipsec.conf
. Wenn Sie diese Einstellungen haben, prüfen Sie, ob Sie die Einstellungleftid
auf die IP-Adresse des VPN-IPSec-Tunnels setzen müssen. - Wenn die Verbindung aus dem fernen Netz in den Cluster eingehend ist, prüfen Sie, ob der ferne VPN-Endpunkt die VPN-Verbindung zu einer anderen IP-Adresse wiederherstellen kann, wenn ein Fehler der Lastausgleichsfunktion in einer Zone auftritt.
Wählen Sie eine der folgenden Optionen aus, um mit strongSwan in einem Mehrzonencluster zu beginnen.
- Wenn Sie eine ausgehende VPN-Verbindung verwenden können, haben Sie die Möglichkeit, nur eine strongSwan-VPN-Bereitstellung zu konfigurieren. Weitere Informationen finden Sie unter Einzelne ausgehende VPN-Verbindung aus einem Mehrzonencluster konfigurieren.
- Wenn Sie eine eingehende VPN-Verbindung benötigen, variieren die Konfigurationseinstellungen, die Sie verwenden können, abhängig davon, ob der ferne VPN-Endpunkt so konfiguriert werden kann, dass er die VPN-Verbindung zu einer anderen öffentlichen
IP-Adresse der Lastausgleichsfunktion wiederherstellt, wenn ein Ausfall erkannt wird.
- Wenn der ferne VPN-Endpunkt die VPN-Verbindung automatisch zu einer anderen IP-Adresse wiederherstellen kann, haben Sie die Möglichkeit, nur eine strongSwan-VPN-Bereitstellung zu konfigurieren. Weitere Informationen finden Sie unter Nur eine eingehende VPN-Verbindung zu einem Mehrzonencluster konfigurieren.
- Wenn der ferne VPN-Endpunkt die VPN-Verbindung zu einer anderen IP-Adresse nicht automatisch wiederherstellen kann, müssen Sie in jeder Zone einen separaten eingehenden strongSwan-VPN-Service bereitstellen. Weitere Informationen finden Sie unter VPN-Verbindung in jeder Zone eines Mehrzonenclusters konfigurieren.
Versuchen Sie, Ihre Umgebung so einzurichten, dass Sie nur eine strongSwan-VPN-Bereitstellung für eine ausgehende und eine eingehende VPN-Verbindung zu Ihrem Mehrzonencluster benötigen. Wenn Sie separate strongSwan-VPNs in jeder Zone einrichten müssen, stellen Sie sicher, dass Sie planen, wie diese zusätzliche Komplexität und die erhöhte Ressourcennutzung verwaltet werden sollen.
Einzelne ausgehende VPN-Verbindung aus einem Mehrzonencluster konfigurieren
Die einfachste Lösung für die Konfiguration des strongSwan-VPN-Service in einem Mehrzonencluster besteht in der Verwendung einer einzelnen VPN-Verbindung, die zwischen verschiedenen Workerknoten über alle Verfügbarkeitszonen in Ihrem Cluster hinweg gemeinsam genutzt wird.
Wenn die VPN-Verbindung aus dem Mehrzonencluster ausgeht, ist nur eine strongSwan-Bereitstellung erforderlich. Wenn ein Workerknoten entfernt wird oder eine Ausfallzeit erfährt, plant kubelet
den VPN-Pod auf einem neuen Workerknoten
erneut. Wenn eine Verfügbarkeitszone nicht verfügbar wird, plant kubelet
den VPN-Pod auf einem neuen Workerknoten in einer anderen Zone erneut.
-
Konfigurieren Sie nur ein strongSwan-VPN-Helm-Chart. Achten Sie beim Ausführen der Schritte in diesem Abschnitt darauf, die folgenden Einstellungen anzugeben.
ipsec.auto
: Ändern Sie den Wert instart
. Verbindungen gehen von dem Cluster aus.loadBalancerIP
: Geben Sie keine IP-Adresse an. Lassen Sie diese Einstellung leer.zoneLoadBalancer
: Geben Sie eine öffentliche IP-Adresse für die Lastausgleichsfunktion für jede Zone an, in der Sie Workerknoten haben. Sie können Ihre verfügbaren öffentlichen IP-Adressen zur Überprüfung anzeigen oder eine bereits verwendete IP-Adresse freigeben. Da der strongSwan-VPN-Pod auf einem Workerknoten in einer beliebigen Zone geplant werden kann, stellt diese Liste von IP-Adressen sicher, dass eine IP-Adresse für die Lastausgleichsfunktion in jeder Zone verwendet werden kann, in der der VPN-Pod geplant wird.connectUsingLoadBalancerIP
: Setzen Sie den Wert auftrue
. Wenn der strongSwan-VPN-Pod auf einem Workerknoten geplant wird, wählt der strongSwan-Service die IP-Adresse der Lastausgleichsfunktion aus, die sich in derselben Zone befindet, und verwendet diese IP-Adresse, um eine ausgehende Verbindung herzustellen.local.id
: Geben Sie einen festen Wert an, der von Ihrem fernen VPN-Endpunkt unterstützt wird. Wenn der ferne VPN-Endpunkt erfordert, dass Sie die Optionlocal.id
(Wertleftid
inipsec.conf
) auf die öffentliche IP-Adresse des VPN-IPSec-Tunnels festlegen, legen Sielocal.id
auf%loadBalancerIP
fest. Dieser Wert konfiguriert automatisch den Wertleftid
inipsec.conf
für die IP-Adresse der Lastausgleichsfunktion, die für die Verbindung verwendet wird.- Optional: Blenden Sie alle Cluster-IP-Adressen hinter einer einzelnen IP-Adresse in jeder Zone aus, indem Sie
enableSingleSourceIP
auftrue
festlegen. Diese Option stellt eine der sichersten Konfigurationen für die VPN-Verbindung bereit, da keine Verbindungen vom fernen Netz zurück in den Cluster zulässig sind. Des Weiteren müssen Sie fürlocal.subnet
die Variable%zoneSubnet
festlegen undlocal.zoneSubnet
verwenden, um eine IP-Adresse als /32-Teilnetz für jede Zone des Clusters anzugeben.
-
Lassen Sie in der Ihrer fernen Netzfirewall eingehende IPSec-VPN-Verbindungen von den öffentlichen IP-Adressen zu, die Sie in der Einstellung
zoneLoadBalancer
aufgelistet haben. -
Konfigurieren Sie den fernen VPN-Endpunkt so, dass eine eingehende VPN-Verbindung von jeder der möglichen IP-Adressen der Lastausgleichsfunktion zugelassen wird, die Sie in der Einstellung
zoneLoadBalancer
aufgelistet haben.
Einzelne eingehende VPN-Verbindung zu einem Mehrzonencluster konfigurieren
Wenn Sie eingehende VPN-Verbindungen benötigen und der ferne VPN-Endpunkt automatisch die VPN-Verbindung zu einer anderen IP-Adresse wiederherstellen kann, wenn ein Fehler erkannt wird, können Sie eine einzelne eingehende VPN-Verbindung verwenden, die zwischen verschiedenen Workerknoten in allen Verfügbarkeitszonen in Ihrem Cluster gemeinsam genutzt werden kann.
Der ferne VPN-Endpunkt kann die VPN-Verbindung zu jeder der strongSwan-Lastausgleichsfunktionen in jeder der Zonen herstellen. Die eingehende Anforderung wird an den VPN-Pod unabhängig davon gesendet, in welcher Zone er sich VPN-Pod befindet.
Antworten aus dem VPN-Pod werden über die ursprüngliche Lastausgleichsfunktion an den fernen VPN-Endpunkt gesendet. Diese Option stellt hohe Verfügbarkeit sicher, weil kubelet
den VPN-Pod auf einem neuen Workerknoten plant,
wenn der Workerknoten entfernt wird oder irgendwie ausfällt. Außerdem kann der ferne VPN-Endpunkt bei einem Ausfall der Verfügbarkeitszone die VPN-Verbindung zu der IP-Adresse der Lastausgleichsfunktion in einer anderen Zone wiederherstellen,
sodass der VPN-Pod weiterhin erreichbar bleibt.
-
Konfigurieren Sie nur ein strongSwan-VPN-Helm-Chart. Achten Sie beim Ausführen der Schritte in diesem Abschnitt darauf, die folgenden Einstellungen anzugeben.
ipsec.auto
: Ändern Sie den Wert inadd
. Verbindungen gehen in den Cluster ein.loadBalancerIP
: Geben Sie keine IP-Adresse an. Lassen Sie diese Einstellung leer.zoneLoadBalancer
: Geben Sie eine öffentliche IP-Adresse für die Lastausgleichsfunktion für jede Zone an, in der Sie Workerknoten haben. Sie können Ihre verfügbaren öffentlichen IP-Adressen zur Überprüfung anzeigen oder eine bereits verwendete IP-Adresse freigeben.local.id
: Wenn der ferne VPN-Endpunkt erfordert, dass Sie die Optionlocal.id
(Wertleftid
inipsec.conf
) auf die öffentliche IP-Adresse des VPN-IPSec-Tunnels festlegen, legen Sielocal.id
auf%loadBalancerIP
fest. Dieser Wert konfiguriert automatisch den Wertleftid
inipsec.conf
für die IP-Adresse der Lastausgleichsfunktion, die für die Verbindung verwendet wird.
-
Lassen Sie in der Ihrer fernen Netzfirewall ausgehende IPSec-VPN-Verbindungen zu den öffentlichen IP-Adressen zu, die Sie in der Einstellung
zoneLoadBalancer
aufgelistet haben.
Eingehende VPN-Verbindung in jede Zone eines Mehrzonenclusters konfigurieren
Wenn Sie eingehende VPN-Verbindungen benötigen und der ferne VPN-Endpunkt die VPN-Verbindung nicht zu einer anderen IP wiederherstellen kann, müssen Sie in jeder Zone einen separaten strongSwan-VPN-Service bereitstellen.
Der ferne VPN-Endpunkt muss aktualisiert werden, um eine separate VPN-Verbindung zu einer Lastausgleichsfunktion in jeder der Zonen herzustellen. Darüber hinaus müssen Sie zonenspezifische Einstellungen auf dem fernen VPN-Endpunkt konfigurieren, sodass jede dieser VPN-Verbindungen eindeutig ist. Stellen Sie sicher, dass diese mehreren eingehenden VPN-Verbindungen aktiv bleiben.
Nach der Bereitstellung aller Helm-Charts wird jede strongSwan-VPN-Bereitstellung als Kubernetes-Lastausgleichsservice in der richtigen Zone gestartet. Eingehende Anforderungen an diese öffentliche IP-Adresse werden an den VPN-Pod weitergeleitet, der sich ebenfalls in derselben Zone befindet. Wenn die Zone ausfällt, bleiben die VPN-Verbindungen, die in den anderen Zonen hergestellt wurden, davon unberührt.
-
Konfigurieren Sie ein strongSwan-VPN-Helm-Chart für jede Zone. Wenn Sie die Schritte in diesem Abschnitt ausführen, stellen Sie sicher, dass Sie die folgenden Einstellungen angeben:
loadBalancerIP
: Geben Sie eine verfügbare öffentliche IP-Adresse für die Lastausgleichsfunktion an, die sich in der Zone befindet, in der Sie diesen strongSwan-Service bereitstellen. Sie können Ihre verfügbaren öffentlichen IP-Adressen zur Überprüfung anzeigen oder eine bereits verwendete IP-Adresse freigeben.zoneSelector
: Geben Sie die Zone an, in der der VPN-Pod geplant werden soll.- Weitere Einstellungen wie
zoneSpecificRoutes
,remoteSubnetNAT
,localSubnetNAT
oderenableSingleSourceIP
sind möglicherweise erforderlich, je nachdem, welche Ressourcen über das VPN zugänglich sein müssen. Weitere Informationen finden Sie im nächsten Schritt.
-
Konfigurieren Sie zonenspezifische Einstellungen auf beiden Seiten des VPN-Tunnels, um sicherzustellen, dass jede VPN-Verbindung eindeutig ist. Abhängig von den Ressourcen, die über das VPN zugänglich sein müssen, haben Sie zwei Optionen, die Verbindungen unterscheidbar zu machen:
- Wenn Pods in dem Cluster auf Services im fernen lokalen Netz zugreifen müssen,
zoneSpecificRoutes
: Setzen Sie den Wert auftrue
. Mit dieser Einstellung wird die VPN-Verbindung auf eine einzelne Zonenregion im Cluster beschränkt. Pods in einer bestimmten Zone verwenden nur die VPN-Verbindung, die für diese bestimmte Zone eingerichtet wurde. Diese Lösung verringert die Anzahl der strongSwan-Pods, die zur Unterstützung mehrerer VPNs in einem Mehrzonencluster erforderlich sind, verbessert die VPN-Leistung, weil der VPN-Datenverkehr nur an Workerknoten fließt, die sich in der aktuellen Zone befinden, und stellt sicher, dass die VPN-Konnektivität jeder Zone von der VPN-Konnektivität, den ausgefallenen Pods sowie Zonenausfällen in anderen Zonen nicht betroffen wird. Beachten Sie, dass SieremoteSubnetNAT
nicht konfigurieren müssen. Mehrere VPNs, die die EinstellungzoneSpecificRoutes
verwenden, können denselben Wert fürremote.subnet
haben, weil das Routing auf Zonenebene eingerichtet wird.enableSingleSourceIP
: Setzen Sie den Wert auftrue
und setzen Sielocal.subnet
auf eine einzelne /32 IP-Adresse. Diese Kombination von Einstellungen blendet alle privaten IP-Adressen des Clusters hinter einer einzelnen /32-IP-Adresse aus. Durch diese eindeutige /32 IP-Adresse kann das ferne Standortnetz Antworten über die richtige VPN-Verbindung an den richtigen Pod im Cluster, der die Anforderung eingeleitet hat, zurücksenden. Beachten Sie, dass die einzelne /32 IP-Adresse, die für die Optionlocal.subnet
konfiguriert wird, in jeder strongSwan-VPN-Konfiguration eindeutig sein muss.
- Wenn Anwendungen in dem lokalen fernen Netz auf Services im Cluster zugreifen müssen,
localSubnetNAT
: Stellen Sie sicher, dass eine Anwendung im fernen Standortnetz eine bestimmte VPN-Verbindung auswählen kann, um Datenverkehr an den Cluster zu senden und vom Cluster zu empfangen. Verwenden Sie in jeder strongSwan-Helm-Konfiguration die EinstellunglocalSubnetNAT
, um die Clusterressourcen eindeutig anzugeben, auf die von der fernen Anwendung am Standort zugegriffen werden kann. Da mehrere VPNs vom fernen lokalen Netz zum Cluster eingerichtet werden, müssen Sie der Anwendung im lokalen Netz Logik hinzufügen, damit sie auswählen kann, welches VPN beim Zugriff auf Services im Cluster verwendet werden soll. Beachten Sie, dass die Services im Cluster abhängig von der Konfiguration fürlocalSubnetNAT
in jeder strongSwan-VPN-Konfiguration über mehrere verschiedene Teilnetze zugänglich sind.remoteSubnetNAT
: Stellen Sie sicher, dass ein Pod in Ihrem Cluster dieselbe VPN-Verbindung verwendet, um Datenverkehr an das ferne Netz zurückzugeben. Ordnen Sie in jeder strongSwan-Bereitstellungsdatei das ferne Standortnetz einem eindeutigen Teilnetz mit der EinstellungremoteSubnetNAT
zu. Datenverkehr, der von einem Pod im Cluster aus einem VPN-spezifischen fernen Teilnetz (remoteSubnetNAT
) empfangen wird, wird an dasselbe ferne VPN-spezifische Teilnetz (remoteSubnetNAT
) und dann über dieselbe VPN-Verbindung zurückgesendet.
- Wenn Pods im Cluster auf Services im fernen lokalen Netz zugreifen müssen und Anwendungen im fernen lokalen Netz auf Services im Cluster zugreifen müssen, konfigurieren Sie die Einstellungen
localSubnetNAT
undremoteSubnetNAT
, die im zweiten Listenpunkt aufgelistet sind. Wenn ein Pod im Cluster eine Anforderung an das ferne lokale Netz einleitet, müssen Sie dem Pod Logik hinzufügen, damit er auswählen kann, welche VPN-Verbindung für den Zugriff auf die Services im fernen lokalen Netz verwendet werden soll.
- Wenn Pods in dem Cluster auf Services im fernen lokalen Netz zugreifen müssen,
-
Konfigurieren Sie die Software für den fernen VPN-Endpunkt so, dass eine separate VPN-Verbindung zu der IP-Adresse der Lastausgleichsfunktion in jeder Zone hergestellt wird.
strongSwan-Helm-Chart konfigurieren
Bevor Sie das strongSwan-Helm-Chart installieren, müssen Sie eine Entscheidung bezüglich Ihrer strongSwan-Konfiguration treffen.
Vorbereitende Schritte
- Installieren Sie ein IPSec-VPN-Gateway in Ihrem lokalen Rechenzentrum.
- Stellen Sie sicher, dass Sie über die IAM-Service-Zugriffsrolle Writer oder Manager IBM Cloud für den Namensraum
default
verfügen. - Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest. In Standardclustern sind alle strongSwan-Konfigurationen zulässig.
Schritt 1: strongSwan-Helm-Chart abrufen
Installieren Sie Helm und holen Sie sich das strongSwan-Helm-Chart, um mögliche Konfigurationen anzuzeigen.
-
Befolgen Sie die Anweisungen zum Installieren von Version 3 des Helm-Clients auf Ihrer lokalen Maschine.
-
Speichern Sie die Standardkonfigurationseinstellungseinstellungen für das strongSwan-Helm-Chart in einer lokalen YAML-Datei.
helm show values iks-charts/strongswan > config.yaml
-
Öffnen Sie die Datei
config.yaml
.
Schritt 2: Grundlegende IPSec-Einstellungen konfigurieren
Ändern Sie zum Steuern der Einrichtung der VPN-Verbindung die folgenden grundlegenden IPSec-Einstellungen.
Weitere Informationen zu den einzelnen Einstellungen finden Sie in der Dokumentation, die in der Datei config.yaml
für das Helm-Chart bereitgestellt wird.
- Wenn Ihr lokaler VPN-Tunnelendpunkt
ikev2
als Protokoll für die Initialisierung der Verbindung nicht unterstützt, ändern Sie den Wert vonipsec.keyexchange
inikev1
. - Legen Sie als
ipsec.esp
die Liste von ESP-Verschlüsselungs-/Authentifizierungsalgorithmen fest, die Ihr lokaler VPN-Tunnelendpunkt für die Verbindung verwendet.- Wenn
ipsec.keyexchange
aufikev1
festgelegt ist, muss diese Einstellung angegeben werden. - Wenn
ipsec.keyexchange
aufikev2
festgelegt ist, ist diese Einstellung optional. - Wenn Sie diese Einstellung leer lassen, wird der Standardwert für strongSwan-Algorithmen
aes128-sha1,3des-sha1
für die Verbindung verwendet.
- Wenn
- Legen Sie als
ipsec.ike
die Liste von IKE/ISAKMP-SA-Verschlüsselungs-/Authentifizierungsalgorithmen fest, die Ihr lokaler VPN-Tunnelendpunkt für die Verbindung verwendet. Die Algorithmen müssen im Formatencryption-integrity[-prf]-dhgroup
angegeben werden.- Wenn
ipsec.keyexchange
aufikev1
festgelegt ist, muss diese Einstellung angegeben werden. - Wenn
ipsec.keyexchange
aufikev2
festgelegt ist, ist diese Einstellung optional. - Wenn Sie diese Einstellung leer lassen, wird der Standardwert für strongSwan-Algorithmen
aes128-sha1-modp2048,3des-sha1-modp1536
für die Verbindung verwendet.
- Wenn
- Ändern Sie den Wert von
local.id
in eine beliebige Zeichenfolge, die Sie zum Identifizieren der lokalen Seite des Kubernetes-Clusters verwenden möchten, die Ihr VPN-Tunnelendpunkt verwendet. Der Standardwert istibm-cloud
. Für einige VPN-Implementierungen ist es erforderlich, dass Sie für den lokalen Endpunkt die öffentliche IP-Adresse verwenden. - Ändern Sie den Wert von
remote.id
in eine beliebige Zeichenfolge, die Sie zum Identifizieren der fernen lokalen Seite verwenden möchten, die Ihr VPN-Tunnelendpunkt verwendet. Der Standardwert iston-prem
. Für einige VPN-Implementierungen ist es erforderlich, dass Sie für den fernen Endpunkt die öffentliche IP-Adresse verwenden. - Ändern Sie den Wert von
preshared.secret
in den vorab verteilten geheimen Schlüssel, den Ihr lokaler VPN-Tunnelendpunkt für die Verbindung verwendet. Dieser Wert wird inipsec.secrets
gespeichert. - Optional: Legen Sie für
remote.privateIPtoPing
eine beliebige private IP-Adresse im fernen Teilnetz fest, die im Rahmen des Helm-Tests zur Konnektivitätsprüfung mit Ping überprüft wird.
Schritt 3: Eingehende oder ausgehende VPN-Verbindung auswählen
Wenn Sie eine strongSwan-VPN-Verbindung konfigurieren, wählen Sie aus, ob die VPN-Verbindung für den Cluster eingehend oder ausgehend ist.
- Ankommend
- Der lokale VPN-Endpunkt des fernen Netzes initialisiert die VPN-Verbindung und der Cluster ist für die Verbindung empfangsbereit.
- Ausgehend
- Der Cluster initialisiert die VPN-Verbindung und der lokale VPN-Endpunkt des fernen Netzes ist für die Verbindung empfangsbereit.
Ändern Sie die folgenden Einstellungen, um eine ausgehende VPN-Verbindung herzustellen.
- Überprüfen Sie, dass für
ipsec.auto
die Einstellungadd
festgelegt ist. - Optional: Legen Sie für
loadBalancerIP
eine portierbare öffentliche IP-Adresse fest, die für den strongSwan-VPN-Service gilt. Die Angabe einer IP-Adresse ist nützlich, wenn Sie eine fixe IP-Adresse benötigen, z. B. wenn Sie festlegen müssen, welche IP-Adressen von einer lokalen Firewall zugelassen werden. Der Cluster muss über mindestens eine verfügbare öffentliche IP-Adresse der Lastausgleichsfunktion verfügen. Sie können Ihre verfügbaren öffentlichen IP-Adressen zur Überprüfung anzeigen oder eine bereits verwendete IP-Adresse freigeben.- Wenn Sie diese Einstellung leer lassen, wird eine der verfügbaren und portierbaren öffentlichen IP-Adressen verwendet.
- Sie müssen auch die öffentliche IP-Adresse konfigurieren, die Sie für den VPN-Endpunkt des Clusters im lokalen VPN-Endpunkt auswählen oder die diesem VPN-Endpunkt des Clusters im lokalen VPN-Endpunkt zugewiesen ist.
Ändern Sie die folgenden Einstellungen, um eine ausgehende VPN-Verbindung herzustellen.
- Ändern Sie
ipsec.auto
instart
. - Legen Sie für
remote.gateway
die öffentliche IP-Adresse für den lokalen VPN-Endpunkt im fernen Netz fest. - Wählen Sie als IP-Adresse für den VPN-Endpunkt des Clusters eine der folgenden Optionen:
-
Öffentliche IP-Adresse des privaten Gateways des Clusters: Wenn Ihre Arbeitsknoten nur mit einem privaten VLAN verbunden sind, wird die ausgehende VPN-Anfrage über das private Gateway geleitet, um das Internet zu erreichen. Die öffentliche IP-Adresse des privaten Gateways wird für die VPN-Verbindung verwendet.
-
Öffentliche IP-Adresse des Workerknotens, auf dem der strongSwan-Pod ausgeführt wird: Wenn der Workerknoten, auf dem der strongSwan-Pod ausgeführt wird, mit einem öffentlichen VLAN verbunden ist, wird für die VPN-Verbindung die öffentliche IP-Adresse des Workerknotens verwendet.
- Wenn der strongSwan-Pod gelöscht und auf einem anderen Workerknoten im Cluster neu geplant wird, ändert sich die öffentliche IP-Adresse des VPNs. Der lokale VPN-Endpunkt des fernen Netzes muss zulassen, dass die VPN-Verbindung über die öffentliche IP-Adresse eines der Workerknoten des Clusters hergestellt wird.
- Wenn der ferne VPN-Endpunkt keine VPN-Verbindungen von mehreren öffentlichen IP-Adressen verarbeiten kann, begrenzen Sie die Knoten, auf denen der strongSwan-VPN-Pod bereitgestellt wird. Legen Sie für
nodeSelector
die IP-Adressen bestimmter Workerknoten oder eine Workerknotenbezeichnung fest. Der Wertkubernetes.io/hostname: 10.232.xx.xx
lässt beispielsweise nur zu, dass der VPN-Pod auf diesem Workerknoten bereitgestellt wird. Der Wertstrongswan: vpn
beschränkt die Ausführung des VPN-Pods auf alle Workerknoten mit dieser Bezeichnung. Sie können eine beliebige Workerknotenbezeichnung auswählen. Um die Verwendung unterschiedlicher Workerknoten mit verschiedenen Helm-Diagrammbereitstellungen zuzulassen, verwenden Siestrongswan: <release_name>
. Wählen Sie für hohe Verfügbarkeit mindestens zwei Workerknoten aus.
-
Öffentliche IP-Adresse des strongSwan-Service: Zum Herstellen einer Verbindung mithilfe der IP-Adresse des strongSwan-VPN-Service legen Sie für
connectUsingLoadBalancerIP
die Einstellungtrue
fest. Die IP-Adresse des strongSwan-Service ist entweder eine portierbare öffentliche IP-Adresse, die Sie in der EinstellungloadBalancerIP
angeben können, oder eine verfügbare portierbare öffentliche IP-Adresse, die dem Service automatisch zugeordnet wird.- Wenn Sie wählen, eine IP-Adresse mithilfe der Einstellung
loadBalancerIP
auszuwählen, muss der Cluster über mindestens eine verfügbare öffentliche IP-Adresse der Lastausgleichsfunktion verfügen. Sie können Ihre verfügbaren öffentlichen IP-Adressen zur Überprüfung anzeigen oder eine bereits verwendete IP-Adresse freigeben. - alle Cluster-Workerknoten müssen sich in demselben öffentlichen VLAN befinden. Andernfalls müssen Sie die Einstellung
nodeSelector
verwenden, um sicherzustellen, dass der VPN-Pod auf einem Workerknoten in demselben öffentliche VLAN wieloadBalancerIP
bereitgestellt wird. - Wenn für
connectUsingLoadBalancerIP
die Einstellungtrue
festgelegt wurde und füripsec.keyexchange
die Einstellungikev1
gewählt wurde, müssen Sie fürenableServiceSourceIP
die Einstellungtrue
festlegen.
- Wenn Sie wählen, eine IP-Adresse mithilfe der Einstellung
-
Schritt 4: Über die VPN-Verbindung auf Clusterressourcen zugreifen
Ermitteln Sie, welche Clusterressourcen für das ferne Netz über die VPN-Verbindung zugänglich sein müssen.
-
Fügen Sie die CIDRs mindestens eines Cluster-Teilnetzes zur Einstellung
local.subnet
hinzu. Sie müssen die CIDRs des lokalen Teilnetzes im lokalen VPN-Endpunkt konfigurieren. Diese Liste kann die folgenden Teilnetze enthalten.- Das Teilnetz-CIDR des Kubernetes-Pods:
172.30.0.0/16
. Die bidirektionale Kommunikation ist zwischen allen Cluster-Pods und jedem der Hosts in den Teilnetzen des fernen Netzes aktiviert, die Sie in der Einstellungremote.subnet
auflisten. Wenn Sie aus Sicherheitsgründen verhindern müssen, dassremote.subnet
-Hosts auf Clusterpods zugreifen, fügen Sie das Kubernetes-Podteilnetz nicht zur Einstellunglocal.subnet
hinzu. - Das Teilnetz-CIDR des Kubernetes Service:
172.21.0.0/16
. Service-IP-Adressen bieten die Möglichkeit, mehrere App-Pods verfügbar zu machen, die auf mehreren Workerknoten mit einer einzigen IP bereitgestellt sind. - Wenn Ihre Apps über einen NodePort-Service im privaten Netz oder in einer privaten Ingress-ALB (ALB – Application Load Balancer) zugänglich gemacht werden, müssen Sie die private Teilnetz-CIDR des Workerknotens hinzufügen. Rufen Sie
die ersten drei Oktette der privaten IP-Adresse Ihres Workers ab, indem Sie
ibmcloud ks worker <cluster_name>
ausführen. Beispiel: Bei10.176.48.xx
notieren Sie sich10.176.48
. Rufen Sie als Nächstes das private Teilnetz des Workers CIDR ab, indem Sie den Befehl<xxx.yyy.zz>
durch das Oktett ersetzen, das Sie zuvor abgerufen haben:ibmcloud sl subnet list | grep <xxx.yyy.zzz>
. Hinweis: Wenn ein Workerknoten in einem neuen privaten Teilnetz hinzugefügt wird, müssen Sie die neue private Teilnetz-CIDR zurlocal.subnet
-Einstellung und zum lokalen VPN-Endpunkt hinzufügen. Anschließend muss die VPN-Verbindung erneut gestartet werden. - Wenn Sie Apps über LoadBalancer-Services im privaten Netz zugänglich machen, müssen Sie die private benutzerverwaltete Teilnetz-CIDR des Clusters hinzufügen. Führen Sie
ibmcloud ks cluster get --cluster <cluster_name> --show-resources
aus, um diese Werte zu suchen. Suchen Sie im Abschnitt VLANs nach CIDRs, die für Public den Wertfalse
aufweisen. Hinweis: Wennipsec.keyexchange
aufikev1
festgelegt ist, können Sie nur ein Teilnetz angeben. Sie können jedoch die EinstellunglocalSubnetNAT
verwenden, um mehrere Teilnetze eines Clusters zu einem einzigen Teilnetz zu kombinieren.
- Das Teilnetz-CIDR des Kubernetes-Pods:
-
Optional: Ordnen Sie Teilnetze eines Clusters erneut zu, indem Sie die Einstellung
localSubnetNAT
verwenden. Network Address Translation (NAT) für Teilnetze bietet eine Ausweichlösung für Teilnetzkonflikte zwischen dem Clusternetz und dem lokalen fernen Netz. Sie können NAT verwenden, um die privaten lokalen IP-Teilnetze des Clusters, das Pod-Teilnetz (172.30.0.0/16) oder das Teilnetz des Pod-Service (172.21.0.0/16) zu einem anderen privaten Teilnetz zuzuordnen. Der VPN-Tunnel erkennt erneut zugeordnete IP-Teilnetze, die an Stelle der ursprünglichen Teilnetze treten. Die erneute Zuordnung erfolgt vor dem Senden der Pakete über den VPN-Tunnel sowie nach dem Eintreffen der Pakete aus dem VPN-Tunnel. Sie können sowohl erneut zugeordnete als auch nicht erneut zugeordnete Teilnetze gleichzeitig über VPN bereitstellen. Um NAT aktivieren zu können, können Sie entweder ein vollständiges Teilnetz oder einzelne IP-Adressen hinzufügen.- Wenn Sie ein vollständiges Teilnetz im Format
10.171.42.0/24=10.10.10.0/24
hinzufügen, erfolgt die Neuzuordnung 1-zu-1:, d. h. alle IP-Adressen im internen Teilnetz werden dem externen Teilnetz zugeordnet und umgekehrt. - Wenn Sie einzelne IP-Adressen im Format
10.171.42.17/32=10.10.10.2/32,10.171.42.29/32=10.10.10.3/32
zuordnen, werden nur diese internen IP-Adressen den angegebenen externen IP-Adressen zugeordnet.
- Wenn Sie ein vollständiges Teilnetz im Format
-
Optional für strongSwan Helm-Diagramme ab Version 2.2.0: Blenden Sie alle Cluster-IP-Adressen hinter einer einzelnen IP-Adresse aus, indem Sie
enableSingleSourceIP
auftrue
festlegen. Diese Option stellt eine der sichersten Konfigurationen für die VPN-Verbindung bereit, da keine Verbindungen vom fernen Netz zurück in den Cluster zulässig sind.- Diese Einstellung erfordert, dass der gesamte Datenfluss über die VPN-Verbindung ausgehend sein muss; dies ist unabhängig davon, ob die VPN-Verbindung vom Cluster oder vom fernen Netz eingerichtet wird.
- Wenn Sie strongSwan in einem Einzelzonencluster installieren, dann müssen Sie für
local.subnet
eine einzelne IP-Adresse als /32-Teilnetz angeben. Wenn Sie strongSwan in einem Mehrzonencluster installieren, können Sie fürlocal.subnet
die Variable%zoneSubnet
festlegen undlocal.zoneSubnet
verwenden, um eine IP-Adresse als /32-Teilnetz für jede Zone des Clusters anzugeben.
-
Optional für strongSwan-Helm-Charts der Version 2.2.0 und höher: Aktivieren Sie den strongSwan-Service, sodass eingehende Anforderungen des fernen Netzes an einen Service weitergeleitet werden, der sich außerhalb des Clusters befindet. Verwenden Sie dazu die Einstellung
localNonClusterSubnet
.- Der nicht zum Cluster gehörende Service muss im selben privaten Netz oder in einem privaten Netz vorhanden sein, das für die Workerknoten erreichbar ist.
- Der Nicht-Cluster-Workerknoten kann keinen Datenverkehr zum fernen Netz über die VPN-Verbindung einleiten, aber der Nicht-Cluster-Knoten kann das Ziel eingehender Anforderungen vom fernen Netz sein.
- Sie müssen die CIDRs der nicht zum Cluster gehörenden Teilnetze in der Einstellung
local.subnet
auflisten.
Schritt 5: Über die VPN-Verbindung auf ferne Netzressourcen zugreifen
Ermitteln Sie, welche fernen Netzressourcen für das Cluster über die VPN-Verbindung zugänglich sein müssen.
- Fügen Sie die CIDRs mindestens eines lokalen privaten Teilnetzes zur Einstellung
remote.subnet
hinzu. Hinweis: Wennipsec.keyexchange
aufikev1
festgelegt ist, können Sie nur ein Teilnetz angeben. - Optional für strongSwan-Helm-Charts der Version 2.2.0 und höher: Ordnen Sie Teilnetze des fernen Netzes neu zu, indem Sie die Einstellung
remoteSubnetNAT
verwenden. Network Address Translation (NAT) für Teilnetze bietet eine Ausweichlösung für Teilnetzkonflikte zwischen dem Clusternetz und dem lokalen fernen Netz. Sie können NAT verwenden, um die IP-Teilnetze des fernen Netzes einem anderen privaten Teilnetz zuzuordnen. Die erneute Zuordnung erfolgt vor dem Senden der Pakete über den VPN-Tunnel. Pods im Cluster erkennen die erneut zugeordneten IP-Teilnetze, die an Stelle der ursprünglichen Teilnetze treten. Bevor die Pods Daten über den VPN-Tunnel zurücksenden, wird das neu zugeordnete IP-Teilnetz wieder auf das tatsächliche Teilnetz zurückgestellt, das vom fernen Netz verwendet wird. Sie können sowohl erneut zugeordnete als auch nicht erneut zugeordnete Teilnetze gleichzeitig über VPN bereitstellen.
Schritt 6 (optional): Überwachung mit der Slack-Webhook-Integration aktivieren
Um den Status des strongSwan-VPN zu überwachen, können Sie einen Webhook zum automatischen Posten von VPN-Konnektivitätsnachrichten an einen Slack-Kanal einrichten.
-
Melden Sie sich bei Ihrem Slack-Arbeitsbereich an.
-
Rufen Sie die Seite der App Eingehend WebHooks auf.
-
Klicken Sie auf Installationsanforderung. Falls diese App nicht in Ihrer Slack-Konfiguration aufgeführt ist, wenden Sie sich an den Eigner Ihres Slack-Arbeitsbereichs.
-
Nachdem Ihre Installationsanforderung genehmigt wurde, klicken Sie auf Konfiguration hinzufügen.
-
Wählen Sie einen Slack-Kanal aus oder erstellen Sie einen neuen Kanal, an den die VPN-Nachrichten gesendet werden sollen.
-
Kopieren Sie die Webhook-URL, die generiert wird. Das URL-Format sieht wie folgt aus:
https://hooks.slack.com/services/A1AA11A1A/AAA1AAA1A/a1aaaaAAAaAaAAAaaaaaAaAA
-
Um zu verifizieren, dass der Slack-Webhook installiert wurde, senden Sie eine Testnachricht an Ihre Webhook-URL, indem Sie den folgenden Befehl ausführen:
curl -X POST -H 'Content-type: application/json' -d '{"text":"VPN test message"}' <webhook_URL>
-
Wechseln Sie zu dem Slack-Kanal, den Sie ausgewählt haben, um zu verifizieren, dass die Testnachricht erfolgreich ist.
-
Konfigurieren Sie in der Datei
config.yaml
für das Helm-Chart den Webhook zum Überwachen Ihrer VPN-Verbindung.- Ändern Sie
monitoring.enable
intrue
. - Fügen Sie private IP-Adressen oder HTTP-Endpunkte in dem fernen Teilnetz hinzu, für die Sie sicherstellen möchten, dass sie über die VPN-Verbindung zu
monitoring.privateIPs
odermonitoring.httpEndpoints
erreichbar sind. Sie können beispielsweise die IP aus der Einstellungremote.privateIPtoPing
zumonitoring.privateIPs
hinzufügen. - Fügen Sie die Webhook-URL zu
monitoring.slackWebhook
hinzu. - Ändern Sie andere optionale Überwachungseinstellungen (
monitoring
) nach Bedarf.
- Ändern Sie
Schritt 7: Helm-Chart bereitstellen
Stellen Sie das strongSwan-Helm-Chart in Ihrem Cluster mit den Konfigurationen, die Sie zuvor ausgewählt haben, bereit.
-
Beachten Sie die Dokumentation, die für jede Einstellung im Helm-Chart bereitgestellt ist, wenn Sie weitere erweiterte Einstellungen konfigurieren müssen.
-
Speichern Sie die aktualisierte Datei
config.yaml
. -
Installieren Sie das Helm-Chart auf Ihrem Cluster mit der aktualisierten Datei
config.yaml
.Wenn Sie über mehrere VPN-Bereitstellungen in einem einzelnen Cluster verfügen, können Sie Namenskonflikte vermeiden und zwischen Ihren Bereitstellungen unterscheiden, indem Sie aussagekräftigere Releasenamen als
vpn
verwenden. Um das Abschneiden des Releasenamens zu vermeiden, begrenzen Sie den Releasenamen auf maximal 35 Zeichen.helm install vpn iks-charts/strongswan -f config.yaml
-
Prüfen Sie den Status der Chartbereitstellung. Wenn das Diagramm fertig ist, hat das Feld STATUS in der Nähe der Ausgabe einen Wert von
DEPLOYED
.helm status vpn
-
Überprüfen Sie nach der Bereitstellung des Diagramms, dass die aktualisierten Einstellungen in der Datei
config.yaml
verwendet wurden.helm get values vpn
Es werden nur die Versionen des StrongSwan-Helm-Charts unterstützt, die in den letzten 6 Monaten veröffentlicht wurden. Stellen Sie sicher, dass das strongSwan-Helm-Chart fortlaufend mit aktuellen Features und Sicherheitskorrekturen aktualisiert wird.
strongSwan-VPN-Konnektivität testen und überprüfen
Nachdem Sie Ihr Helm-Chart bereitgestellt haben, testen Sie die VPN-Konnektivität.
-
Wenn das VPN im lokalen Gateway nicht aktiv ist, starten Sie das VPN.
-
Legen Sie die Umgebungsvariable
STRONGSWAN_POD
fest.export STRONGSWAN_POD=$(kubectl get pod -l app=strongswan,release=vpn -o jsonpath='{ .items[0].metadata.name }')
-
Prüfen Sie den Status des VPN. Der Status
ESTABLISHED
bedeutet, dass die VPN-Verbindung erfolgreich war.kubectl exec $STRONGSWAN_POD -- sudo ipsec status
Beispielausgabe
Security Associations (1 up, 0 connecting): k8s-conn[1]: ESTABLISHED 17 minutes ago, 172.30.xxx.xxx[ibm-cloud]...192.xxx.xxx.xxx[on-premises] k8s-conn{2}: INSTALLED, TUNNEL, reqid 12, ESP in UDP SPIs: c78cb6b1_i c5d0d1c3_o k8s-conn{2}: 172.21.0.0/16 172.30.0.0/16 === 10.91.152.xxx/26
-
Wenn Sie versuchen, die VPN-Konnektivität mit dem strongSwan-Helm-Chart zu erstellen, ist es wahrscheinlich, dass das VPN beim ersten Mal nicht den Status
ESTABLISHED
aufweist. Möglicherweise müssen Sie die lokalen VPN-Endpunkteinstellungen überprüfen und die Konfigurationsdatei mehrmals ändern, damit die Verbindung erfolgreich hergestellt wird.helm uninstall <release_name> -n <namespace>
ausführen- Korrigieren Sie die falschen Werte in der Konfigurationsdatei.
helm install vpn iks-charts/strongswan -f config.yaml
ausführen
Sie können im nächsten Schritt noch weitere Prüfungen ausführen.
-
Falls der VPN-Pod den Status
ERROR
aufweist oder immer wieder ausfällt und neu startet, kann dies an der Parametervalidierung deripsec.conf
-Einstellungen in der Konfigurationszuordnung des Charts liegen.- Prüfen Sie, ob dies der Fall ist, indem Sie mithilfe des Befehls
kubectl logs $STRONGSWAN_POD
in den Protokollen des strongSwan-Pods nach Validierungsfehlern suchen. - Wenn Validierungsfehler vorhanden sind, führen Sie
helm uninstall <release_name> -n <namespace>
aus - Korrigieren Sie die falschen Werte in der Konfigurationsdatei.
helm install vpn iks-charts/strongswan -f config.yaml
ausführen
- Prüfen Sie, ob dies der Fall ist, indem Sie mithilfe des Befehls
-
-
Sie können die VPN-Konnektivität weiter testen, indem Sie die fünf Helm-Tests ausführen, die in der strongSwan-Diagrammdefinition enthalten sind.
helm test vpn
- Wenn alle Tests bestanden werden, wird Ihre strongSwan-VPN-Verbindung erfolgreich eingerichtet.
- Wenn ein Test fehlschlägt, fahren Sie mit dem nächsten Schritt fort.
-
Zeigen Sie die Ausgabe eines fehlgeschlagenen Tests an, indem Sie die Protokolle des Testpods anzeigen.
kubectl logs <test_program>
Einige Tests haben Anforderungen, die optionale Einstellungen in der VPN-Konfiguration sind. Wenn einige Tests fehlschlagen, sind die Fehler möglicherweise akzeptabel, je nachdem, ob Sie diese optionalen Einstellungen angegeben haben. Suchen Sie in der folgenden Tabelle nach Informationen zu den einzelnen Tests und warum ein Test fehlschlagen könnte.
vpn-strongswan-check-config
- Validiert die Syntax der Datei
ipsec.conf
, die von der Dateiconfig.yaml
generiert wird. Dieser Test kann aufgrund von falschen Werten in der Dateiconfig.yaml
fehlschlagen. vpn-strongswan-check-state
- Prüft, ob die VPN-Verbindung den Status
ESTABLISHED
hat. Dieser Test kann aus den folgenden Gründen fehlschlagen.- Unterschiede zwischen den Werten in der Datei
config.yaml
und den lokalen VPN-Endpunkteinstellungen im Unternehmen. - Wenn der Cluster empfangsbereit ist (im Modus "listen") (für
ipsec.auto
istadd
festgelegt), ist die Verbindung auf der lokalen Unternehmensseite nicht eingerichtet.
- Unterschiede zwischen den Werten in der Datei
vpn-strongswan-ping-remote-gw
- Setzt ein Pinsignal an die öffentliche IP-Adresse von
remote.gateway
ab, die Sie in der Dateiconfig.yaml
konfiguriert haben. Wenn die VPN-Verbindung den StatusESTABLISHED
aufweist, können Sie das Ergebnis dieses Tests ignorieren. Wenn die VPN-Verbindung nicht den StatusESTABLISHED
aufweist, kann der Test aus den folgenden Gründen fehlschlagen.- Sie haben keine IP-Adresse für das lokalen VPN-Gateway im Unternehmen angegeben. Falls für
ipsec.auto
die Einstellungstart
festgelegt ist, ist die IP-Adresseremote.gateway
erforderlich. - ICMP-Pakete (Ping) werden von der Firewall geblockt.
- Sie haben keine IP-Adresse für das lokalen VPN-Gateway im Unternehmen angegeben. Falls für
vpn-strongswan-ping-remote-ip-1
- Setzt ein Pingsignal an die private
remote.privateIPtoPing
-IP-Adresse des lokalen VPN-Gateways vom VPN-Pod im Cluster ab. Dieser Test kann aus den folgenden Gründen fehlschlagen. \n - Sie haben keineremote.privateIPtoPing
-IP-Adresse angegeben. Wenn Sie absichtlich keine IP-Adresse angegeben haben, ist dieser Fehler zulässig. \n - Sie haben das Cluster-Pod-Teilnetz-CIDR172.30.0.0/16
nicht in derlocal.subnet
-Liste angegeben. vpn-strongswan-ping-remote-ip-2
- Setzt ein Pingsignal an die private
remote.privateIPtoPing
-IP-Adresse des lokalen VPN-Gateways über den Workerknoten im Cluster ab. Dieser Test kann aus den folgenden Gründen fehlschlagen. \n - Sie haben keineremote.privateIPtoPing
-IP-Adresse angegeben. Wenn Sie absichtlich keine IP-Adresse angegeben haben, ist dieser Fehler akzeptabel. \n - Sie haben das private Teilnetz des Cluster-Workerknotens nicht in derlocal.subnet
-Liste angegeben. |
-
Löschen Sie das Helm-Chart.
helm uninstall vpn -n <namespace>
-
Öffnen Sie die Datei
config.yaml
und korrigieren Sie die falschen Werte. -
Speichern Sie die aktualisierte Datei
config.yaml
. -
Installieren Sie das Helm-Chart auf Ihrem Cluster mit der aktualisierten Datei
config.yaml
. Die aktualisierten Eigenschaften werden in einer Konfigurationszuordnung für Ihr Chart gespeichert.helm install vpn iks-charts/strongswan -f config.yaml
-
Prüfen Sie den Status der Chartbereitstellung. Wenn das Diagramm fertig ist, hat das Feld STATUS in der Ausgabe den Wert
DEPLOYED
.
helm status vpn
- Überprüfen Sie nach der Bereitstellung des Diagramms, dass die aktualisierten Einstellungen in der Datei
config.yaml
verwendet wurden.
helm get values vpn
- Bereinigen Sie die aktuellen Testpods.
kubectl get pods -a -l app=strongswan-test
kubectl delete pods -l app=strongswan-test
- Führen Sie die Tests erneut aus.
helm test vpn
strongSwan-VPN-Datenverkehr nach Namensbereich oder Workerknoten beschränken
Wenn Sie über ein Single-Tenant-Cluster verfügen oder wenn Sie über ein Multi-Tenant-Cluster verfügen, in dem Clusterressourcen von den Tenants gemeinsam verwendet werden, können Sie den VPN-Datenverkehr für die einzelnen strongSwan-Bereitstellungen auf Pods in bestimmten Namensbereichen beschränken. Wenn Sie über ein Multi-Tenant-Cluster verfügen, in dem Clusterressourcen ganz bestimmten Tenants zugeordnet sind, können Sie den VPN-Datenverkehr für die einzelnen strongSwan-Bereitstellungen auf die den einzelnen Tenants zugeordneten Workerknoten beschränken.
strongSwan-VPN-Datenverkehr nach Namensbereich
Wenn Sie über ein Single-Tenant-Cluster verfügen oder über ein Multi-Tenant-Cluster verfügen, können Sie den VPN-Datenverkehr auf Pods in bestimmten Namensbereichen beschränken.
Nehmen wir beispielsweise an, dass Pods nur in einem bestimmten Namensbereich, my-secure-namespace
, Daten über das VPN senden und empfangen sollen. Sie möchten nicht, dass Pods in anderen Namensbereichen wie kube-system
,
ibm-system
oder default
auf Ihr lokales Netz zugreifen. Um den VPN-Datenverkehr auf my-secure-namespace
zu beschränken, können Sie globale Calico-Netzrichtlinien erstellen.
Prüfen Sie die folgenden Überlegungen und Einschränkungen, bevor Sie diese Lösung einsetzen.
-
Sie müssen das strongSwan Helm-Diagramm nicht im angegebenen Namensbereich bereitstellen. Der strongSwan-VPN-Pod und die Routen-Dämongruppe können im Namensbereich
kube-system
oder in einem beliebigen anderen Namensbereich bereitgestellt werden. Wenn das strongSwan-VPN nicht im angegebenen Namensbereich bereitgestellt wird, schlägt der Helm-Test fürvpn-strongswan-ping-remote-ip-1
fehl. Dieser Fehler wird erwartet und ist zulässig. Der Test setzt ein Pingsignal an die private IP-Adresseremote.privateIPtoPing
des lokalen VPN-Gateways von einem VPN-Pod ab, der sich nicht in dem Namensbereich mit direktem Zugriff auf das ferne Teilnetz befindet. Der VPN-Pod kann jedoch weiterhin Datenverkehr an Pods in den Namensbereichen weiterleiten, die über Routen zu dem fernen Teilnetz verfügen, und der Datenverkehr kann weiter ordnungsgemäß fließen. Der VPN-Status lautet immer nochESTABLISHED
und die Pods im angegebenen Namensbereich können über das VPN eine Verbindung herstellen. -
Die globalen Calico-Netzrichtlinien in den folgenden Schritten verhindern nicht, dass Kubernetes-Pods, die Hostnetzbetrieb verwenden, Daten über das VPN senden und empfangen. Wenn ein Pod mit Hostnetzbetrieb konfiguriert wird, kann die in dem Pod ausgeführte App an den Netzschnittstellen des Workerknotens, auf dem sie sich befindet, empfangsbereit sein. Diese Hostnetzbetrieb-Pods können in allen Namensbereichen vorhanden sein. Um festzustellen, welche Pods über Hostvernetzung verfügen, führen Sie
kubectl get pods --all-namespaces -o wide
aus und suchen Sie nach Pods, die keine172.30.0.0/16
-Pod-IP-Adresse haben. Wenn Sie ausschließen möchten, dass Hostnetzbetrieb-Pods Daten über das VPN senden und empfangen, können Sie die folgenden Optionen in Ihrer Bereitstellungsdateivalues.yaml
festlegen:local.subnet: 172.30.0.0/16
undenablePodSNAT: false
. Diese Konfigurationseinstellungen machen alle Kubernetes-Pods über die VPN-Verbindung für das ferne Netz zugänglich. Es sind jedoch nur die Pods über das VPN erreichbar, die sich im angegebenen sicheren Namensbereich befinden.
Vorbereitende Schritte
- Stellen Sie das strongSwan-Helm-Chart bereit und stellen Sie sicher, dass die VPN-Konnektivität ordnungsgemäß funktioniert.
- Installieren und konfigurieren Sie die Calico-CLI.
Zum Begrenzen des VPN-Datenverkehrs für einen bestimmten Namensbereich
-
Erstellen Sie eine globale Calico-Netzrichtlinie namens
allow-non-vpn-outbound.yaml
. Diese Richtlinie ermöglicht es allen Namensbereichen, weiterhin ausgehenden Datenverkehr an alle Ziele zu senden, mit Ausnahme des fernen Teilnetzes, auf das das strongSwan-VPN zugreift. Ersetzen Sie<remote.subnet>
durch dieremote.subnet
, die Sie in der Helmvalues.yaml
-Konfigurationsdatei angegeben haben. Um mehrere entfernte Subnetze anzugeben, siehe die Dokumentation Calico.apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: allow-non-vpn-outbound spec: selector: has(projectcalico.org/namespace) egress: - action: Allow destination: notNets: - <remote.subnet> order: 900 types: - Egress
-
Wenden Sie die Richtlinie an.
calicoctl apply -f allow-non-vpn-outbound.yaml --config=filepath/calicoctl.cfg
-
Erstellen Sie eine weitere globale Calico-Netzrichtlinie namens
allow-vpn-from-namespace.yaml
. Diese Richtlinie ermöglicht es nur einem bestimmten Namensbereich, ausgehenden Datenverkehr an das ferne Teilnetz zu senden, auf das das strongSwan-VPN zugreift. Ersetzen Sie<namespace>
durch den Namensbereich, der auf das VPN zugreifen kann, und<remote.subnet>
durch dieremote.subnet
, die Sie in der Helmvalues.yaml
-Konfigurationsdatei angegeben haben. Um mehrere Namensräume oder entfernte Subnetze anzugeben, siehe die Dokumentation Calico.apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: allow-vpn-from-namespace spec: selector: projectcalico.org/namespace == "<namespace>" egress: - action: Allow destination: nets: - <remote.subnet> order: 900 types: - Egress
-
Wenden Sie die Richtlinie an.
calicoctl apply -f allow-vpn-from-namespace.yaml --config=filepath/calicoctl.cfg
-
Verifizieren Sie, dass die globalen Netzrichtlinien in Ihrem Cluster erstellt werden.
calicoctl get GlobalNetworkPolicy -o wide --config=filepath/calicoctl.cfg
strongSwan-VPN-Datenverkehr nach Workerknoten beschränken
Wenn Sie über mehrere strongSwan-VPN-Bereitstellungen in einem Multi-Tenant-Cluster verfügen, können Sie den VPN-Datenverkehr für jede Bereitstellung auf bestimmte Workerknoten beschränken, die den einzelnen Tenants zugeordnet sind.
Wenn Sie ein strongSwan-Helm-Chart bereitstellen, wird eine strongSwan-VPN-Bereitstellung erstellt. Die strongSwan-VPN-Pods werden auf allen Workerknoten ohne Taints bereitgestellt. Außerdem wird eine Kubernetes-Dämongruppe erstellt. Diese Dämongruppe konfiguriert automatisch Routen auf allen Workerknoten ohne Taint in dem Cluster zu den jeweiligen fernen Teilnetzen. Der strongSwan-VPN-Pod verwendet die Routen auf Workerknoten, um Anforderungen an das ferne Teilnetz in dem lokalen Netz weiterzuleiten.
Routen werden nicht für Knoten mit Taint konfiguriert, es sei denn, Sie geben den Taint in der Einstellung für Tolerierungen (tolerations
) in der Datei value.yaml
ein. Indem Sie Workerknoten mit Taints versehen, können
Sie verhindern, dass auf diesen Workern VPN-Routen konfiguriert werden. Anschließend können Sie den Taint in der Einstellung für Tolerierungen (tolerations
) nur für die VPN-Bereitstellung angeben, die Sie auf den Workern mit
Taint zulassen möchten. Auf diese Weise verwenden die strongSwan-VPN-Pods für die Bereitstellung des Helm-Charts eines Tenants nur die Routen auf den Workerknoten dieses Tenants, um Datenverkehr über die VPN-Verbindung an das ferne Teilnetz
weiterzuleiten.
Prüfen Sie die folgenden Überlegungen und Einschränkungen, bevor Sie diese Lösung einsetzen.
- Standardmäßig platziert Kubernetes App-Pods auf allen verfügbaren Workerknoten ohne Taints. Um sicherzustellen, dass diese Lösung ordnungsgemäß funktioniert, muss jeder Tenant zunächst sicherstellen, dass ihre App-Pods nur auf Workern bereitgestellt werden, die mit einem Taint für den richtigen Tenant versehen sind. Außerdem muss jeder Workerknoten mit Taint auch über eine Tolerierung verfügen, damit die App-Pods auf dem Knoten platziert werden können. Weitere Informationen über Färbungen und Toleranzen finden Sie in der Dokumentation Kubernetes.
- Clusterressourcen werden möglicherweise nicht optimal genutzt, weil keiner der Tenants App-Pods auf den gemeinsam genutzten Knoten ohne Taints platzieren kann.
In den folgenden Schritten zum Einschränken des strongSwan-VPN-Datenverkehrs nach Workerknoten wird dieses Beispielszenario verwendet: Angenommen, Sie verfügen über einen Multi-Tenant-Cluster von IBM Cloud Kubernetes Service mit sechs Workerknoten. Der Cluster unterstützt Tenant A und Tenant B. Die Workerknoten werden wie folgt mit einem Taint versehen.
- Zwei Workerknoten haben Taints, sodass nur Tenant A-Pods auf den Workern geplant sind.
- Zwei Workerknoten haben Taints, sodass nur Tenant B-Pods auf den Workern geplant sind.
- Zwei Workerknoten haben keine Taints, weil mindestens zwei Workerknoten erforderlich sind, damit die strongSwan-VPN-Pods und die IP der Lastausgleichsfunktion ausgeführt werden können.
Zum Begrenzen des VPN-Datenverkehrs an mit Taint versehene Knoten für jeden Tenant.
-
Zum Begrenzen des VPN-Datenverkehrs nur auf dedizierte Worker für Tenant A geben Sie im vorliegenden Beispiel die folgende
toleration
in der Dateivalues.yaml
für das strongSwan-Helm Chart für Tenant A an.tolerations: - key: dedicated operator: "Equal" value: "tenantA" effect: "NoSchedule"
Diese Tolerierung ermöglicht das Ausführen der Routing-Dämongruppe auf den beiden Workerknoten mit dem Taint
dedicated="tenantA"
und auf den beiden Workerknoten ohne Taints. The strongSwan VPN pods for this deployment run on the two untainted worker nodes. -
Zum Begrenzen des VPN-Datenverkehrs nur auf dedizierte Worker für Tenant B geben Sie im vorliegenden Beispiel die folgende
toleration
in der Dateivalues.yaml
für das strongSwan-Helm-Chart für Tenant B an.tolerations: - key: dedicated operator: "Equal" value: "tenantB" effect: "NoSchedule"
Diese Tolerierung ermöglicht das Ausführen der Routing-Dämongruppe auf den beiden Workerknoten mit dem Taint
dedicated="tenantB"
und auf den beiden Workerknoten ohne Taints. Die strongSwan-VPN-Pods für diese Bereitstellung werden auch auf den beiden Workerknoten ohne Taints ausgeführt.
strongSwan-Helm-Chart aktualisieren oder inaktivieren
Stellen Sie sicher, dass Ihr strongSwan-Helm-Chart durchgängig auf die neuesten Features und Sicherheitskorrekturen aktualisiert wird.
Im Folgenden finden Angaben zu den unterstützten Versionen des strongSwan-Helm-Charts. In der Regel wird die Version des Charts 6 Monate nach dem Freigabedatum nicht weiter unterstützt.
- Unterstützt: 2.7.9, 2.7.8, 2.7.7, 2.7.6, 2.7.5, 2.7.4, 2.7.3, 2.7.2
- Veraltet: 2.7.1, 2.7.0, 2.6.9, 2.6.8, 2.6.7
- Nicht unterstützt: 2.6.6 und früher
Versionsdaten und Änderungsprotokolle für jede strongSwan Helm Diagrammversion finden Sie unter helm show readme iks-charts/strongswan
und im Abschnitt Version History
.
Das Upgrade Ihres strongSwan-Helm-Charts auf die neueste Version können Sie mit dem Befehl helm upgrade
durchführen.
helm upgrade -f config.yaml <release_name> iks-charts/strongswan
Sie können die VPN-Verbindung inaktivieren, indem Sie das Helm-Chart löschen.
helm uninstall <release_name> -n <namespace>
Virtual Router Appliance verwenden
Virtual Router Appliance (VRA) stellt das aktuelle Vyatta 5600-Betriebssystem für x86-Bare-Metal-Server bereit. Sie können eine VRA-Instanz als VPN-Gateway verwenden, um eine sichere Verbindung zu einem lokalen Netz herzustellen.
Der gesamte öffentliche und private Netzverkehr, der in die Cluster-VLANs eintritt oder sie verlässt, wird über eine VRA geleitet. Sie können die VRA als VPN-Endpunkt einsetzen, um einen verschlüsselten IPSec-Tunnel zwischen Servern in der IBM Cloud-Infrastruktur und lokalen Ressourcen zu erstellen. Das folgende Diagramm zeigt beispielsweise, wie eine App auf einem ausschließlich privaten Workerknoten in IBM Cloud Kubernetes Service mit einem lokalen Server über eine VRA-VPN-Verbindung kommunizieren kann:
-
Eine App in Ihrem Cluster,
myapp2
, empfängt eine Anforderung von einem Ingress- oder LoadBalancer-Service und muss eine sichere Verbindung mit Daten in Ihrem lokalen Netz herstellen. -
Da
myapp2
sich auf einem Workerknoten in einem rein privaten VLAN befindet, fungiert die VRA als sichere Verbindung zwischen den Workerknoten und dem lokalen Netz. Die VRA verwendet die IP-Zieladresse, um zu bestimmen, welche Netzpakete an das lokale Netz gesendet werden sollen. -
Die Anforderung wird verschlüsselt und über den VPN-Tunnel an das lokale Rechenzentrum gesendet.
-
Die eingehende Anforderung passiert die lokale Firewall und wird an den VPN-Tunnelendpunkt (Router) zugestellt, wo sie entschlüsselt wird.
-
Der VPN-Tunnelendpunkt (Router) leitet die Anforderung abhängig von der in Schritt 2 angegebenen Ziel-IP-Adresse an den lokalen Server oder Mainframe weiter. Die erforderlichen Daten werden über die VPN-Verbindung über denselben Prozess an
myapp2
zurückgesendet.
Virtual Router Appliance-Instanz einrichten
-
Um eine VPN-Verbindung mithilfe der VRA zu aktivieren, konfigurieren Sie VRRP auf der VRA.
Wenn Sie über eine vorhandene Router Appliance verfügen und dann einen Cluster hinzufügen, werden die neuen portierbaren Teilnetze, die für den Cluster bestellt sind, nicht in der Router Appliance konfiguriert. Um Vernetzungsservices verwenden zu können, müssen Sie das Routing zwischen den Teilnetzen in demselben VLAN durch übergreifende VLAN-Verarbeitung oder VRF aktivieren ermöglichen.