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