Skip to main content
Cette page explique le fonctionnement des points de terminaison publics, comment en déclarer un lors de la création d’une sandbox et comment s’y connecter. Un point de terminaison public attribue à un service exécuté dans une sandbox une adresse accessible aux clients depuis Internet. Vous le demandez lors de la création de la sandbox, et la plateforme provisionne l’acheminement, le DNS et l’accès réseau nécessaires. L’adresse reste attribuée à la sandbox pendant toute la durée de son exécution. Il existe deux types de points de terminaison, qui se distinguent par l’endroit où s’effectue la terminaison TLS :
  • HTTPS : la plateforme assure la terminaison TLS en périphérie avec un certificat qu’elle provisionne et renouvelle, puis transmet la requête à votre port en HTTP non chiffré.
  • TLS passthrough : la plateforme achemine la connexion vers votre port au moyen de Server Name Indication (SNI), sans la déchiffrer. Votre charge de travail assure elle-même la terminaison TLS et gère ses propres certificats.
Choisissez TLS passthrough lorsque la charge de travail doit détenir elle-même la clé privée : TLS mutuel, client qui épingle un certificat ou protocole autre que HTTP.

Choisir l’authentification

Ces exemples s’exécutent sur une capacité sans serveur, sauf si une section précise CoreWeave Kubernetes Service (CKS). Choisissez l’identifiant d’authentification du compte propriétaire de vos Sandbox. Pour obtenir une clé ou un jeton, consultez Choisir et obtenir des identifiants. Enregistrez la configuration correspondant à votre langage dans le même répertoire que les scripts que vous exécutez à partir de cette page. Les exemples Python importent AUTH depuis sandbox_auth.py. Les exemples TypeScript importent client depuis sandbox-client.mts. Ces fichiers sélectionnent l’authentification sans stocker votre identifiant d’authentification. Pour Python, utilisez un environnement virtuel actif. Pour TypeScript, installez d’abord le client avec npm install @coreweave/cwsandbox@1.0.0.
Utilisez votre clé API Forge avec l’intégration wandb du SDK. Remplacez [WANDB-API-KEY] par votre clé API :
sandbox_auth.py
Pour un placement sur CKS, choisissez le jeton CoreWeave, activez un exécuteur et définissez placement_mode="cks" lors de la création de la sandbox ou dans SandboxDefaults. En TypeScript, choisissez le jeton CoreWeave et définissez un tableau runnerIds non vide pour sélectionner CKS. Créer une session Python avec auth=AUTH authentifie également les Sandbox qui lui appartiennent. Conservez le même identifiant d’authentification pour vous reconnecter à vos Sandbox, les lister ou les nettoyer. L’exemple Python utilisant un jeton de partage nécessite cwsandbox 1.16.0 ou une version ultérieure, ainsi qu’un déploiement prenant en charge les jetons de partage HTTPS. L’identifiant d’authentification que vous configurez dans cette section authentifie les opérations du SDK, telles que la création et la suppression de Sandbox. Il est distinct du jeton de partage du point de terminaison que les appelants utilisent pour accéder à une URL HTTPS protégée.

Comparer les deux types

Les deux types sont accessibles depuis Internet. En HTTPS avec OPEN et en TLS passthrough, la plateforme n’authentifie pas les appelants. C’est à la charge de travail d’appliquer le contrôle d’accès dont vous avez besoin. En HTTPS avec SHARE_TOKEN, le jeton émis est requis à chaque requête. Toute personne en possession de ce jeton peut accéder au point de terminaison protégé.

Déclarer un point de terminaison

