Peta dunia

 

EN: Read in English

Dunia K6: Pengawal

Tanya dulu: kubectl auth can-i

Anda akan belajar: tanya kluster apa yang anda, atau bot, boleh buat, sebelum apa-apa rosak.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Kubernetes 1.37 pada 31 Okt 2026

Masalahnya

Kerja CI anda gagal pukul 2 pagi. Ini ralatnya.

Error from server (Forbidden): secrets is forbidden: User "system:serviceaccount:default:ci-bot" cannot list resource "secrets" in API group "" in the namespace "default"

Macam mana anda boleh tahu sebelum ia berjalan?

Pilih satu jawapan.

Tengok

Anda di sini: kluster kind-dev namespace default
can-i list pods sebagai bot CI jawab yes. can-i delete pods jawab no. Output terminal: $ kubectl auth can-i list pods --as=system:serviceaccount:default:ci-bot yes $ kubectl auth can-i delete pods --as=system:serviceaccount:default:ci-bot no

kubectl auth can-i tanya pintu 2 soalan ya atau tidak. Ia tak ubah apa-apa. --as biar anda impersonate (menyamar) bot itu: tanya seolah-olah anda bot itu.

Cuba

Bina soalan: bolehkah bot patch deployment?

Ketik kepingan ikut turutan yang betul.

…

Teka

RoleBinding bot itu duduk dalam zon default. Bolehkah ia patch deployment dalam kube-system?

Pilih satu jawapan.

Cuba

Sekarang semak tekaan anda. Tanya kluster, sebagai bot, tentang kube-system.

Anda di sini: kluster kind-dev namespace default
Masa: +0s (dipercepat)

Semak

Baca wayarnya. Adakah Kubernetes akan kata ya atau tidak?

Baca wayar-wayar ini. Kubernetes akan kata yes atau no?

Siapa (palam)

  • ci-bot (ServiceAccount · ci)
  • mei (pengguna)

Role (soket)

  • Role deployer · shop
    • get, list, patch · deployments
  • ClusterRole pod-reader · seluruh kluster
    • get, list · pods, pods/log

Wayar (binding)

  • ci-bot ke deployerRoleBinding · dalam namespace shop
    Tunjuk ci-bot-deployer sebagai YAML
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: ci-bot-deployer
      namespace: shop
    subjects:
      - kind: ServiceAccount
        name: ci-bot
        namespace: ci
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: deployer
    
  • mei ke pod-readerClusterRoleBinding · di semua tempat (ClusterRoleBinding)
    Tunjuk mei-pod-reader sebagai YAML
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: mei-pod-reader
    subjects:
      - kind: User
        name: mei
        apiGroup: rbac.authorization.k8s.io
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: pod-reader
    

Boleh atau tidak? (kubectl auth can-i)

  1. kubectl auth can-i patch deployments -n shop --as=system:serviceaccount:ci:ci-bot
  2. kubectl auth can-i patch deployments -n default --as=system:serviceaccount:ci:ci-bot
  3. kubectl auth can-i list pods -n ci --as=mei
  4. kubectl auth can-i delete pods -n shop --as=mei
Tanya soalan anda sendiri
kubectl auth can-i get pods -n shop --as=system:serviceaccount:ci:ci-botno

Anda berjaya!

Kini anda boleh tanya kluster sebelum bertindak, sebagai sesiapa pun.

Nak tahu lebih (pilihan)

kubectl auth can-i --list --as=… senaraikan semua yang identiti itu boleh buat. can-i keluar dengan 0 untuk ya dan 1 untuk tidak, jadi skrip boleh gunanya. Untuk guna --as, anda sendiri perlu hak impersonate. Admin kluster memilikinya.

Misi sebenar

  1. kubectl auth can-i create deployments
  2. kubectl auth can-i list pods --as=system:serviceaccount:default:default
  3. kubectl auth can-i --list --as=system:serviceaccount:default:default

0 daripada 3 langkah siap · Tanda anda disimpan.