如何将 Google Secret Manager 中的机密注入 K8s pod?

问题描述

将来自 Google Secret Manager 的密钥注入 Kubernetes 部署的最佳实践是什么?我已将 Grafana 实例的管理员密码存储到 Google Secret Manager。 Grafana 实例是使用 Google Kubernetes Engine 上的 helm chart 部署的。我确实尝试使用 kube-secrets-init,这是一个 Kubernetes 变异准入网络钩子,它变异任何引用秘密 Google Secret Manager 的 K8s Pod。我按照说明操作,但是当我部署 Grafana 实例时,出现以下错误

Internal error occurred: Failed calling webhook "secrets-init.doit-intl.com": expected webhook response of admission.k8s.io/v1,Kind=AdmissionReview,got /,Kind=

这是用于部署 mutating webhook 的文件

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
Metadata:
  name: mutating-secrets-init-webhook-cfg
  labels:
    app: secrets-init-webhook
webhooks:
  - name: secrets-init.doit-intl.com
    clientConfig:
      service:
        name: secrets-init-webhook-svc
        namespace: default
        path: "/pods"
      caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLekNDQWhPZ0F3SUJBZ0lSQVAyQ3BnQjlEVGpZbk5xSVBlM01aTTB3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa09ETTVPVFptTW1ZdE1qSmtPQzAwT0RaakxUazNaVGt0TXpsbE0yWXlObUV5T0RaagpNQjRYRFRJeE1ETXhNREF5TWpZMU0xb1hEVEkyTURNd09UQXpNalkxTTFvd0x6RXRNQ3NHQTFVRUF4TWtPRE01Ck9UWm1NbVl0TWpKa09DMDBPRFpqTFRrM1pUa3RNemxsTTJZeU5tRXlPRFpqTUlJQklqQU5CZ2txaGtpRzl3MEIKQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeTVRU2ZDTitoWERoTG04ZGRrN2Zzbk1HMG84bm9ZeVhUaC9ZeW1UZApiUGRrRGFTT3g1eU9weWtGb1FHV3RNaWR6RTNzd2FWd0x6WjFrdkpCaHZIWm43YzBsRdbnKytJbmNGV2dqZjEzCjdUS2RYZjI1TEFDNkszUVl3MmlzMTc5L1U1U2p2TUVCUFdzMkpVcFZ1L2s2Vm50UmZkMWtLSmpST2tVVTVMWlgKajVEZncyb2prNlZTeSs3MDh4aTBlZU14bjNzUzU1Q3hUSGJzNkdBWTRlOXVRUVhpT2dCWXl4UG90Nlk2Vk9WSApDcW1yTXQ3V1ZTQ0xvOVJDb1V3NjlLSnQ5aWVDdW13QnpWMW4xNXF5bExhNXF0MWdWa3h2RkF3MDRweUxWMnBCCmowSFNXdVQ3L2w4Q1dYeXhMdnlNNFoxeEc3VFQva3FSMElHRyt5YWI4Snk3cFFJREFRQUJvMEl3UURBT0JnTlYKSFE4QkFmOEVCQU1DQWdRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVRFSjFJN3phSGJkRQp0amxTUEtJdGU2VlhXbTB3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQU1YaU9BbGcweDlqTE5Zbm1IS3MrNW1ECmVhbnhUdmZxWHFcslphK1ZPZnFYNm4xMzBncGk2cnM2K2lxUnh6bkVtVUJVZWJGM2s4c2VSUFBzenFvRzh4OFMKOXNHaE1idlBkVjZleTByMUR0VGFQQnk2blFXUUdqTzhXV2JNd21uakRlODhCQzZzckp1UEpCM0ZLVVYwSWF1NQo5bHhKaW5OamtoMXp4OHpYNVV2anNXeXg2dk5Ha0lZQy9KR2pTem5NRGhzZEVEbmE0R2FqOHR0TUlPWjduRG9JCkdkeWxCNnFwVUgvZmVsMURoTglrWFIvL0cyRkdHRERQc3BUc1ZmczV5N2p3d2NURGgwYnpSZmpjdjhBRXR1cDQKWjlQSU9hNUdhN0NXbVJIY0FHSXBnSGdzUTZ5VC95N3krVVluM1pmVW44NEYwdERFMi9HbnN5ekRWZDM4cHZBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    admissionReviewVersions: ["v1"]
    sideEffects: None
    rules:
      - operations: [ "CREATE" ]
        apiGroups: ["*"]
        apiVersions: ["*"]
        resources: ["pods"]

解决方法

如果我理解正确的话 - 您的情况当前的问题是,AdmissionReview 中没有 V1 支持。

从去年开始就有一个相关的公开 github 问题:Add support for v1 AdmissionReview

如果我们再深入一点,我们会看到 kube-secrets-init 用作上游 slok/kubewebhook

而且 kubewebhook 有自己的未解决问题:Add support for v1 AdmissionReview #72

当前阶段:

根据 authors comment,新的 v2.0.0-beta.1 已经发布,但似乎没有人对其进行测试。

kube-secrets-init issue 中也有更新和发布 V2 的提议..


所以, kube-secrets-init 尚不兼容 v1 版本。它正在等待修复,直到有人在 v2.0.0-beta.1 版中向其上游项目 (slok/kubewebhook) 提供反馈