Automatiseringsworkflows
Virtuele netwerken instellen via de API
Maak een privénetwerk, koppel servers getagd of ongetagd, volg de netwerkwijziging tot deze is toegepast en configureer het VLAN in het besturingssysteem.
Twee uitgerolde servers worden op hun eigen privénetwerk aangesloten. Elk verzoek met een {serviceId} voert u daarom eenmaal per server uit.
1. Kies een VLAN-ID
Elk netwerk vereist een localVlanId van 11 tot 4094 die geen ander netwerk in de organisatie gebruikt. VLAN-beschikbaarheid ophalen geeft de gebruikte tags als data.usedVlanIds, de volgende vrije als data.nextFreeVlanId en de reeks in minVlanId en maxVlanId:
curl --request GET \
--url https://api.serverside.com/v1/networking/virtual-networks/availability \
--header 'Authorization: Bearer <api-key>'2. Maak het netwerk
Roep Virtueel netwerk aanmaken aan met de tag uit stap 1 als 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
}
'De API kiest geen tag voor u; elk aanmaakverzoek bevat dus localVlanId. Het antwoord is 201 met het netwerk, waarvan data.id de {networkId} voor latere stappen is. Een privénetwerk krijgt geen subnet of gateway van ons. De servers gebruiken een door u gekozen privéreeks; deze handleiding gebruikt 10.20.0.0/24. Frames die u binnen het netwerk van eigen 802.1Q VLAN-ID’s voorziet, bereiken de andere servers met hun tags intact.
3. Kies het segment van elke server
Een server sluit aan op een netwerk via een segment: één poort of twee gebundelde poorten. Netwerkmogelijkheden ophalen toont de fysieke poorten onder data.availableInterfaces, elk met id, name, macAddress en de bijbehorende segmentId. isConfigured staat aan voor een poort die al in een segment zit. data.availableBondingGroups toont welke poorten kunnen worden gebundeld.
curl --request GET \
--url https://api.serverside.com/v1/baremetal/{serviceId}/networking/capabilities \
--header 'Authorization: Bearer <api-key>'Twee indelingen werken:
- Getagd, op het bestaande segment. Het segment dat het internettoegangsnetwerk ongetagd draagt, draagt ook het privénetwerk met zijn
localVlanIdals tag. Een tweede kabel is niet nodig. - Native, op een tweede poort. Een vrije poort wordt een eigen segment en het privénetwerk komt daar ongetagd aan.
Voor de native indeling accepteert Segment aanmaken de op te nemen interfaceIds: één vrije poort, of twee uit dezelfde vermelding van availableBondingGroups voor een LACP-bond. De host noemt deze bond0, bond1, enzovoort. Een bond bestaat uit precies twee poorten, één op elke switch van het paar, met hetzelfde poortnummer op beide.
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>"
]
}
'Het antwoord is 201 met het nieuwe segment en zijn segmentId.
4. Koppel de servers
Roep Dienst koppelen eenmaal per server aan. Voor de getagde indeling gebruikt u de segmentId van het internettoegangsnetwerk, te vinden op de netwerkregel bij Virtuele netwerken van een dienst opvragen, met isNative op false. Voor de native indeling gebruikt u het nieuwe segment uit stap 3, met isNative op 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 betekent dat de wijziging onderweg is naar de switches. De body bevat de status, APPLYING, en het acceptatietijdstip als since. Hetzelfde verzoek met dezelfde Idempotency-Key antwoordt met 202 en de oorspronkelijke wijziging. Zonder sleutel geeft dezelfde koppeling, nadat deze is toegepast, 204 zonder iets te wijzigen.
5. Wacht op de wijziging
Twee plaatsen tonen de voortgang. Dienststatus ophalen bevat networkChange, met status APPLYING of FAILED en het begintijdstip als since. Tijdens het toepassen verschijnt een degraded-object als een switch herhaaldelijk faalt: consecutiveFailures, de laatste failureCategory en nextAttemptAt voor de volgende automatische poging, of null wanneer de wijziging op ons personeel wacht. Een wijziging die eindigt als FAILED is op de switch teruggedraaid; failureCategory noemt de oorzaak.
Virtuele netwerken van een dienst opvragen toont de eigen status van elke koppeling: ATTACHING, daarna ATTACHED of ATTACH_FAILED.
curl --request GET \
--url https://api.serverside.com/v1/baremetal/{serviceId}/virtual-networks \
--header 'Authorization: Bearer <api-key>'Een server verwerkt één netwerkwijziging tegelijk. De volgende koppeling, ontkoppeling of segmentwijziging wacht dus tot deze klaar is.
6. Configureer het besturingssysteem
Een getagd netwerk vereist een VLAN-interface op de server, boven op de interface die het segment draagt. Dedicated server ophalen noemt deze: elke vermelding in interfaces is een segment en name is de interface die een implementatie op de host schrijft. Dit is de poortnaam zelf, of bond0, bond1, enzovoort voor een bond met bondMode LACP. Na een segmentwijziging toont interfaces de indeling die de volgende implementatie zal schrijven; de host houdt zijn oude interfaces tot een herinstallatie.
Op Linux met iproute2, als de name van het segment eno1 is en de shellvariabele VLAN de netwerktag bevat:
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
Geef de tweede server 10.20.0.2/24; de twee kunnen elkaar dan via het privénetwerk bereiken. Deze opdrachten blijven niet na een herstart bewaard. Zet dezelfde instellingen in de netwerkconfiguratie van de distributie (netplan op Ubuntu, /etc/network/interfaces op Debian, NetworkManager op RHEL-systemen) om ze te behouden.
Privénetwerken ondersteunen jumboframes met een MTU van 9000. Elke server op het netwerk heeft dezelfde waarde op zijn privé-interface nodig:
ip link set eno1 mtu 9000
ip link set eno1.$VLAN mtu 9000
Linux stelt de MTU van een VLAN-interface niet hoger in dan die van de onderliggende poort. Daarom gaat eno1 eerst naar 9000. In de getagde indeling draagt die poort ook het ongetagde internettoegangsnetwerk en geldt de hogere MTU daar eveneens. Een privénetwerk op een eigen poort houdt de twee gescheiden.
Servers in verschillende datacenters
Een netwerk hoort bij de organisatie. Het aanmaakverzoek en het netwerk noemen geen datacenter. Uitbreiding van een privénetwerk tussen datacenters komt binnenkort. Houd tot die tijd alle servers van een privénetwerk in hetzelfde datacenter.
Verwijder een server van het netwerk
Dienst ontkoppelen noemt de koppeling in het pad met de server-ID en de segment-ID:
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>'Het antwoord is 202 en de voortgang wordt op dezelfde manier getoond, via DETACHING totdat de regel verdwijnt, of naar DETACH_FAILED. Gebruik een nieuwe sleutel: de sleutel waarmee het netwerk aan dat segment werd gekoppeld, geeft de koppeling opnieuw terug en ontkoppelt niets. De adressen die de server op dat netwerk had, worden vrij in hun blokken en hun reverse-DNS-records worden verwijderd. Gekoppelde diensten opvragen toont de overgebleven servers, één regel per server met al zijn koppelingen.
Verwijder het netwerk
Virtueel netwerk verwijderen antwoordt met 204 zodra er geen server meer aan gekoppeld is en het geen IP-blok bevat:
curl --request DELETE \
--url https://api.serverside.com/v1/networking/virtual-networks/{networkId} \
--header 'Authorization: Bearer <api-key>'Ontkoppel eerst alle servers en lever eventuele IP-blokken van het netwerk in zoals beschreven bij IP-adressen beheren.
Verwijder het openbare netwerk van een server
Een database- of applicatieserver kan zijn openbare netwerk verwijderen en alleen via het privénetwerk bereikbaar blijven. Zijn openbare netwerk is het internettoegangsnetwerk, de regel met managedBy SYSTEM bij Virtuele netwerken van een dienst opvragen. U ontkoppelt het met dezelfde aanroep Dienst ontkoppelen, met de id en segmentId van dat netwerk. Alleen de API kan dit, omdat de cloudconsole uitsluitend privékoppelingen verwijdert. Log eerst via het privéadres in, want SSH naar het openbare adres reageert niet meer zodra het netwerk is ontkoppeld.
De serveradressen worden weer vrij in de IP-blokken van het netwerk. De blokken blijven op het netwerk staan en worden via het serverabonnement gefactureerd. Zonder adres daar kan de server niet opnieuw worden geïnstalleerd: een implementatie vereist een primair IPv4-adres op een native netwerk en wordt anders geweigerd met 422 PRIMARY_IPV4_REQUIRED. Herstel dit door het netwerk opnieuw als native te koppelen en de server een IPv4-adres uit zijn blok te geven. Het eerste IPv4-adres dat een server op een netwerk krijgt, wordt daar immers het primaire adres. Na ontkoppeling verdwijnt het netwerk uit de serverlijst; Virtuele netwerken opvragen toont het weer met includeManaged=true:
curl --request GET \
--url 'https://api.serverside.com/v1/networking/virtual-networks?includeManaged=true' \
--header 'Authorization: Bearer <api-key>'De server verliest ook zijn eigen route naar internet. Wij bieden geen NAT-gateway; pakketupdates en uitgaande aanroepen moeten dus via een van uw servers met een openbaar adres lopen, ingesteld als NAT-router of proxy op het privénetwerk.
Fouten
| Status | code | Oorzaak |
|---|---|---|
400 | VALIDATION_ERROR | localVlanId ontbreekt of valt buiten 11 tot 4094. |
404 | ENTITY_NOT_FOUND | Het netwerk of de server hoort niet bij uw organisatie, of een ontkoppeling noemt een niet-bestaande koppeling. |
409 | VLAN_ID_IN_USE | Een ander netwerk in de organisatie gebruikt die localVlanId. |
409 | INTERFACE_IN_USE | Een poort in een nieuw segment hoort al bij een ander segment. |
409 | NATIVE_NETWORK_ALREADY_EXISTS | Het segment draagt al een native, ongetagd netwerk. |
409 | NETWORK_ATTACHMENT_ALREADY_EXISTS | Twee verzoeken koppelden tegelijk hetzelfde netwerk aan hetzelfde segment. |
409 | NETWORK_CHANGE_IN_PROGRESS | Een wijziging voor die server wordt nog toegepast. Probeer opnieuw na Retry-After (10 seconden). |
409 | OPERATION_IN_PROGRESS | Er draait een implementatie, wisbewerking of hardwaretest; koppelingen en segmenten wachten tot deze klaar is. |
409 | IDEMPOTENCY_KEY_REUSED | De Idempotency-Key is op die server al voor een ander netwerk of segment gebruikt. |
409 | NETWORK_HAS_ASSIGNED_SERVICE | Verwijderen terwijl er nog een server aan het netwerk is gekoppeld. |
409 | NETWORK_HAS_PREFIXES | Verwijderen terwijl het netwerk nog een IP-blok bevat. |
422 | NETWORK_RENAME_BLOCKED | Virtueel netwerk wijzigen verstuurde een name voor een internettoegangsnetwerk. |
422 | VALIDATION_FAILED | Een regel weigerde het verzoek; de code van het detail noemt welke. SEGMENT_NOT_FOUND: de segmentId hoort niet bij de server. NETWORK_VLAN_UNSUPPORTED: een getagde koppeling (isNative false) van een netwerk zonder VLAN-ID. Bij Segment aanmaken: INTERFACE_NOT_FOUND voor een poort die niet op deze server zit, INTERFACE_UNAVAILABLE voor een poort zonder switchverbinding, BOND_INVALID voor poorten die geen bond kunnen vormen. |
422 | SERVICE_LOCKED, SERVICE_SUSPENDED, SERVICE_DELETING | Koppelen, ontkoppelen of een segment wijzigen op een server die vergrendeld of opgeschort is, of wordt verwijderd. |