Score:1

ไม่สามารถเรียก Vault Token สำหรับบัญชี Pod Service

ธง za

ฉันใช้ Vault CSI Driver บน Charmed Kubernetes v1.19 ซึ่งฉันพยายามดึงความลับจาก Vault สำหรับพ็อดที่ทำงานในเนมสเปซแยกต่างหาก (เว็บแอป) ด้วยบัญชีบริการของตัวเอง (webapp-sa) ตามขั้นตอนใน บล็อก.

ดังที่ฉันสามารถเข้าใจได้จนถึงตอนนี้ Pod กำลังพยายามตรวจสอบสิทธิ์กับ Kubernetes API เพื่อให้สามารถสร้างโทเค็น Vault เพื่อเข้าถึงข้อมูลลับจาก Vault ได้ในภายหลัง

$ kubectl รับ po webapp
สถานะพร้อมชื่อเริ่มอายุใหม่
เว็บแอป 0/1 การสร้างคอนเทนเนอร์ 0 22m

ดูเหมือนว่าจะมีปัญหาบางอย่างในการตรวจสอบสิทธิ์กับ Kubernetes API

พ็อดยังคงติดอยู่ในสถานะกำลังสร้างคอนเทนเนอร์พร้อมข้อความ - สร้างโทเค็นบัญชีบริการเพื่อขอพ็อดไม่สำเร็จ

เหตุการณ์:
  พิมพ์อายุเหตุผลจากข้อความ
  ---- ------ ---- ---- -------
  ตัวกำหนดตารางเวลาเริ่มต้นปกติ 35m กำหนด webapp/webapp ให้กับ host-03 เรียบร้อยแล้ว

  คำเตือน FailedMount 4m38s (x23 มากกว่า 35m) kubelet MountVolume.SetUp ล้มเหลวสำหรับวอลุ่ม "secrets-store-inline": ข้อผิดพลาด rpc: code = Unknown desc = ไม่สามารถเมานต์วัตถุที่เก็บความลับสำหรับ pod webapp/webapp, ข้อผิดพลาด: rpc error: code = Unknown desc = เกิดข้อผิดพลาดในการขอเมานต์: **ล้มเหลวในการสร้างโทเค็นบัญชีบริการสำหรับการร้องขอพ็อด** {webapp xxxx webapp webapp-sa}: เซิร์ฟเวอร์ไม่พบทรัพยากรที่ร้องขอ

ฉันสามารถรับโทเค็นห้องนิรภัยโดยใช้ cli ในพ็อดเนมสเปซ:

$ vault เขียนรับรองความถูกต้อง / kubernetes / เข้าสู่ระบบ บทบาท = ฐานข้อมูล jwt = $ SA_JWT_TOKEN
ค่าคีย์
--- -----
โทเค็น <สนิป>

ฉันได้รับโทเค็นห้องนิรภัยโดยใช้ API เช่นกัน:

$ curl --request POST --data @payload.json https://127.0.0.1:8200/v1/auth/kubernetes/login
    {
       "request_id":"1234",
       <สนิป>
       "รับรองความถูกต้อง":{
          "client_token":"XyZ",
          "ตัวเข้าถึง":"abc",
          "นโยบาย":[
             "ค่าเริ่มต้น",
             "นโยบายเว็บแอป"
          ]
          "token_policies":[
             "ค่าเริ่มต้น",
             "นโยบายเว็บแอป"
          ]
          "ข้อมูลเมตา":{
             "บทบาท":"ฐานข้อมูล",
             "service_account_name":"webapp-sa",
             "service_account_namespace":"เว็บแอป",
             "service_account_secret_name":"webapp-sa-token-abcd",
             "service_account_uid":"123456"
          },
          <สนิป>    
       }
    }

อ้างอิง: https://www.vaultproject.io/docs/auth/kubernetes

ตามเอกสารของห้องนิรภัย ฉันได้กำหนดค่าห้องนิรภัยด้วย Token Reviewer SA ดังนี้:

$ cat vault-auth-service-account.yaml
---
รุ่น api: rbac.authorization.k8s.io/v1
ชนิด: ClusterRoleBinding
ข้อมูลเมตา:
  ชื่อ: บทบาทโทเค็นทบทวนผูกพัน
  เนมสเปซ: ห้องนิรภัย
