Kubernetes Helm Chart:在启动时最初创建秘密

问题描述 投票:0回答:1

我有 2 个应用程序,每个应用程序都有一个工作舵图表

  • 应用程序 A - 后端应用程序
  • 应用程序 B - 访问应用程序 A 数据的前端应用程序

应用程序 B 需要 API 密钥才能访问应用程序 A。 当(最初)安装我的应用程序时,我当前首先安装应用程序 A,等到它准备好,运行一些 API 调用来生成 API 密钥。然后我手动将 API 密钥存储到一个秘密中,然后由应用程序 B 使用。

我想让安装更容易,并想是否可以在我的舵图中自动执行此操作?

我的第一个想法是向 App B 添加一个 init-container(如果不可用),它会获取 API 密钥并将其保存到秘密中。不幸的是,似乎不可能从 Pod 内创建秘密(我的目标是仅创建密钥一次,而不是每次启动时都创建密钥)

还有其他我还没想到的方法吗?

kubernetes kubernetes-helm
1个回答
0
投票

您可以尝试使用 Helm 图表创建并清空机密,然后使用 init-container 更新它。 init-container 必须有一个具有适当角色的服务帐户才能“修补”秘密。

类似以下内容:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: foo
rules:
  - apiGroups: [""]
    resources: ["secrets"]
    resourceNames:
      [
        "foo-key-holder",
      ]
    verbs: ["get", "delete", "patch"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: foo
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: foo
subjects:
  - kind: ServiceAccount
    name: foo
    namespace: default

---
apiVersion: v1
kind: Secret
metadata:
  name: foo-key-holder
type: Opaque

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: foo

---
apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  serviceAccountName: foo
  containers:
  - name: foo
    imagePullPolicy: IfNotPresent
    image: bitnami/kubectl:latest
    args: ["patch", "secret", "foo-key-holder", "-p", "'{\"data\": {\"key\":\"<base64_encoded_value>\"}}'"]

注意:在我的示例中,我使用 CLI 来修补机密。在您的用例中,您可以用更智能的脚本替换它,该脚本还检查密钥是否已更新。

© www.soinside.com 2019 - 2024. All rights reserved.