是否可以将serviceaccount机密内容填充到环境变量中?
示例:启动Pod时,它包含一个/var/run/secrets/kubernetes.io/secrets/serviceaccount/
文件夹,其中包含token
,ca.crt
...,而另一个文件夹是映射serviceaccount
的结果转到文件夹。
反正有将serviceaccountsecret.token
映射到环境变量吗?
编辑
我正在使用fabric8 maven插件部署kubernetes / openshift对象。不过,我一直在寻找一种在PodSpec上设置此信息的方法。
因此,当前openshift / kubernetes会将服务帐户信息映射到秘密中,然后将其自动映射到文件系统(`/ var / run ...)。
我正在寻找一种方法来将此“未知”服务帐户密码映射到环境变量(我的意思是,我在创建PodSpec时不知道此密码的名称)。
$ oc get secrets
NAME TYPE DATA AGE
builder-dockercfg-hplx4 kubernetes.io/dockercfg 1 43m
builder-token-bkd8h kubernetes.io/service-account-token 4 43m
builder-token-gpckp kubernetes.io/service-account-token 4 43m
default-dockercfg-q2vpx kubernetes.io/dockercfg 1 43m
default-token-hpr7l kubernetes.io/service-account-token 4 43m
default-token-r5225 kubernetes.io/service-account-token 4 43m
deployer-dockercfg-6h7nw kubernetes.io/dockercfg 1 43m
deployer-token-svmvf kubernetes.io/service-account-token 4 43m
deployer-token-tmg9x kubernetes.io/service-account-token 4 43m
vault-cert kubernetes.io/tls 2 42m
如您所见,openshiftshift / kubernetes会为每个服务帐户创建秘密:
$ oc get sa
NAME SECRETS AGE
builder 2 44m
default 2 44m
deployer 2 44m
每个秘密的格式如下:
$ oc describe secret default-token-hpr7l
Name: default-token-hpr7l
Namespace: ra-sec
Labels: <none>
Annotations: kubernetes.io/created-by=openshift.io/create-dockercfg-secrets
kubernetes.io/service-account.name=default
kubernetes.io/service-account.uid=82ae89d7-898a-11e8-8d35-f28ae3e0478e
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1070 bytes
namespace: 6 bytes
service-ca.crt: 2186 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJyYS1zZWMiLCJrdWJlcm5ldGVzLmlvL3Nl...
每个机密会自动映射到文件系统。不过,我想写PodSpec:
env:
- name: KUBERNETES_TOKEN
valueFrom:
secretKeyRef:
name: <unknown service account secret name>
key: token
我希望我的口气好一些。
答案 0 :(得分:1)
您可以创建带有kubernetes.io/service-account.name
注释的秘密。
此注释提供当前机密的相关服务帐户信息。
apiVersion: v1
kind: Secret
metadata:
name: vault-auth-secret
annotations:
kubernetes.io/service-account.name: vault-auth
type: kubernetes.io/service-account-token
通过这种方式,您可以使用所需数据创建命名机密。
- name: KUBERNETES_TOKEN
valueFrom:
secretKeyRef:
name: vault-auth-secret
key: token
答案 1 :(得分:0)
您如何部署应用程序S2I?
如果是,则可以使用自定义.s2i/bin/run
脚本从文件内容中进行设置,然后运行原始的S2I run
脚本。
请参阅免费电子书中的“自定义源到图像构建”一章:
了解更多详情。