Điểm:1

Không thể tìm nạp mã thông báo Vault cho tài khoản dịch vụ Pod

lá cờ za

Tôi đang sử dụng Trình điều khiển Vault CSI trên Charmed Kubernetes v1.19 nơi tôi đang cố truy xuất các bí mật từ Vault cho một nhóm chạy trong một không gian tên riêng (ứng dụng web) với tài khoản dịch vụ riêng của mình (webapp-sa) theo các bước trong Blog.

Như tôi đã có thể hiểu cho đến nay, Pod đang thử xác thực với API Kubernetes để sau này có thể tạo mã thông báo Vault để truy cập bí mật từ Vault.

$ kubectl nhận ứng dụng web po
TÊN TÌNH TRẠNG SẴN SÀNG KHỞI ĐỘNG LẠI TUỔI
webapp 0/1 ContainerTạo 0 22m

Tôi thấy có một số vấn đề khi xác thực với API Kubernetes.

Nhóm vẫn bị kẹt ở trạng thái Tạo vùng chứa với thông báo - không thể tạo mã thông báo tài khoản dịch vụ để yêu cầu nhóm

Sự kiện:
  Nhập Lý do Tuổi từ Tin nhắn
  ---- ------ ---- ---- -------
  Bình thường Lập lịch trình mặc định 35 phút Đã gán thành công ứng dụng web/ứng dụng web cho máy chủ-03

  Cảnh báo FailedMount 4m38s (x23 trên 35m) kubelet MountVolume.SetUp không thành công cho ổ đĩa "secrets-store-inline" : lỗi rpc: code = Unknown desc = không thể gắn các đối tượng lưu trữ bí mật cho pod webapp/webapp, err: lỗi rpc: code = Unknown desc = lỗi khi thực hiện yêu cầu gắn kết: **không thể tạo mã thông báo tài khoản dịch vụ để yêu cầu nhóm** {webapp xxxx webapp webapp-sa}: máy chủ không thể tìm thấy tài nguyên được yêu cầu

Tôi có thể lấy mã thông báo vault bằng cách sử dụng cli trong không gian tên nhóm:

$ vault ghi auth/kubernetes/vai trò đăng nhập=cơ sở dữ liệu jwt=$SA_JWT_TOKEN
Giá trị cốt lõi
--- -----
mã thông báo <snipped>

Tôi cũng nhận được mã thông báo vault bằng API:

$ curl --request POST --data @payload.json https://127.0.0.1:8200/v1/auth/kubernetes/login
    {
       "request_id":"1234",
       <đã cắt>
       "xác thực":{
          "client_token":"XyZ",
          "người truy cập":"abc",
          "chính sách":[
             "mặc định",
             "chính sách ứng dụng web"
          ],
          "token_policies":[
             "mặc định",
             "chính sách ứng dụng web"
          ],
          "metadata":{
             "vai trò":"cơ sở dữ liệu",
             "service_account_name":"webapp-sa",
             "service_account_namespace":"ứng dụng web",
             "service_account_secret_name":"webapp-sa-token-abcd",
             "service_account_uid":"123456"
          },
          <đã cắt>    
       }
    }

Thẩm quyền giải quyết: https://www.vaultproject.io/docs/auth/kubernetes

Theo tài liệu về kho tiền, tôi đã định cấu hình Vault bằng Trình đánh giá mã thông báo SA như sau:

$ cat vault-auth-service-account.yaml
---
apiVersion: rbac.authorization.k8s.io/v1
loại: ClusterRoleBinding
metadata:
  tên: role-token-review-binding
  không gian tên: hầm
vai trò Tham chiếu:
  Nhóm api: rbac.authorization.k8s.io
  loại: ClusterRole
  tên: hệ thống: ủy quyền auth
đối tượng:
  - loại: ServiceAccount
    tên: vault-auth
    không gian tên: hầm

Vault được cấu hình với JWT từ Token Reviewer SA như sau:

$ vault write auth/kubernetes/config \
    token_reviewer_jwt="< Tài khoản dịch vụ Người đánh giá TOKEN JWT>" \
    kubernetes_host="https://$KUBERNETES_PORT_443_TCP_ADDR:443" 
    [email protected]

Tôi đã xác định Vai trò Vault để cho phép webapp-sa truy cập vào bí mật:

$ vault ghi auth/kubernetes/vai trò/cơ sở dữ liệu \
    bind_service_account_names=webapp-sa \
    bind_service_account_namespaces=webapp \
    chính sách=chính sách ứng dụng web \
    ttl=72h
Thành công! Dữ liệu được ghi vào: auth/kubernetes/role/database

Các webapp-sa được phép truy cập vào bí mật theo Chính sách Vault được xác định như sau:

$ vault policy viết webapp-policy - <<EOF
> đường dẫn "bí mật/dữ liệu/db-pass" {
> khả năng = ["đọc"]
>}
> EOF
Thành công! Chính sách đã tải lên: webapp-policy

Pod và SA của nó được định nghĩa như sau:

$ cat webapp-sa-and-pod.yaml
loại: Tài khoản dịch vụ
phiên bản api: v1
metadata:
  tên: webapp-sa
---
loại: Vỏ
phiên bản api: v1
metadata:
  tên: ứng dụng web
thông số kỹ thuật:
  serviceAccountName: webapp-sa
  hộp đựng:
  - hình ảnh: sổ đăng ký/jweissig/ứng dụng:0.0.1
    tên: ứng dụng web
    khối lượngMount:
    - tên: secret-store-inline
      mountPath: "/mnt/secrets-store"
      chỉ đọc: đúng
  khối lượng:
    - tên: secret-store-inline
      csi:
        trình điều khiển: secret-store.csi.k8s.io
        chỉ đọc: đúng
        volumeAttributes:
          tên nhà cung cấp: vault
          secretProviderClass: "cơ sở dữ liệu vault"
  • Có ai có bất kỳ manh mối nào về lý do tại sao Pod không xác thực bằng API Kubernetes không?
  • Tôi có phải bật cờ trên kube-apiserver để API Đánh giá mã thông báo hoạt động không?
  • Nó có được bật theo mặc định trên Charmed Kubernetes v1.19 không?

Sẽ được biết ơn cho bất kỳ sự giúp đỡ.

Trân trọng, sana

Mikołaj Głodziak avatar
lá cờ id
Bạn có thấy [chủ đề này](https://stackoverflow.com/questions/55437231/k8s-how-to-project-service-account-token-into-pod) không? Bạn đã thử tạo `serviceaccount` rồi thêm các cờ này vào `kubeapi` chưa?
lá cờ za
@MikoÅajGÅodziak Đúng, đúng rồi. Những cờ đó cần được bật trên kube-apiserver. Vấn đề là tôi không sử dụng thiết lập kubeadm, tôi đang sử dụng charm kubernetes và tôi không biết cách kích hoạt tính năng này trên kubernetes-master charm. Tôi cũng đã hỏi điều này trên Charmhub: https://discourse.charmhub.io/t/does-kubernetes-master-charm-545-have-tokenrequest-api-enabled/5012/2

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.