Déclarez les points de terminaison dans la liste services lors de la création de la sandbox. Les ports restent fixes pendant toute la durée de vie de la sandbox, et aucun appel ne permet d’exposer un port sur une sandbox déjà en cours d’exécution. Pour attribuer un point de terminaison public à un service, définissez sur celui-ci visibility=ServiceVisibility.PUBLIC ainsi qu’une valeur endpoint. Un service simple n’a pas de valeur endpoint. Par exemple, Service(port=8080, name="web") laisse la visibilité et le point de terminaison non définis : il déclare un port local au conteneur sans demander d’exposition externe. Pour un service simple, la visibilité détermine son accessibilité via le réseau de services du déploiement. Elle ne demande ni URL HTTPS publique ni adresse TLS passthrough. Pour exiger un jeton, utilisez EndpointAuth.SHARE_TOKEN comme indiqué dans Se connecter avec un jeton de partage. Pour un point de terminaison HTTPS sans authentification de l’appelant par la plateforme, définissez kind=EndpointKind.HTTPS et auth=EndpointAuth.OPEN :
Pour un point de terminaison en mode TLS passthrough, définissez kind=EndpointKind.TLS_PASSTHROUGH et laissez auth non défini. La commande que vous exécutez doit assurer elle-même la terminaison TLS sur le port, car la plateforme transfère la connexion sans la déchiffrer :
Une même sandbox peut combiner les deux types de points de terminaison, y compris des points de terminaison HTTPS OPEN et SHARE_TOKEN. Les règles suivantes s’appliquent :
  • Les ports et les noms doivent être uniques dans l’ensemble des entrées services, y compris les noms générés pour les ports sans nom.
  • Les entrées comportant un endpoint nécessitent visibility=PUBLIC. Définissez protocol=TCP ou ne définissez pas protocol. La plateforme rejette les points de terminaison UDP et SCTP.
  • Les entrées simples sans endpoint peuvent ne pas définir de visibilité ou utiliser PRIVATE, PUBLIC ou CUSTOM. Elles peuvent déclarer TCP, UDP ou SCTP. Si aucun protocole n’est défini, TCP est utilisé par défaut. L’exposition effective dépend des capacités et de la politique du déploiement. Ces champs ne créent pas de point de terminaison public. Pour modifier les sources autorisées des services CUSTOM existants, voir Politiques réseau dynamiques.
  • Ne combinez pas des services simples exposés avec des entrées de point de terminaison. Dans une sandbox comportant des points de terminaison, ne définissez la visibilité d’aucun service simple. En l’absence de point de terminaison, utilisez au plus une valeur de visibilité exposée pour l’ensemble des services simples.
  • Omettez auth et request_timeout_seconds en mode TLS passthrough. En Python, passez None plutôt que 0. Le SDK rejette tout délai d’expiration défini, y compris 0.
  • Une limite de la plateforme plafonne le nombre de services qu’une sandbox peut déclarer. Les opérateurs configurent ce plafond pour leur déploiement.

Se connecter avec un jeton de partage

Pour exiger l’authentification de la plateforme sur un point de terminaison HTTPS, définissez auth=EndpointAuth.SHARE_TOKEN. Lisez sandbox.endpoint_share_token depuis le handle qui crée la sandbox, puis envoyez le résultat de as_headers() avec chaque requête. Cet assistant définit l’en-tête X-Sandbox-Share-Token. La plateforme vérifie le jeton avant de transférer la requête à votre service HTTP. En TypeScript, définissez auth: "share_token" et envoyez sandbox.endpointShareToken dans l’en-tête de requête X-Sandbox-Share-Token. Le jeton est renvoyé uniquement lors de la création. Les opérations Get, list et Sandbox.from_id() ne le renvoient pas. Le handle original le conserve entre les appels à wait() et get_status(). Si la réponse initiale ne le contient pas, sandbox.start().result() relance la récupération sur le même handle de création. Si la récupération ne renvoie toujours aucun jeton, arrêtez la sandbox et créez-en une nouvelle. Gardez le jeton secret : le dictionnaire renvoyé par as_headers() contient l’identifiant d’authentification. Ne journalisez pas ce dictionnaire. L’exemple Python suivant démarre un service HTTP d’une durée de 5 minutes derrière un point de terminaison HTTPS protégé. Il attend l’attribution de l’URL, puis relance les requêtes authentifiées jusqu’à ce que l’application et la route soient prêtes. Après une requête réussie, il vérifie qu’une requête anonyme est bien rejetée. Le gestionnaire de contexte arrête la sandbox à la fin de l’exemple.
Pour le même service HTTP avec auth=EndpointAuth.OPEN, une requête anonyme aboutit dès que le service est prêt. Aucun jeton de partage n’est requis. Pour modifier le mode d’authentification, créez une nouvelle sandbox. Une même sandbox peut combiner les deux modes, et le jeton ne protège alors que ses points de terminaison SHARE_TOKEN. La référence des points de terminaison, générée automatiquement, décrit la version 1.14.2 du SDK Python, qui prend en charge OPEN mais est antérieure à l’introduction de SHARE_TOKEN.

