Workflows d’automatisation
Configurer les réseaux virtuels via l’API
Créez un réseau privé, rattachez des serveurs avec ou sans tag, suivez l’application de la modification réseau et configurez le VLAN dans le système.
Deux serveurs déployés rejoignent leur propre réseau privé ; chaque requête acceptant un {serviceId} s’exécute donc une fois par serveur.
1. Choisir un ID VLAN
Chaque réseau nécessite un localVlanId de 11 à 4094 inutilisé par les autres réseaux de l’organisation. Obtenir la disponibilité VLAN liste les tags pris dans data.usedVlanIds, indique le prochain libre dans data.nextFreeVlanId et la plage dans minVlanId et maxVlanId :
curl --request GET \
--url https://api.serverside.com/v1/networking/virtual-networks/availability \
--header 'Authorization: Bearer <api-key>'2. Créer le réseau
Créez le réseau virtuel avec le tag de l’étape 1 dans localVlanId :
curl --request POST \
--url https://api.serverside.com/v1/networking/virtual-networks \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "backend",
"type": "PRIVATE",
"localVlanId": 100
}
'L’API ne choisit pas de tag : localVlanId est requis à chaque création. La réponse est 201 avec le réseau, dont data.id est le {networkId} des étapes suivantes. Nous ne fournissons ni sous-réseau ni passerelle à un réseau privé. Ses serveurs utilisent une plage privée choisie par vous ; ce guide utilise 10.20.0.0/24. Les trames auxquelles vous ajoutez vos propres ID VLAN 802.1Q atteignent les autres serveurs avec leurs tags intacts.
3. Choisir le segment de chaque serveur
Un serveur rejoint un réseau sur un segment : un port, ou deux ports agrégés. Obtenir les capacités réseau liste les ports physiques sous data.availableInterfaces, chacun avec id, name, macAddress et son segmentId, et isConfigured activé s’il appartient déjà à un segment. data.availableBondingGroups liste les ports pouvant être agrégés.
curl --request GET \
--url https://api.serverside.com/v1/baremetal/{serviceId}/networking/capabilities \
--header 'Authorization: Bearer <api-key>'Deux configurations fonctionnent :
- Taguée, sur le segment existant. Le segment portant le réseau Internet non tagué porte aussi le réseau privé, tagué avec son
localVlanId. Aucun second câble. - Native, sur un second port. Un port libre devient un segment indépendant et le réseau privé y arrive non tagué.
Pour la configuration native, Créer un segment accepte les interfaceIds à inclure : un port libre, ou deux de la même entrée availableBondingGroups pour former un bond LACP, nommé bond0, bond1, etc. par l’hôte. Un bond prend exactement deux ports, un sur chaque commutateur de la paire, avec le même numéro sur les deux.
curl --request POST \
--url https://api.serverside.com/v1/baremetal/{serviceId}/segments \
--header 'Authorization: Bearer <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"interfaceIds": [
"<interface-id>"
]
}
'La réponse est 201 avec le nouveau segment et son segmentId.
4. Rattacher les serveurs
Appelez Rattacher un service une fois par serveur. En configuration taguée, segmentId est celui portant le réseau Internet, affiché sur sa ligne dans Lister les réseaux virtuels du service, et isNative vaut false. En configuration native, utilisez le nouveau segment de l’étape 3 avec isNative à true.
curl --request POST \
--url https://api.serverside.com/v1/networking/virtual-networks/{networkId}/attachments \
--header 'Authorization: Bearer <api-key>' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'Content-Type: application/json' \
--data '
{
"serviceId": "<service-id>",
"segmentId": "<segment-id>",
"isNative": false
}
'202 signifie que la modification est en cours d’acheminement vers les commutateurs ; le corps contient son status, APPLYING, et l’heure d’acceptation dans since. Renvoyer la requête avec la même Idempotency-Key répond 202 avec la modification initiale. Sans clé, renvoyer le même rattachement une fois appliqué répond 204 sans rien changer.
5. Attendre la modification
Deux endroits indiquent la progression. Obtenir l’état du service contient networkChange, avec status à APPLYING ou FAILED et l’heure de début dans since. Pendant l’application, un objet degraded apparaît si un commutateur échoue de façon répétée : consecutiveFailures, la dernière failureCategory et nextAttemptAt pour la prochaine tentative automatique, ou null si la modification attend notre personnel. Une modification terminée à FAILED a été annulée sur le commutateur ; sa failureCategory en indique la cause.
Lister les réseaux virtuels du service montre le status de chaque rattachement : ATTACHING, puis ATTACHED ou ATTACH_FAILED.
curl --request GET \
--url https://api.serverside.com/v1/baremetal/{serviceId}/virtual-networks \
--header 'Authorization: Bearer <api-key>'Un serveur n’accepte qu’une modification réseau à la fois ; tout autre rattachement, détachement ou changement de segment attend sa fin.
6. Configurer le système d’exploitation
Un réseau tagué nécessite une interface VLAN sur le serveur, au-dessus de l’interface portant le segment. Obtenir un service bare metal la nomme : chaque entrée de interfaces représente un segment et son name est l’interface écrite par le déploiement sur l’hôte, soit le nom du port, soit bond0, bond1, etc. pour un bond dont bondMode vaut LACP. Après modification des segments, interfaces affiche la configuration que le prochain déploiement écrira ; l’hôte garde ses anciennes interfaces jusqu’à réinstallation.
Sous Linux avec iproute2, lorsque le name du segment est eno1 et la variable shell VLAN contient le tag :
ip link add link eno1 name eno1.$VLAN type vlan id $VLAN
ip addr add 10.20.0.1/24 dev eno1.$VLAN
ip link set eno1.$VLAN up
Attribuez 10.20.0.2/24 au second serveur ; les deux peuvent communiquer par le réseau privé. Ces commandes ne persistent pas après redémarrage ; ajoutez les mêmes paramètres à la configuration réseau de la distribution (netplan sous Ubuntu, /etc/network/interfaces sous Debian, NetworkManager sur la famille RHEL).
Les réseaux privés transportent des trames jumbo avec une MTU de 9000 ; chaque serveur doit avoir cette valeur sur son interface privée :
ip link set eno1 mtu 9000
ip link set eno1.$VLAN mtu 9000
Linux ne définit pas la MTU d’une interface VLAN au-dessus de celle de son port parent ; c’est pourquoi eno1 passe d’abord à 9000. En configuration taguée, ce port porte aussi le réseau Internet non tagué et la MTU supérieure s’y applique aussi ; un réseau privé sur un port propre sépare les deux.
Serveurs dans différents datacenters
Un réseau appartient à l’organisation ; ni la requête de création ni le réseau ne nomme de datacenter. L’extension d’un réseau privé entre datacenters arrive prochainement. D’ici là, gardez tous les serveurs d’un réseau privé dans le même datacenter.
Retirer un serveur du réseau
Détacher un service nomme le rattachement dans le chemin par l’ID du serveur et du segment :
curl --request DELETE \
--url https://api.serverside.com/v1/networking/virtual-networks/{networkId}/attachments/{serviceId}/{segmentId} \
--header 'Authorization: Bearer <api-key>' \
--header 'Idempotency-Key: <idempotency-key>'L’appel répond 202 et suit la progression de la même façon, via DETACHING jusqu’à disparition de la ligne, ou DETACH_FAILED. Utilisez une nouvelle clé : celle ayant rattaché le réseau sur ce segment renverrait le rattachement sans rien détacher. Les adresses du serveur sur ce réseau retournent libres dans leurs blocs et leurs DNS inverses sont supprimés. Lister les services rattachés montre les serveurs encore présents, une ligne par serveur avec chacun de ses rattachements.
Supprimer le réseau
Supprimer un réseau virtuel répond 204 lorsqu’aucun serveur n’y est rattaché et qu’il ne contient aucun bloc d’IP :
curl --request DELETE \
--url https://api.serverside.com/v1/networking/virtual-networks/{networkId} \
--header 'Authorization: Bearer <api-key>'Détachez d’abord chaque serveur et restituez les blocs d’IP du réseau comme dans Gérer les adresses IP.
Retirer le réseau public d’un serveur
Un serveur de base de données ou d’application peut retirer son réseau public et rester accessible uniquement par le privé. Son réseau public est son réseau d’accès Internet, la ligne managedBy à SYSTEM dans Lister les réseaux virtuels du service. Il se détache avec le même appel Détacher un service, avec l’id du réseau et le segmentId. Seule l’API le permet : la console cloud ne retire que les rattachements privés. Connectez-vous d’abord par l’adresse privée, car SSH sur l’adresse publique cesse de répondre après le détachement.
Les adresses du serveur retournent libres dans les blocs du réseau ; les blocs y restent, facturés sur l’abonnement du serveur. Sans adresse sur ce réseau, le serveur ne peut être réinstallé : un déploiement exige une IPv4 principale sur un réseau natif, sinon il répond 422 PRIMARY_IPV4_REQUIRED. Pour rétablir l’accès, rattachez le réseau en natif et attribuez au serveur une IPv4 de son bloc, car la première IPv4 reçue sur un réseau y devient principale. Après détachement, le réseau disparaît de la liste du serveur ; Lister les réseaux virtuels le montre à nouveau avec includeManaged=true :
curl --request GET \
--url 'https://api.serverside.com/v1/networking/virtual-networks?includeManaged=true' \
--header 'Authorization: Bearer <api-key>'Le serveur perd aussi sa propre route vers Internet ; nous n’exploitons pas de passerelle NAT. Les mises à jour et appels sortants doivent donc passer par l’un de vos serveurs conservant une adresse publique, configuré comme routeur NAT ou proxy sur le réseau privé.
Erreurs
| Statut | code | Cause |
|---|---|---|
400 | VALIDATION_ERROR | localVlanId absent ou hors de 11 à 4094. |
404 | ENTITY_NOT_FOUND | Réseau ou serveur hors de votre organisation, ou détachement d’un rattachement inexistant. |
409 | VLAN_ID_IN_USE | Un autre réseau possède ce localVlanId. |
409 | INTERFACE_IN_USE | Un port du nouveau segment appartient déjà à un autre. |
409 | NATIVE_NETWORK_ALREADY_EXISTS | Le segment porte déjà un réseau natif non tagué. |
409 | NETWORK_ATTACHMENT_ALREADY_EXISTS | Deux requêtes ont rattaché le même réseau au même segment au même instant. |
409 | NETWORK_CHANGE_IN_PROGRESS | Une modification du serveur est encore appliquée. Réessayez après Retry-After (10 secondes). |
409 | OPERATION_IN_PROGRESS | Déploiement, effacement ou test matériel en cours ; rattachements et segments attendent sa fin. |
409 | IDEMPOTENCY_KEY_REUSED | La Idempotency-Key a déjà servi sur ce serveur pour un autre réseau ou segment. |
409 | NETWORK_HAS_ASSIGNED_SERVICE | Suppression alors qu’un serveur reste rattaché. |
409 | NETWORK_HAS_PREFIXES | Suppression alors que le réseau contient encore un bloc d’IP. |
422 | NETWORK_RENAME_BLOCKED | Modifier un réseau virtuel a envoyé un name pour un réseau d’accès Internet. |
422 | VALIDATION_FAILED | Une règle a refusé la requête ; le code du détail la nomme. SEGMENT_NOT_FOUND : segmentId hors des segments du serveur. NETWORK_VLAN_UNSUPPORTED : rattachement tagué (isNative à false) d’un réseau sans ID VLAN. Pour Créer un segment : INTERFACE_NOT_FOUND pour un port absent du serveur, INTERFACE_UNAVAILABLE pour un port non relié à un commutateur, BOND_INVALID pour des ports ne pouvant former un bond. |
422 | SERVICE_LOCKED, SERVICE_SUSPENDED, SERVICE_DELETING | Rattachement, détachement ou changement de segment sur un serveur verrouillé ou suspendu, ou en cours de suppression. |