- 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.
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 importentAUTH 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.
- Clé API Forge
- Jeton d’accès à l’API CoreWeave
Utilisez votre clé API Forge avec l’intégration
wandb du SDK. Remplacez [WANDB-API-KEY] par votre clé API :- Python
- TypeScript
sandbox_auth.py
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
Déclarer un point de terminaison
Déclarez les points de terminaison dans la listeservices 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 :
- Python
- TypeScript
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 :
- Python
- TypeScript
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
endpointnécessitentvisibility=PUBLIC. Définissezprotocol=TCPou ne définissez pasprotocol. La plateforme rejette les points de terminaisonUDPetSCTP. - Les entrées simples sans
endpointpeuvent ne pas définir de visibilité ou utiliserPRIVATE,PUBLICouCUSTOM. Elles peuvent déclarerTCP,UDPouSCTP. Si aucun protocole n’est défini,TCPest 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 servicesCUSTOMexistants, 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
authetrequest_timeout_secondsen mode TLS passthrough. En Python, passezNoneplutôt que0. Le SDK rejette tout délai d’expiration défini, y compris0. - 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éfinissezauth=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.
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 dansservice_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.
- Python
- TypeScript
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 ouinspect()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.
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.
[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.Pages connexes
- Configuration du bac à sable : ressources, ports, secrets et délais d’expiration.
- Architecture des sandboxes : interactions entre les exécuteurs, les profils et le plan de contrôle.
- Accéder à un service tailnet depuis une sandbox : établir une connexion sortante vers un service privé via Tailscale.
- Cycle de vie d’une sandbox : les différents états par lesquels passe une sandbox.