DNSZone
Fonctionnalité en cours de déploiement. L'interface décrite ici est celle de la prochaine livraison : elle peut encore évoluer, et n'est pas forcément activée sur votre tenant.
Activé progressivement sur les tenants.
apiVersion | dns.stackngo.io/v1alpha1 |
kind | DNSZone |
| Appliqué par | sng apply (manifeste) ou sng dns zone create |
| Commandes liées | sng dns zone list · describe · delete, sng template gen DNSZone |
À quoi ça sert
Une DNSZone confie à StackNGO le DNS d'un domaine que vous avez acheté ailleurs. La
plateforme vous demande de prouver que le domaine est à vous (un TXT à poser chez son
hébergeur DNS actuel), crée la zone chez son fournisseur, puis vous donne les serveurs de noms
à déclarer chez votre registraire. Une fois la délégation constatée, la zone est Active :
vos DNSRecord et les ingress.domain de vos App y sont publiés.
Exemple minimal
apiVersion: dns.stackngo.io/v1alpha1
kind: DNSZone
metadata:
name: exemple.fr
spec:
domain: exemple.fr
sng apply exemple-fr.yml
sng dns zone describe exemple.fr # TXT à poser, puis serveurs de noms
Équivalent sans manifeste : sng dns zone create exemple.fr (objet nommé exemple.fr).
Exemple complet commenté
apiVersion: dns.stackngo.io/v1alpha1
kind: DNSZone
metadata:
name: exemple.fr # doit être égal à spec.domain
spec:
domain: exemple.fr # domaine enregistrable (pas un sous-domaine), minuscules, sans point final ; immuable
source: Bring # seule valeur acceptée : domaine apporté (défaut)
Le status est écrit par la plateforme seulement :
status:
phase: Provisioned
verification:
name: _stackngo-verify.exemple.fr
value: sng-verify-4b1f0e9c2a7d4e6b8c3f1a2d5e7b9c0f
nameServers: [dns200.anycast.me, ns200.anycast.me]
verifiedAt: "2026-10-07T09:41:12Z"
observedGeneration: 1
conditions:
- type: Ready
status: "False"
reason: AwaitingDelegation
message: "déclarer chez le registrar les serveurs de noms : dns200.anycast.me, ns200.anycast.me"
Champs
Règles de validation croisées
Le schéma refuse, dès sng apply :
spec.sourceautre queBring:l'achat de domaine (source: Purchase) n'est pas encore disponible;- une modification de
spec.domainaprès création :domain est immuable; - un
spec.domainhors du motif DNS (minuscules, au moins un point, 253 caractères au plus).
L'API refuse en plus, dès sng apply ou sng dns zone create :
- un domaine non enregistrable : sous-domaine (
domaine "shop.exemple.fr" : sous-domaine de exemple.fr, déclarer exemple.fr) ou TLD inconnu ; - un domaine de la plateforme StackNGO (
stackngo.app,stackngo.fr), ou ce qui est dessous ou dessus ; - un domaine déjà déclaré par une autre
DNSZonede votre tenant, tous contextes confondus (409) ; - une autre clé que
namedansmetadata(tenant, labels, annotations).
Après l'enregistrement, la plateforme vérifie aussi que le domaine n'est pas déjà pris par un
autre tenant (phase Rejected, raison Taken).
DNSZone
DNSZone : domaine apporté par votre tenant ; la plateforme en vérifie la propriété avant de publier le moindre enregistrement.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
apiVersion string | dns.stackngo.io/v1alpha1 | ||
kind string | DNSZone | ||
metadata ObjectMeta | Seul metadata.name est à renseigner (nom de la ressource dans votre tenant). | ||
spec DNSZoneSpec | |||
status DNSZoneStatus |
DNSZoneSpec
DNSZoneSpec : un domaine dont votre tenant confie le DNS à StackNGO.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
domain string | Domain : domaine enregistrable (ex. exemple.fr), jamais un sous-domaine ; immuable. | MaxLength: 253 Pattern: ^([a-z0-9]([-a-z0-9]\{0,61\}[a-z0-9])?\.)+[a-z]([-a-z0-9]\{0,61\}[a-z0-9])?$ | |
source string | Source : Bring (domaine apporté). Purchase (achat du domaine via StackNGO) n'est pas encore disponible. | Bring | Enum: [Bring Purchase] Optional: {} |
DNSZoneStatus
DNSZoneStatus : avancement de la prise en charge du domaine.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
phase string | Phase : Pending (preuve de propriété attendue), Verified, Provisioned (délégation NS attendue), Active (enregistrements servis), Lost (délégation perdue) ou Rejected (domaine refusé). | Optional: {} | |
verification Verification | Verification : TXT à poser pour prouver la propriété (phase Pending). | Optional: {} | |
nameServers string array | NameServers : serveurs à déclarer chez le registrar du domaine. | Optional: {} | |
verifiedAt Time | VerifiedAt : date de la preuve de propriété. | Optional: {} | |
delegationLostAt Time | DelegationLostAt : premier constat d'une délégation absente après activation. | Optional: {} | |
observedGeneration integer | Dernière version du manifeste prise en compte par la plateforme. | Optional: {} | |
conditions Condition array | Conditions de la zone (Ready…), avec leur reason et un message lisible, par exemple l'attente de la délégation. | Optional: {} |
Verification
Verification : enregistrement TXT à poser chez le DNS actuel du domaine.
| Champ | Description | Défaut | Validation |
|---|---|---|---|
name string | Name : nom complet de l'enregistrement TXT. | ||
value string | Value : valeur attendue. |
Statut et conditions
| Phase | Signification | Ce que vous faites |
|---|---|---|
Pending | en attente de la preuve de propriété ; status.verification donne le TXT | poser le TXT chez l'hébergeur DNS actuel |
Verified | propriété prouvée (verifiedAt) ; la plateforme crée la zone | attendre |
Provisioned | zone créée ; status.nameServers rempli ; vos enregistrements y sont déjà écrits | déclarer les serveurs de noms chez le registraire |
Active | tous les serveurs de noms publics du domaine sont ceux de la zone | rien |
Lost | délégation absente depuis plus de 72 h ; plus rien n'est publié | reposer le TXT, puis rétablir la délégation |
Rejected | domaine refusé ; verification et nameServers vidés | corriger ou supprimer la zone |
Une seule condition, Ready : True quand la zone est Active (y compris pendant le délai
de grâce d'une délégation absente).
reason | Phase | Ready | Explication | Action |
|---|---|---|---|---|
AwaitingVerification | Pending | False | TXT absent ou différent ; relu toutes les minutes | poser status.verification.name TXT status.verification.value |
AwaitingProvisioning | Verified | False | zone pas encore créée chez le fournisseur ; relu toutes les 5 min | attendre ; support si cela dure plus d'un jour ouvré |
ProviderError | Verified | False | le fournisseur DNS n'a pas répondu | attendre, nouvel essai automatique |
AwaitingDelegation | Provisioned | False | serveurs de noms publics différents de status.nameServers ; relu toutes les 5 min | déclarer tous les serveurs de nameServers, et eux seuls |
DelegationCheckFailed | toute phase après Verified | inchangé | la lecture publique des serveurs de noms a échoué | attendre |
Delegated | Active | True | délégation constatée ; recontrôlée toutes les heures | — |
DelegationMissing | Active | True | délégation absente, depuis moins de 72 h (delegationLostAt) | rétablir les serveurs de noms |
DelegationLost | Lost | False | délégation absente depuis plus de 72 h, ou nouvelle preuve attendue | voir Perte de délégation |
NotRegistrable | Rejected | False | sous-domaine ou suffixe inconnu ; le message nomme le domaine à déclarer | déclarer le domaine enregistrable |
PlatformDomain | Rejected | False | le domaine recouvre un domaine de StackNGO | — |
Taken | Rejected | False | le domaine … est déjà déclaré par un autre DNSZone (autre tenant) | contacter le support si le domaine est à vous |
Invalid | Rejected | False | source non disponible | retirer source |
Une zone Rejected est réévaluée : si la cause disparaît (domaine libéré par l'autre tenant,
par exemple), elle repasse Pending.
Ce qui se passe à l'application
Création. Le domaine est réservé pour votre tenant, de façon unique sur toute la plateforme : aucun autre client ne peut le déclarer. Cette réservation est liée à votre tenant tel qu'il existe : un tenant supprimé puis recréé sous le même nom n'hérite pas du domaine.
Mise à jour. spec.domain est immuable. Une réapplication identique ne change rien.
Ce qui se passe quand vous supprimez
sng dns zone delete exemple.fr ou sng kind delete DNSZone exemple.fr. Les deux sont refusés
(409, N enregistrement(s) utilisent encore la zone "exemple.fr", les supprimer d'abord) tant
que des DNSRecord de votre tenant visent la zone, tous contextes confondus. Sinon, le domaine est libéré, plus aucun nom du domaine n'est
publié, et les App qui l'utilisent passent DomainNotAllowed. Rendez ensuite la délégation à
votre ancien hébergeur DNS. Aucun champ deletionPolicy.
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
sng dns zone create : domaine "www.exemple.fr" : sous-domaine de exemple.fr, déclarer exemple.fr | un sous-domaine a été déclaré | déclarer exemple.fr ; les sous-domaines se gèrent par DNSRecord |
sng dns zone create affiche TXT de vérification pas encore calculé | le TXT n'était pas prêt au bout de 20 secondes | sng dns zone describe exemple.fr quelques instants plus tard |
Reste Pending, AwaitingVerification | TXT posé au mauvais endroit (chez le registraire alors que le DNS est hébergé ailleurs), ou nom doublé (_stackngo-verify.exemple.fr.exemple.fr) | poser le TXT chez l'hébergeur qui sert le domaine, nom _stackngo-verify ; dig +short TXT _stackngo-verify.exemple.fr @1.1.1.1 |
Reste Provisioned, AwaitingDelegation | un ancien serveur de noms est conservé, ou la propagation n'est pas finie | ne garder que les serveurs de nameServers ; dig +short NS exemple.fr |
Rejected, Taken | un autre tenant a déclaré ce domaine | contacter le support avec la preuve de propriété |
sng dns zone delete ou sng kind delete DNSZone : 409 … enregistrement(s) utilisent encore la zone | des DNSRecord visent la zone | sng dns record list --zone exemple.fr, les supprimer |
Active puis Lost | domaine expiré, ou serveurs de noms changés depuis plus de 72 h | renouveler le domaine ; reposer le TXT puis rétablir la délégation |
Voir aussi
- Guides : Apporter un domaine, Enregistrements, Domaines sur une App.
- CLI :
sng dns,sng domain(achat, à venir). - Autres kinds :
DNSRecord,App(ingress.domain). - Sécurité : Vos domaines vous appartiennent.