Puncte:0

Utilizați certificatele client .kube/config în curl

drapel cn

Dacă utilizați kubectl obține pod foo -v10 vezi o răsuci linie, dar aceasta nu funcționează.

Exemplu:

guettli@p15:~$ curl -k -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1; g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d" 'https://127.0.0.1:44529/api/v1/namespaces/ implicit/pods/busybox' 

* Se încearcă 127.0.0.1:44529...
* Conectat la portul 127.0.0.1 (127.0.0.1) 44529 (#0)
* ALPN, oferind h2
* ALPN, oferind http/1.1
* setați cu succes locațiile de verificare a certificatelor:
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.3 (IN), strângere de mână TLS, extensii criptate (8):
* TLSv1.3 (IN), strângere de mână TLS, Solicitare CERT (13):
* TLSv1.3 (IN), strângere de mână TLS, Certificat (11):
* TLSv1.3 (IN), strângere de mână TLS, verificare CERT (15):
* TLSv1.3 (IN), strângere de mână TLS, Terminat (20):
* TLSv1.3 (OUT), TLS schimbă cifra, Schimbă specificația cifrului (1):
* TLSv1.3 (OUT), TLS handshake, Certificat (11):
* TLSv1.3 (OUT), TLS handshake, Terminat (20):
* Conexiune SSL folosind TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server acceptat să utilizeze h2
* Certificat de server:
* subiect: CN=kube-apiserver
* data începerii: 2 februarie 10:34:41 2022 GMT
* data expirării: 2 februarie 10:34:41 2023 GMT
* emitent: CN=kubernetes
* Rezultatul verificării certificatului SSL: nu se poate obține certificatul de emitent local (20), continuând oricum.
* Utilizând HTTP2, serverul acceptă utilizarea multiplă
* Starea conexiunii a fost schimbată (HTTP/2 confirmat)
* Copierea datelor HTTP/2 din bufferul de flux în bufferul de conexiune după actualizare: len=0
* Folosind ID-ul fluxului: 1 (easy handle 0x55ef6413b5e0)
> GET /api/v1/namespaces/default/pods/busybox HTTP/2
> Gazdă: 127.0.0.1:44529
> accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json
> user-agent: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d
> 
* TLSv1.3 (IN), strângere de mână TLS, bilet pentru sesiune de știri (4):
* Starea conexiunii a fost schimbată (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 403 
< cache-control: fără cache, privat
< tipul de conținut: aplicație/json
< x-content-type-options: nosniff
< x-kubernetes-pf-flowschema-uid: d45b0ee7-7e06-463e-b8d1-6ab74852b967
< x-kubernetes-pf-prioritylevel-uid: 3be84978-2771-4afe-972d-50dec7f8b951
< lungimea conținutului: 289
< data: Luni, 21 februarie 2022 17:20:21 GMT
< 

{"kind":"Status","apiVersion":"v1","metadata":{},
 "status":"Eșec",
 "message":"pods \"busybox\" este interzis: utilizatorul \"system:anonymous\" nu poate obține resursa \"pods\" din grupul API \"\" în spațiul de nume \"default\"",
 "motiv":"Interzis",
 "details":{"name":"busybox","kind":"pods"},"code":403}

* Conexiunea #0 la gazda 127.0.0.1 a rămas intactă

Cum pot folosi certificatul client care în .kube/config?

Folosesc tipul 0.11.1

drapel in
Ei bine, ce ai încercat până acum, în afară de a te aștepta ca `curl` să analizeze un fișier yaml kubeconfig? De asemenea, în spiritul unei „probleme X/Y”, acest lucru cu siguranță sună ca și cum doriți să reimplementați `kubectl` folosind o mulțime de bash din anumite motive
Puncte:1
drapel cn

Am gasit aceasta solutie:

cat .kube/config | yq .clusters[0].cluster.certificate-authority-data | base64 -d - > .kube/ca.pem

cat .kube/config | yq .users[0].user.client-certificat-date | base64 -d - > .kube/user.pem

cat .kube/config | yq .users[0].user.client-key-data | base64 -d - > .kube/user-key.pem
curl --cert .kube/user.pem --key .kube/user-key.pem --cacert .kube/ca.pem \
  -v -XGET -H „Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application /json" \
  -H „User-Agent: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d” \
 „https://127.0.0.1:44529/api/v1/namespaces/default/pods/busybox”
Puncte:0
drapel us

Am făcut niște cercetări. Soluția mea de lucru este mai jos:

Sunt necesare ghilimele din cauza liniuțelor din numele etichetelor:

cat ~/.kube/config | yq -r '.clusters[0].cluster."date-autoritatea-de-certificare"' | base64 -d - > ~/.kube/ca.pem 
cat ~/.kube/config | yq -r '.users[0].user."date-certificat-client"' | base64 -d - > ~/.kube/user.pem
cat ~/.kube/config | yq -r '.users[0].user."client-key-data"' | base64 -d - > ~/.kube/user-key.pem

Încă o variabilă utilă:

SERVER_URL=$(cat ~/.kube/config | yq -r .clusters[0].cluster.server)

Exemplu de bucle:

curl --cacert ~/.kube/ca.pem --cert ~/.kube/user.pem --key ~/.kube/user-key.pem -X GET ${SERVER_URL}/api/v1/namespaces/ implicit/pods/busybox

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.