Tutoriel : Mettre en place une connexion VPN avec OKS
Dans ce tutoriel, vous apprendrez à configurer une connexion VPN entre votre client gateway et le réseau de votre projet OKS.
Vous pouvez configurer une connexion VPN pour sécuriser les communications entre ces réseaux et vous assurer que leurs applications ne sont pas exposées publiquement. Pour en savoir plus, voir À propos des connexions VPN.
Configurer une connexion VPN
Une connexion VPN est une ressource qui appartient à un projet, et qui est contrôlée par une ressource personnalisée au niveau du cluster.
|
Pour configurer une connexion VPN, vous devez créer un manifeste d’objet personnalisé en suivant cette structure :
apiVersion: oks.dev/v1beta
kind: VpnConnection
metadata:
name: NAME_OF_VPNC
spec:
publicIP: 50.60.70.80
bgpASN: 65500
staticRoutesOnly: true
vpnRoutes:
- 192.168.0.0/16
clientGatewayConfigurationStorage:
namespace: VPNC-STORAGE-NAMESPACE
configMapName: NAME_OF_VPNC-config
secretName: NAME_OF_VPNC-secret
vpnOptions:
tunnelInsideIpRange: 169.254.254.1/30
phase2Options:
preSharedKey:
secretName: NAME_OF_VPNC-secret
secretNamespace: NAME_OF_VPNC-namespace
secretKey: VPNC_PSK
Cet exemple contient les champs suivants que vous devez spécifier :
-
publicIP: L’IP publique de la client gateway. Elle ne peut pas être modifiée après création. -
bgpASN: Le numéro de système autonome (ASN) pour le protocole Border Gateway Protocol (BGP) de l’IP de la client gateway. Il ne peut pas être modifié après création. Si vous n’avez pas d’ASN, vous pouvez en choisir un entre64512et65534, ou entre4200000000et4294967295. -
(optionnel)
staticRoutesOnly: Indique si le routage est défini sur statique (true|false). Par défaut,false. -
(optionnel)
vpnRoutes: Un ensemble de routes statiques pour la connexion VPN, en notation CIDR. Uniquement disponible sistaticRoutesOnlyest défini surtrue. -
(optionnel)
clientGatewayConfigurationStorage: Définit l’emplacement de stockage pour les informations de la client gateway et la clé pré-partagée fournie par l’IaaS.-
namespace: Le namespace pour les objets ConfigMap et Secret contenant les informations fournies par l’IaaS. Par défaut,default. -
configMapName: Le nom du ConfigMap pour la configuration de la client gateway. Par défaut,[NAME_OF_VPNC]-config. -
secretName: Le nom du Secret contenant la clé pré-partagée. Par défaut,[NAME_OF_VPNC]-secret.
-
-
(optionnel)
vpnOptions: Permet de fournir des paramètres supplémentaires pour la connexion VPN.-
tunnelInsideIpRange: La plage d’IP à l’intérieur du tunnel. Il doit s’agir d’un bloc CIDR/30de la plage169.254.254.0/24. Cette plage doit être différente pour chaque tunnel. -
(optionnel)
phase2Options: Définit les paramètres de la phase 2.-
preSharedKey: Une ou plusieurs clés pré-partagées existantes, entre 8 et 64 caractères. Une clé doit contenir uniquement les caractèresa-z,A-Z,0-9, ou._, et ne doit pas commencer par0.Chaque objet doit faire référence à un Secret, un namespace et une clé existants.
Exemple de SecretapiVersion: v1 data: PRE_SHARED_KEY: VPNC_PSK kind: Secret metadata: name: NAME_OF_VPNC-secret namespace: default-
secretName: Le nom du Secret existant contenant la clé pré-partagée. -
secretNamespace: Le nom du namespace existant où est situé le Secret. -
secretKey: Le nom de la clé associée à la clé pré-partagée dans le Secret.
-
-
-
Obtenir des informations sur votre connexion VPN
Vous pouvez obtenir des informations sur votre ressource VpnConnection à l’aide de kubectl, dans le champ status de l’objet.
La commande kubectl get vpnc vous permet de récupérer le status de VpnConnection :
$ kubectl get vpnc NAME_OF_VPNC \
-o yaml
Cette commande contient l’option suivante que vous pouvez avoir besoin de spécifier :
-
(optionnel)
output: Le format de sortie de la réponse (json|yaml|wide).Utiliser la valeur
widerenvoie un tableau détaillé qui contient deux champs supplémentaires :CGW PUBLIC IPetBGP ASN.
...
status:
clientGatewayId: cgw-de3cb41f
clientGatewayState: available
storage:
configMapName: NAME_OF_VPNC-config
namespace: default
secretName: NAME_OF_VPNC-secret
vgwTelemetries:
- AcceptedRouteCount: 0
LastStateChangeDate: "2025-07-29T08:08:16.078Z"
OutsideIpAddress: 142.44.57.51
State: DOWN
StateDescription: IPSEC IS DOWN
virtualGatewayId: vgw-c3ee9e3f
virtualGatewayLinkState: attached
virtualGatewayState: available
vpnConnectionId: vpn-e2f2c082
vpnConnectionState: available
La commande kubectl get vpnc renvoie les éléments suivants :
-
clientGatewayId: L’identifiant de la client gateway utilisée pour la connexion VPN. -
clientGatewayState: L’état de la client gateway utilisée pour la connexion VPN. -
storage: L’emplacement de stockage pour la configuration et la clé pré-partagée.-
configMapName: Le nom du ConfigMap contenant la configuration. -
secretName: Le nom du Secret contenant la clé pré-partagée. -
namespace: Le namespace contenant les objets ConfigMap et Secret.
-
-
vgwTelemetries: Un ensemble de détails sur l’état du tunnel.-
AcceptedRouteCount: Le nombre de routes acceptées. -
LastStateChangeDate: La date du dernier changement d’état. -
OutsideIpAddress: L’IP publique de la virtual gateway. -
State: L’état du tunnel. -
StateDescription: La description de l’état actuel du tunnel.
-
-
virtualGatewayId: L’identifiant de la virtual gateway. -
virtualGatewayLinkState: L’état de la virtual gateway. -
vpnConnectionId: L’identifiant de la connexion VPN. -
vpnConnectionState: L’état de la connexion.
Configurer votre chiffrement VPN
Obtenir votre configuration de client gateway
La configuration de la client gateway est stockée dans le status de son ConfigMap, dans le champ CGW_CONFIGUTATION_JSON.
La commande kubectl get configmap vous permet de récupérer le ConfigMap :
$ kubectl get configmap NAME_OF_VPNC-config \
-n default \
-o yaml | yq -r '.data.CGW_CONFIGURATION_JSON' | jq
La commande kubectl get configmap renvoie une sortie YAML contenant les informations suivantes :
{
"ClientGatewayId": "cgw-de3cb41f",
"ConnectionType": "ipsec.1",
"Tunnels": [
{
"ClientGateway": {
"Bgp": {
"Asn": 65500,
"HoldTime": 30
},
"TunnelInside": {
"IpRange": "169.254.254.2/30"
},
"TunnelOutside": {
"IpAddress": "50.60.70.80"
}
},
"Ike": {
"AuthenticationProtocole": "SHA2_256_128 HMAC",
"EncryptionProtocol": "256-bit AES-CBC",
"Lifetime": 28800,
"Mode": "main",
"PerfectForwardSecrecyGroup": 16
},
"Ipsec": {
"AuthenticationProtocol": "SHA2_256_128 HMAC",
"ClearDfBit": true,
"DeadPeerDetection": {
"Interval": 30,
"Retries": 3
},
"EncryptionProtocol": "256-bit AES-CBC",
"FragmentationBeforeEncryption": true,
"Lifetime": 3600,
"Mode": "tunnel",
"PerfectForwardSecercyGroup": 16,
"Protocol": "esp",
"TcpMssAdjustment": 1387
},
"VirtualGateway": {
"Bgp": {
"Asn": 50624,
"HoldTime": 30
},
"TunnelInside": {
"IpRange": "169.254.254.1/30"
},
"TunnelOutside": {
"IpAddress": "142.44.57.51"
}
}
}
],
"VirtualGatewayId": "vgw-c3ee9e3f"
}
Cas d’usage : Connecter votre VPN à des ressources externes avec StrongSwan
Vous pouvez utiliser la configuration de votre client gateway pour configurer une connexion VPN à l’aide de StrongSwan. Pour en savoir plus, voir la documentation StrongSwan.
config setup
charondebug="all"
uniqueids=yes
strictcrlpolicy=no
conn oks-tunnel
type=tunnel
auto=start
keyexchange=ikev1
authby=secret
left=%defaultroute
# leftid contains client gateway public IP - provided by the user
leftid=50.60.70.80
# leftsubnet contains client gateway subnet
leftsubnet=192.168.0.0/16
# right contains virtual gateway public IP - provided by OKS
right=142.44.57.51
# rightsubnet contains OKS project CIDR - can be retrieved via OKS CLI: https://docs.outscale.com/en/userguide/Getting-Information-About-a-Specific-Project.html
rightsubnet=10.50.0.0/16
ike=aes256-sha256-modp4096!
ikelifetime=28800s
esp=aes256-sha256-modp4096!
lifetime=3600s
margintime=9m
keyingtries=%forever
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
50.60.70.80 142.44.57.51 : PSK "VPNC_PSK"
Supprimer une connexion VPN
Pour supprimer une connexion VPN, vous devez supprimer l’objet correspondant dans l’un des clusters du projet. Sinon, la connexion VPN est uniquement supprimée à la suppression du projet.
|
Lorsque vous supprimez une ressource VpnConnection, sa ConfigMap et ses Secrets créés automatiquement sont également supprimés. |
La commande kubectl delete vpnc vous permet de supprimer votre connexion VPN :
$ kubectl delete vpnc NAME_OF_VPNC
Votre connexion VPN est supprimée lorsque le message suivant est renvoyé :
vpnconnection.oks.dev "NAME_OF_VPNC" deleted
Pages connexes