Puncte:1

Nu se poate prelua Tokenul Vault pentru contul de serviciu Pod

drapel za

Folosesc Vault CSI Driver pe Charmed Kubernetes v1.19 unde încerc să recuperez secrete din Vault pentru un pod care rulează într-un spațiu de nume separat (aplicație web) cu propriul cont de serviciu (webapp-sa) urmând pașii din blog.

După cum am reușit să înțeleg până acum, Pod-ul încearcă să se autentifice la API-ul Kubernetes, pentru ca ulterior să poată genera un token Vault pentru a accesa secretul din Vault.

$ kubectl obțineți pe aplicația web
STAREA NUMELE GATA REINCEPE VARSTA
webapp 0/1 ContainerCreating 0 22m

Mi se pare că există o problemă la autentificarea cu API-ul Kubernetes.

Podul rămâne blocat în starea Container Creating cu mesajul - nu s-a putut crea un simbol de cont de serviciu pentru solicitarea podului

Evenimente:
  Introduceți Motivul Vârsta din mesaj
  ---- ------ ---- ---- -------
  Programator normal de 35 m programator implicit Webapp/webapp a fost atribuită cu succes gazdei-03

  Avertisment FailedMount 4m38s (x23 peste 35m) kubelet MountVolume.SetUp a eșuat pentru volumul „secrets-store-inline”: eroare rpc: code = Unknown desc = eșuat la montarea obiectelor din depozitul de secrete pentru pod webapp/webapp, err: rpc error: code = Desc necunoscut = eroare la efectuarea cererii de montare: **nu s-a putut crea un simbol de cont de serviciu pentru solicitarea pod** {webapp xxxx webapp webapp-sa}: serverul nu a putut găsi resursa solicitată

Pot obține simbolul seifului folosind cli în spațiul de nume pod:

$ vault write auth/kubernetes/login role=database jwt=$SA_JWT_TOKEN
Valoare cheie
--- -----
jeton <snipped>

Obțin și jetonul seifului folosind API-ul:

$ curl --request POST --data @payload.json https://127.0.0.1:8200/v1/auth/kubernetes/login
    {
       "request_id":"1234",
       <decupat>
       „auth”:{
          "client_token":"XyZ",
          "accessor":"abc",
          "politici":[
             "Mod implicit",
             "politica aplicației web"
          ],
          „politici_token”:[
             "Mod implicit",
             "politica aplicației web"
          ],
          "metadate":{
             "rol":"bază de date",
             "service_account_name":"webapp-sa",
             "service_account_namespace":"aplicație web",
             "service_account_secret_name":"webapp-sa-token-abcd",
             "service_account_uid":"123456"
          },
          <decupat>    
       }
    }

Referinţă: https://www.vaultproject.io/docs/auth/kubernetes

Conform documentației seifului, am configurat Vault cu Token Reviewer SA după cum urmează:

$ cat seif-auth-service-account.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
fel: ClusterRoleBinding
metadate:
  nume: role-token-review-binding
  spatiu de nume: seif
rolRef:
  apiGroup: rbac.authorization.k8s.io
  fel: ClusterRole
  nume: system:auth-delegator
subiecte:
  - fel: ServiceAccount
    nume: vault-auth
    spatiu de nume: seif

Vault este configurat cu JWT de la Token Reviewer SA, după cum urmează:

$ vault write auth/kubernetes/config \
    token_reviewer_jwt="< Cont de serviciu TOKEN Reviewer JWT>" \
    kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" 
    [email protected]

Am definit un rol de seif pentru a permite webapp-sa acces la secret:

$ vault write auth/kubernetes/role/database \
    bound_service_account_names=webapp-sa \
    bound_service_account_namespaces=webapp \
    policies=politica aplicației web \
    ttl=72h
Succes! Date scrise pe: auth/kubernetes/role/database

The webapp-sa este permis accesul la secret conform Politicii Vault definită după cum urmează:

$ politică seif scrie webapp-policy - <<EOF
> calea „secret/date/db-pass” {
> capabilități = [„citește”]
> }
> EOF
Succes! Politica încărcată: webapp-policy

Pod și SA sunt definite după cum urmează:

$ cat webapp-sa-and-pod.yaml
fel: ServiceAccount
apiVersion: v1
metadate:
  nume: webapp-sa
---
fel: Pod
apiVersion: v1
metadate:
  nume: aplicație web
specificație:
  serviceAccountName: webapp-sa
  containere:
  - imagine: registry/jweissig/app:0.0.1
    nume: aplicație web
    volumMonturi:
    - nume: secrets-store-inline
      mountPath: „/mnt/secrets-store”
      readOnly: adevărat
  volume:
    - nume: secrets-store-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: adevărat
        volumAtribute:
          providerName: seif
          secretProviderClass: „bază de date seif”
  • Are cineva vreo idee de ce Pod-ul nu se autentifică cu API-ul Kubernetes?
  • Trebuie să activez semnalizatoarele pe kube-apiserver pentru ca API-ul Token Review să funcționeze?
  • Este activat în mod implicit pe Charmed Kubernetes v1.19?

Mi-ar fi recunoscător pentru orice ajutor.

Salutari, Sana

Mikołaj Głodziak avatar
drapel id
Ați văzut [acest subiect](https://stackoverflow.com/questions/55437231/k8s-how-to-project-service-account-token-into-pod)? Ați încercat să creați `serviceaccount` și apoi să adăugați aceste steaguri la `kubeapi`?
drapel za
@MikoÅajGÅodziak Da, este corect. Aceste steaguri trebuie să fie activate pe kube-apiserver. Problema este că nu folosesc o configurare kubeadm, folosesc kubernetes charmed și nu știu cum să activez acest lucru pe farmecul kubernetes-master. Am întrebat acest lucru și pe Charmhub: https://discourse.charmhub.io/t/does-kubernetes-master-charm-545-have-tokenrequest-api-enabled/5012/2

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.