---
title: "Tokeny service accountov — Kubernetes API for Laravel | Roundly"
description: "Krátkodobé tokeny service accountov ako kubectl create token — životnosť, audiencie aj väzba, so vstupom overeným pred odoslaním požiadavky."
url: https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel/tokeny-service-accountov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Kubernetes API for Laravel](https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel.md)

# Tokeny service accountov

ServiceAccount::requestToken() vydá krátkodobý token rovnako ako kubectl create token: pošle TokenRequest (authentication.k8s.io/v1) na subresource token service accountu. Do jeho spec idú len polia, ktoré zadáte — expirationSeconds, audiences, boundObjectRef —, takže zvyšok doplní apiserver podľa vlastných predvolených hodnôt (zvyčajne hodina a audiencie klastra) a životnosť môže aj skrátiť. Vráti sa ServiceAccountToken:

```php
use RoundlyConsulting\KubernetesApi\Facades\Kubernetes;

$token = Kubernetes::namespace('ci')->serviceAccounts()->setName('deployer')->requestToken(
    expirationSeconds: 900,   // 600 or more; null = the apiserver's default (usually an hour)
    audiences: ['vault'],     // empty = the apiserver's default audiences
    boundTo: $pod,            // an existing Pod, Secret or Node: deleting it invalidates the token
);

$token->token;            // the bearer token — masked in var_dump(), print_r() and dump()
$token->expiresAt;        // CarbonImmutable, UTC
$token->audiences;        // list<string>, as the apiserver answered
$token->boundObjectRef;   // ['kind' => 'Pod', 'apiVersion' => 'v1', 'name' => …, 'uid' => …] or null
$token->isExpired();      // or isExpired($at)

// Use it like any other token
Kubernetes::url('https://api.prod.example.com:6443')->withToken($token->token)->pods()->get();
```

## ServiceAccountToken

| Vlastnosť · metóda | Obsahuje |
| --- | --- |
| `token` | Bearer token — #\[SensitiveParameter\], vo var\_dump(), print\_r() aj dump() zamaskovaný. |
| `expiresAt` | Kedy token vyprší, ako CarbonImmutable v UTC. |
| `audiences` | list<string> — audiencie, ktoré vrátil apiserver. |
| `boundObjectRef` | kind, apiVersion, name a uid objektu, na ktorý je token naviazaný, alebo null. |
| `isExpired(?CarbonInterface $at = null)` | Či token k času $at vypršal — predvolene k aktuálnemu času. |

## Overené pred odoslaním

Vstup, ktorý by apiserver odmietol, vyhodí InvalidResourceException ešte pred odoslaním čohokoľvek:

- service account bez mena — najprv setName();
- zdroj v režime dryRun() — TokenRequest v režime dry-run žiadny token nevydá;
- expirationSeconds pod 600 (ServiceAccount::MIN\_TOKEN\_EXPIRATION\_SECONDS);
- prázdna audiencia;
- boundTo, ktorý nie je Pod, Secret ani Node (ServiceAccount::TOKEN\_BINDABLE\_KINDS), alebo mu chýba metadata.name či metadata.uid — najprv ho načítajte cez find().

## Chyby a oprávnenia

- Chyby nikdy nenesú telo odpovede — HTTP 403 Forbidden, HTTP 404 NotFound — bez ohľadu na nastavenie skracovania na klastri, pretože ide o endpoint s prihlasovacími údajmi. $e->apiMessage() správu zo Status apiservera naďalej prečíta.
- Odpoveď bez neprázdneho status.token alebo bez status.expirationTimestamp vo formáte RFC 3339 vyhodí KubernetesException::malformedResponse().
- Požiadavka ide cez transport klastra, takže platí client.options.timeout, limiter požiadaviek aj Kubernetes::fake(). Vlastné prihlasovacie údaje klastra potrebujú oprávnenie create na serviceaccounts/token.

## Z ľubovoľného vstupného bodu

requestToken() je operácia nad zdrojom ako každá iná, takže funguje cez fasádu, injektovaný manager aj na ľubovoľnom klastri — vrátane ad-hoc klastra s prihlasovacím údajom, ktorý smie tokeny vydávať:

```php
// Through an injected manager or any cluster, like every resource operation
$token = $this->kubernetes->cluster('dev')->serviceAccounts()
    ->setNamespace('ci')
    ->setName('deployer')
    ->requestToken();

// An ad-hoc cluster whose own credential may mint tokens
$token = Kubernetes::url($server)->withToken($minter)->serviceAccounts()
    ->setNamespace($namespace)
    ->setName($serviceAccount)
    ->requestToken($ttl);
```

Pod Kubernetes::fake() odpovie žiadosť o token pre naplnené service accounty deterministickým tokenom a overíte ju cez assertTokenRequested() — pozrite Testovanie.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel.md)