Lire l’adresse attribuée

La plateforme attribue l’adresse. Vous ne pouvez pas choisir le nom d’hôte ni fournir votre propre domaine. Récupérez-la depuis la sandbox plutôt que de la construire vous-même, car la zone DNS varie d’un cluster à l’autre et ne fait pas partie du contrat d’API. Les adresses en TLS passthrough sont fournies dans service_addresses au format host:port, et les URL HTTPS dans service_urls. Les deux listes restent distinctes : un point de terminaison TLS n’apparaît jamais dans service_urls.
Pour le TLS passthrough, vous devriez obtenir une sortie semblable à celle-ci :
Le port annoncé est le port d’écoute TLS de la plateforme, et non le port auquel votre processus se lie dans la sandbox. Dans cet exemple, la charge de travail écoute sur 8443 et les clients se connectent à 443. Les deux types d’adresses deviennent lisibles à des moments différents du démarrage de la sandbox :
  • Une adresse TLS passthrough est attribuée dès la création de la sandbox : elle figure donc dans la réponse de création et reste disponible tant que la sandbox est en cours de création ou d’exécution.
  • Une URL HTTPS devient disponible dès que sa route dispose d’un nom d’hôte, tant que la sandbox est en cours de création ou d’exécution. Appelez get_status() en Python ou inspect() en TypeScript en boucle jusqu’à ce que l’URL apparaisse ou que votre propre délai expire.
  • Dans les deux cas, cela ne signifie pas que l’application est prête à servir. La plateforme n’attend pas que votre processus se lie au port pour signaler que la sandbox est en cours d’exécution : prévoyez donc une nouvelle tentative pour votre première connexion.
La plateforme signale les adresses des points de terminaison tant qu’une sandbox est en cours de création ou d’exécution, et les efface dans tous les autres états. Même si serviceEndpoints contient encore des métadonnées HTTPS, une sandbox en pause ou terminée n’a aucun point de terminaison joignable.

Se connecter à un point de terminaison TLS passthrough

Comme la plateforme ne déchiffre pas la connexion, le certificat reçu par un client est celui que présente votre charge de travail. Cela a deux conséquences pour le client :
  • Envoyez l’hôte du point de terminaison comme nom de serveur SNI. La plateforme achemine le trafic uniquement en fonction du SNI : une connexion qui l’omet, ou qui transmet un autre nom, n’atteint pas votre sandbox.
  • Faites confiance au certificat de la charge de travail. Le nom d’hôte du point de terminaison est attribué par la plateforme ; un certificat que vous émettez vous-même ne lui correspond donc pas, sauf si vous l’émettez pour ce nom d’hôte. Configurez le client pour qu’il fasse confiance à votre propre autorité de certification, ou épinglez le certificat.
Le client suivant envoie l’hôte du point de terminaison comme SNI tout en se connectant à l’adresse annoncée. Remplacez [ENDPOINT-ADDRESS] par l’adresse lue dans service_addresses, et [PATH-TO-CA-CERT] par le chemin d’accès à l’autorité de certification qui a signé le certificat de votre charge de travail :

Durée de vie du point de terminaison

Un point de terminaison existe aussi longtemps que la sandbox à laquelle il appartient :
  • Il est lié à la sandbox, et non à un Pod. Si le Pod sous-jacent redémarre, l’adresse ne change pas.
  • La suppression de la sandbox entraîne celle du point de terminaison. L’adresse n’est pas transférée vers une autre sandbox, et toute nouvelle sandbox reçoit une nouvelle adresse.
  • Rien n’est réservé d’une sandbox à l’autre. Vous ne pouvez pas conserver un nom d’hôte pour le réutiliser.

Résoudre les échecs de création

Si aucun exécuteur de votre flotte ne prend en charge le type de point de terminaison demandé, l’appel de création échoue plutôt que de démarrer une sandbox en abandonnant silencieusement le point de terminaison.
Dernière modification le 4 novembre 2026