Aller au contenu

Lab 07 : Connexion VPN entre OKS et un réseau de VM

À la fin de ce lab, vous serez capable de :

  • Créer une connexion VPN IPsec depuis un cluster OKS
  • Comprendre le rôle des composants :
    • Virtual Gateway
    • Client Gateway
    • Tunnel VPN
  • Configurer un client VPN StrongSwan côté VM
  • Tester la connectivité Pod OKS ↔ VM via le tunnel VPN

Avant de commencer ce TP, assurez-vous de disposer des éléments suivants :

Création de la connexion VPN depuis le cluster OKS

Section intitulée « Création de la connexion VPN depuis le cluster OKS »

La connexion VPN est créée à l’aide d’une ressource Kubernetes personnalisée de type VpnConnection. Cette ressource permet à OKS de configurer automatiquement :

  • un Virtual Gateway
  • une connexion VPN IPsec
  • la génération automatique de la clé pré-partagée (PSK)
  • le stockage de la configuration du client VPN

Créez un fichier nommé vpn-connection.yaml avec le contenu suivant :

apiVersion: oks.dev/v1beta
kind: VpnConnection
metadata:
name: oks-vpn
spec:
publicIp: <IP_PUBLIQUE_DE_LA_VM>
bgpAsn: 65000
staticRoutesOnly: true
vpnRoutes:
- 10.10.0.0/16
clientGatewayConfigurationStorage:
namespace: default
configMapName: oks-vpn-config
secretName: oks-vpn-secret
  • publicIp : adresse IP publique de la VM jouant le rôle de Client Gateway
  • bgpAsn : numéro d’ASN utilisé pour identifier le client gateway
  • staticRoutesOnly : indique que le routage est statique
  • vpnRoutes : plage CIDR du réseau distant (réseau des VM)
  • clientGatewayConfigurationStorage :
    • définit l’emplacement où OKS stocke la configuration VPN côté client

Appliquez la configuration sur le cluster OKS :

Terminal window
kubectl apply -f vpn-connection.yaml

Après la création de la ressource, vérifiez que la connexion VPN est correctement prise en compte par OKS.

Terminal window
kubectl get vpnc

Exemple de sortie attendue :

Terminal window
NAME VPN CONNECTION ID VPN CONNECTION STATE VGW PUBLIC IP TUNNEL STATE TUNNEL STATE DESCRIPTION
oks-vpn vpn-2210a74d available 142.44.58.83 DOWN IPSEC IS DOWN

Après la création de la ressource VpnConnection, OKS crée automatiquement deux objets Kubernetes dans le namespace concerné :

  • un Secret pour stocker la clé pré-partagée (PSK)
  • un ConfigMap pour stocker la configuration du Client Gateway (IP du Virtual Gateway, paramètres des tunnels, etc.)

Le Secret oks-vpn-secret contient la clé pré-partagée utilisée pour l’authentification IPsec entre le Client Gateway et le Virtual Gateway OKS.

Affichage du Secret :

Terminal window
kubectl get secret oks-vpn-secret -o yaml

Extrait significatif :

Terminal window
data:
PRE_SHARED_KEY: XXXXXXXXXXXXXXXXXXXX
kind: Secret
type: Opaque
  • La valeur est encodée en Base64.
  • Cette clé devra être utilisée côté VM lors de la configuration de StrongSwan.

Le ConfigMap oks-vpn-config contient l’ensemble des paramètres nécessaires à la configuration du client VPN.

Affichage du ConfigMap :

Terminal window
kubectl get configmap oks-vpn-config -o yaml

Le champ principal est :

Terminal window
data:
CGW_CONFIGURATION_JSON: '{...}'

Ce JSON contient notamment :

  • l’ID du Client Gateway
  • l’ID du Virtual Gateway
  • les IP publiques des endpoints VPN
  • les IP internes des tunnels
  • les paramètres IKE et IPsec :
    • algorithmes de chiffrement
    • authentification
    • lifetimes
    • DPD (Dead Peer Detection)
    • Perfect Forward Secrecy

Configuration du Client Gateway (StrongSwan) sur la VM

Section intitulée « Configuration du Client Gateway (StrongSwan) sur la VM »

Dans cette étape, nous allons configurer la machine virtuelle afin qu’elle établisse le tunnel VPN IPsec avec le Virtual Gateway OKS, en utilisant les informations fournies dans le ConfigMap et le Secret.

La clé pré-partagée est stockée dans le Secret oks-vpn-secret sous forme encodée en Base64.

Récupérez la clé :

Terminal window
kubectl get secret oks-vpn-secret \
-o jsonpath='{.data.PRE_SHARED_KEY}' | base64 -d

Notez cette valeur : elle sera utilisée dans la configuration StrongSwan.

À partir du ConfigMap oks-vpn-config, identifiez les informations suivantes :

  • l’IP publique du Virtual Gateway
  • l’IP publique du Client Gateway
  • les plages IP internes des tunnels (169.254.x.x/30)
  • les paramètres cryptographiques IKE / IPsec

Ces informations sont contenues dans le champ CGW_CONFIGURATION_JSON.

👉 Cliquez ici pour accéder au TP pour installer et configurer StrongSwan

Retournez côté cluster OKS et vérifiez l’état du tunnel VPN :

Terminal window
kubectl get vpnc oks-vpn
# Output
NAME VPN CONNECTION ID VPN CONNECTION STATE VGW PUBLIC IP TUNNEL STATE TUNNEL STATE DESCRIPTION
oks-vpn vpn-2210a74d available 142.44.58.83 UP IPSEC IS UP

Déployez un pod de test dans le cluster OKS :

Terminal window
kubectl run vpn-test-pod \
--image=alpine \
--restart=Never \
-it -- sh

Depuis le pod, testez la connectivité vers la VM :

Terminal window
ping <IP_PRIVEE_VM>

Si la configuration est correcte, les paquets doivent être reçus.

Terminal window
If you don't see a command prompt, try pressing enter.
/ # ping 10.1.0.32
PING 10.1.0.32 (10.1.0.32): 56 data bytes
64 bytes from 10.1.0.32: seq=0 ttl=60 time=2.250 ms
64 bytes from 10.1.0.32: seq=1 ttl=60 time=2.112 ms
64 bytes from 10.1.0.32: seq=2 ttl=60 time=2.183 ms
64 bytes from 10.1.0.32: seq=3 ttl=60 time=2.001 ms
64 bytes from 10.1.0.32: seq=4 ttl=60 time=2.031 ms
64 bytes from 10.1.0.32: seq=5 ttl=60 time=2.053 ms