proxmox – api – EKSA

Od jakiegoś czasu zajmuje się EKS Anywhere, jest to wersja kuberntesa która jest w AWS, jednak ta wersja jest przeznacozna na serwery we własnej serwerowni. Nie erozpisując się za dużo o EKSA, zacząłem sobie w domowym lab stawiac własny klaster do testowania. Wykorzystuję wersję bare metal, która to wykorzytuje BMC do zarzadzania serwerami, jednak nie mam tylu serwerów dlatego bedę wirtualizował w proxmox, a łącznikiem bedzie serwis  proxmoxbmc, jest tez wersja na VMware jednak koszty sa duże. No ale to później na tą chwilę skupmy sie jak to bedzie dizałało.

EKSA wysyła sygnał ( status, start, stop, restart) na BMC (IPMI), co odbierze proxmoxbmc i w zalezności od tego co bedzie za komunikat połaczy sie do proxmox i wykona na konkretnej wirtualce akcje. Do tego jest potrzebne konto, ale także do tego konta klucz api.

Zatem w menu proxmox’a wybieramy Datacenter, nastepnie Permissions i API Tokens. Przycikając na przycisk Add wybieramy użytkownika wpisujemy unikalny Token ID, możemy wybrać Expire ( date kiedy Tiken bedzie już nieaktywny), ale także jest możliwość zaznaczenia Privilege Separation. W przypaku gdy bedzie zaznaczone należy doatkowo za pomoca ACL nadac odpowienidnie upraswnienia, jeżeli jestnak opcja jest odznaczona to ma takie uprawnieniani jak użytkownik.

Zatem należy Datacenter -> Permissions i przycisk Add. Wybraż API Token Premissions a nastepnie wybieramy Path, API Token i Rolę. I tutaj także jest opcja Propagate, jezeli zaznaczymy wtedy bedzie dostęp do całego path w dół, zatem uważnie z opcją, a zgodnie z dokumentacją lepiej:

Carefully read the section about inheritance below to understand how assigned roles (and their privileges) are propagated along the ACL tree.

No dobra, wykonałem to wszytsko i niestety cały czas mi wskazywał błednie status serwera wirtualnego, zacząłem debug, tcpdump ale cały czas miałem informację że nie ma takiej wirtualki, oczywiście przez nieodpowiendnie uprawnienia. No i po jakimś czasie zostało mi tylko zobaczenie dlaczego jak wykonuję sprawdzenie poprzez curl’a nie działa. Zgodnie z dokumnetajca należy  wykonać ( wykorzystuję konto lokalne test (dlatego jest pam), które ma API Token ea8b0727-41a6-4c24-97e5-e861aff6f18c, a nazwa API Token to bmc a Proxmox działa na dns proxmox01.example.wew, a serwer ma ID 100)

curl -v -k -H „Authorization: PVEAPIToken=test@pam!bmc=ea8b0727-41a6-4c24-97e5-e861aff6f18c”  https://proxmox01.example.wew:8006/api2/json/nodes/pve/qemu/100/

No niestety są znaki specjalne, wiec wykonywałem:

curl -v -k -H „Authorization: PVEAPIToken=test\@pam\!bmc=ea8b0727-41a6-4c24-97e5-e861aff6f18c”  https://proxmox01.example.wew:8006/api2/json/nodes/pve/qemu/100/

no niestety też nie działąło wiec może:

curl -v -k -H ‚Authorization: PVEAPIToken=test@pam!bmc=ea8b0727-41a6-4c24-97e5-e861aff6f18c’  https://proxmox01.example.wew:8006/api2/json/nodes/pve/qemu/100/

Tak udało, mimo analizowania pakietów, logów proxy od proxmox’a który to wystawia endponit dla API nic nie widac było bo cały czas pokazywał mi pustą liste. Ustawiłem odpowiednie uprawnienia ( dla testowania odzanczyłem „Privilege Separation”) i wszytsko zaczeło działać. Jedna opcja i 3 godziny analizy.