Pulumi: получить секретное значение kubernetes
У меня есть служба со встроенной конфигурацией открытого текста, которая требует определенной информации, которая хранится в секретах Kubernetes. Какие @pulumi/kubernetes
Метод API можно использовать для доступа к необработанным секретным значениям kubernetes?
2 ответа
Использовать k8s.core.v1.Secret.get(pulumiName, secretName)
(secretName
может содержать namespace/
как префикс).
На каждом ресурсе Pulumi есть get()
метод.
Например: получите token
из kubernetes.io/service-account-token
:
import * as k8s from "@pulumi/kubernetes";
type KubernetesSecretData = { [key: string]: string }
const namespace = 'kube-public'
const secretName = 'default-token-tdcdz'
export const token =
k8s.core.v1.Secret.get('testSecret',`${namespace}/${secretName}`)
.data.apply(v => {
return (<KubernetesSecretData> v)["token"]
})
Этот API выглядит так, как будто он отражает API Kubernetes, и, в частности, есть объект core/v1.Secret, который включает в себя секрет data
, Значения в кодировке base64.
(Если RBAC не запрещает это, вы можете вообще kubectl get secret -o yaml secretname
чтобы увидеть то же самое... секреты Kubernetes только так секрет.)
Если вы запускаете это в контексте службы, вероятно, проще запустить службу с переменными среды, установленными из соответствующих секретных значений, используя фрагмент YAML, такой как
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: test-secret
key: username
Короткий ответ: я думаю, что он не позволяет вам увидеть секрет, но использует ссылку там, где вы хотите его использовать: Deployments, StatefulSets, DaemonSets, Pods и т. Д. Это имеет смысл с точки зрения безопасности.
Вы можете увидеть пример создания секрета здесь