บทบาทอ้างอิง:
  apiGroup: rbac.authorization.k8s.io
  ประเภท: ClusterRole
  ชื่อ: ระบบ: auth-delegator
วิชา:
  - ประเภท: ServiceAccount
    ชื่อ: vault-auth
    เนมสเปซ: ห้องนิรภัย

ห้องนิรภัยได้รับการกำหนดค่าด้วย JWT จาก Token Reviewer SA ดังนี้:

$ vault เขียน auth/kubernetes/config \
    token_reviewer_jwt="< บัญชีบริการผู้ตรวจสอบ TOKEN JWT>" \
    kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" 
    [email protected]

ฉันได้กำหนดบทบาทห้องนิรภัยเพื่ออนุญาต webapp-sa เข้าถึงความลับ:

$ vault เขียน auth/kubernetes/role/database \
    bound_service_account_names=webapp-sa \
    bound_service_account_namespaces=webapp \
    นโยบาย = นโยบายเว็บแอพ \
    ttl=72ชม
ความสำเร็จ! ข้อมูลที่เขียนถึง: auth/kubernetes/role/database

เดอะ webapp-sa ได้รับอนุญาตให้เข้าถึงข้อมูลลับตามนโยบายห้องนิรภัยที่กำหนดไว้ดังนี้:

นโยบาย $ vault เขียนนโยบาย webapp - <<EOF
> เส้นทาง "ความลับ/ข้อมูล/db-pass" {
> ความสามารถ = ["อ่าน"]
> }
> สพป
ความสำเร็จ! นโยบายที่อัปโหลด: นโยบายเว็บแอป

Pod และ SA ถูกกำหนดดังนี้:

$ cat webapp-sa-and-pod.yaml
ชนิด: ServiceAccount
api เวอร์ชัน: v1
ข้อมูลเมตา:
  ชื่อ: webapp-sa
---
ชนิด: ฝัก
api เวอร์ชัน: v1
ข้อมูลเมตา:
  ชื่อ: เว็บแอป
ข้อมูลจำเพาะ:
  serviceAccountName: webapp-sa
  ตู้คอนเทนเนอร์:
  - รูปภาพ: รีจิสทรี/jweissig/app:0.0.1
    ชื่อ: เว็บแอป
    ปริมาณการติดตั้ง:
    - ชื่อ: secret-store-inline
      mountPath: "/mnt/secrets-store"
      อ่านอย่างเดียว: จริง
  ปริมาณ:
    - ชื่อ: secret-store-inline
      ซีเอสไอ:
        ไดรเวอร์: secrets-store.csi.k8s.io
        อ่านอย่างเดียว: จริง
        ปริมาณแอตทริบิวต์:
          ชื่อผู้ให้บริการ: vault
          secretProviderClass: "ฐานข้อมูลห้องนิรภัย"
  • ใครบ้างมีเงื่อนงำว่าทำไม Pod จึงไม่ตรวจสอบสิทธิ์กับ Kubernetes API
  • ฉันต้องเปิดใช้งานการตั้งค่าสถานะบน kube-apiserver เพื่อให้ Token Review API ทำงานหรือไม่
  • มีการเปิดใช้งานโดยค่าเริ่มต้นบน Charmed Kubernetes v1.19 หรือไม่

จะขอบคุณสำหรับความช่วยเหลือใด ๆ

ความนับถือ, ซานะ

Mikołaj Głodziak avatar
id flag
คุณเห็น [หัวข้อนี้](https://stackoverflow.com/questions/55437231/k8s-how-to-project-service-account-token-into-pod)ไหม คุณพยายามสร้าง "บัญชีบริการ" แล้วเพิ่มแฟล็กนี้ใน "kubeapi" หรือไม่
za flag
@MikoÅajGÅodziak ใช่แล้ว ถูกต้อง ต้องเปิดใช้งานการตั้งค่าสถานะเหล่านั้นบน kube-apiserver ปัญหาคือฉันไม่ได้ใช้การตั้งค่า kubeadm ฉันใช้ charmed kubernetes และฉันไม่รู้วิธีเปิดใช้งานสิ่งนี้บน kubernetes-master charm ฉันได้ถามสิ่งนี้ใน Charmhub ด้วย: https://discourse.charmhub.io/t/does-kubernetes-master-charm-545-have-tokenrequest-api-enabled/5012/2

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา