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:
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ť:
// 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 kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
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.