Pripojenie ku klastru
Každá požiadavka ide cez Cluster — nemenného klienta, ktorý pozná URL apiservera a spôsob autentifikácie. Kubernetes::url() vytvorí prázdneho ad-hoc klienta, ktorého fluentne doplníte o tokeny, klientske certifikáty a CA:
use RoundlyConsulting\KubernetesApi\Facades\Kubernetes;
$cluster = Kubernetes::url('https://api.prod.example.com:6443')
->withToken(config('services.kubernetes.token'))
->withCertificate('/path/to/client.crt')
->withPrivateKey('/path/to/client.key')
->withCaCertificate('/path/to/ca.crt')
->withSslVerification()
->withManagerName('my-app'); // the field manager on resources this app writes
$cluster->withToken('other'); // returns a copy — $cluster still uses the original tokenKubernetes::url() od predvoleného klastra nič nededí — ani token, ani certifikát. Pri lokálnom vývoji môžete certifikáty vynechať a overovanie vypnúť; v produkcii to nikdy nerobte:
$cluster = Kubernetes::url('https://127.0.0.1:6443')
->withToken('local-dev-token')
->withoutSslVerification();url(), každé with…() / without…(), withManagerName(), withDefaultNamespace() aj namespace() vrátia nový klaster a ten, na ktorom ste ich zavolali, nechajú nezmenený — klienta z fasády tak nemôže iný volajúci presmerovať ani mu vymeniť prihlasovacie údaje.
Autentifikačné API
| Metóda (každá vracia kópiu) | Účinok |
|---|---|
url($url) | Základná URL apiservera, napr. https://api.prod.example.com:6443. |
withToken($token) | Bearer token posielaný s každou požiadavkou (#[SensitiveParameter], takže sa nikdy neobjaví v stack trace). |
withCertificate($path) / withPrivateKey($path) | Klientsky certifikát a kľúč pre vzájomné TLS. |
withCaCertificate($path) | CA, voči ktorej sa overuje certifikát apiservera. |
withSslVerification() / withoutSslVerification() | Zapína alebo vypína overovanie TLS — predvolene zapnuté. |
withManagerName($name) | Posiela sa ako fieldManager pri každom create, update, patch, scale a rollout restart a ako User-Agent každej požiadavky. |
withDefaultNamespace($namespace) | Mäkký predvolený namespace pre zdroje v namespace — na rozdiel od namespace() nič neodmieta. |
getUrl() · getToken() · hasToken() · shouldVerify() · getManagerName() · defaultNamespace() | Čítanie nastavení uvedených vyššie. |
getPathToCertificate() · getPathToPrivateKey() · getPathToCaCertificate() | Čítanie ciest k certifikátom. |
Token sa posiela v hlavičke Authorization: Bearer, certifikát s kľúčom dostane HTTP klient pre vzájomné TLS a cesta k CA nahradí systémové úložisko dôveryhodných certifikátov. Meno managera sa posiela ako parameter fieldManager pri každom create, update, patch, scale a rollout restart, takže managedFields zaznamená vašu aplikáciu ako vlastníka toho, čo zapísala; posiela sa aj ako User-Agent. Server-side apply field managera potrebuje, preto bez mena managera použije kubernetes-api-for-laravel.
Z kubeconfigu alebo z vnútra klastra
Klienta nasmerujete na klaster jedným riadkom namiesto ručného nastavovania URL a prihlasovacích údajov. fromKubeConfig() načíta kubeconfig, pre zvolený kontext nájde klaster a používateľa a vložené certifikáty zapíše do súkromných dočasných súborov — jeden na každý odlišný PEM, zmazané pri skončení PHP procesu. inCluster() načíta token a CA service accountu namountované do podu:
use RoundlyConsulting\KubernetesApi\Facades\Kubernetes;
// Current context from the default kubeconfig (or the KUBECONFIG env path):
$cluster = Kubernetes::fromKubeConfig();
// A specific context, optionally from an explicit kubeconfig path:
$cluster = Kubernetes::fromKubeConfig(context: 'local-dev');
$cluster = Kubernetes::fromKubeConfig(path: '/path/to/kubeconfig', context: 'staging');
// From in-cluster service-account mounts (when running inside a pod):
$cluster = Kubernetes::inCluster()->withManagerName('my-app');- Bez cesty sa načíta prvá položka premennej prostredia KUBECONFIG, inak ~/.kube/config. Bez kontextu sa použije current-context.
- Z používateľa loader číta statický token a/alebo client-certificate s client-key; z klastra server, certificate-authority a insecure-skip-tls-verify. Každý certifikát môže byť cesta k súboru alebo vložený blok *-data; relatívne cesty (certificate-authority: certs/ca.crt) sa odvodzujú od adresára samotného kubeconfigu, rovnako ako v kubectl.
- insecure-skip-tls-verify klastra musí byť boolean — true/false, prípadne yes/no, on/off či 1/0, v úvodzovkách aj bez nich. Čokoľvek iné vyhodí KubeConfigException namiesto hádania, takže „false“ v úvodzovkách nechá overovanie TLS zapnuté.
- inCluster() zostaví https://KUBERNETES_SERVICE_HOST:KUBERNETES_SERVICE_PORT (aj pre IPv6 hosty) a token načíta z /var/run/secrets/kubernetes.io/serviceaccount/token. Overovanie TLS voči namountovanému ca.crt ostáva zapnuté — ak súbor chýba, vyhodí KubeConfigException, namiesto aby token poslal neoverenému apiserveru.
- Chýbajúci súbor, kontext, klaster či používateľ, klaster bez URL servera, neplatné insecure-skip-tls-verify, neplatný base64, chýbajúce premenné prostredia v klastri, prázdny token alebo chýbajúca CA v klastri vyhodia KubeConfigException.
- Rovnaké zdroje fungujú aj v konfigurácii — 'source' => 'kubeconfig' alebo 'source' => 'in-cluster' pri položke v clusters (pozrite Pomenované klastre).
Pripojenie z objektu KubeConfig
Oba loadery vytvárajú hodnotový objekt KubeConfig. Kubernetes::connect() z neho vytvorí nový ad-hoc klaster, takže ho rovnako zostavíte aj z vlastného úložiska tajomstiev; Cluster::applyConfig() ho použije na kópii existujúceho klastra:
use RoundlyConsulting\KubernetesApi\DataTransferObjects\KubeConfig;
use RoundlyConsulting\KubernetesApi\Facades\Kubernetes;
$cluster = Kubernetes::connect(new KubeConfig(
server: 'https://api.staging.example.com:6443',
token: config('services.kubernetes.staging_token'),
clientCertificatePath: null,
clientKeyPath: null,
certificateAuthorityPath: storage_path('kubernetes/staging-ca.crt'),
verify: true,
));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.