嗨,我在玩Kubernetes的秘密。 我的部署文件是:
---
apiVersion: v1
kind: Secret
metadata:
name: my-secrets
labels:
app: my-app
data:
username: dXNlcm5hbWU=
password: cGFzc3dvcmQ=
我能够创建机密,并按如下所示将它们安装在我的部署中:
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-service
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-service
labels:
app: spring-service
spec:
replicas: 1
selector:
matchLabels:
app: spring-service
template:
metadata:
labels:
app: spring-service
spec:
containers:
- name: spring-service
image: my-image:tag
imagePullPolicy: Always
ports:
- containerPort: 8080
volumeMounts:
- name: my-secret-vol
mountPath: "/app/secrets/my-secret"
readOnly: true
volumes:
- name: my-secret-vol
secret:
secretName: my-secrets
我的问题是如何访问在春季启动应用中秘密创建的username
和password
?
我尝试使用${my-secrets.username}
和${username}
进行加载,但是找不到值。
我还尝试如下在Deployment.yml中将机密添加为环境变量:
env:
- name: username
valueFrom:
secretKeyRef:
name: my-secrets
key: username
- name: password
valueFrom:
secretKeyRef:
name: my-secrets
key: password
在这种情况下,值是从机密中加载的,当我在minikube仪表板中更改机密的值时,它不会反映所做的更改。
请帮助我了解其工作原理。
我正在使用minikube
和docker
作为容器
答案 0 :(得分:2)
对于第一种方法,您将在以下位置找到值:
- /app/secrets/my-secret/username
- /app/secrets/my-secret/password
对于第二种方法,您不能在运行时更改env vars的值,您需要重新启动或重新部署Pod
答案 1 :(得分:1)
您不会将机密注入properties.yml
中。而是将机密内容用作properties.yml
。该过程如下所示:
properties.yml
base64 properties.yml
)。properties.yaml
下的秘密中。您应该以以下格式结尾一个秘密:
apiVersion: v1
kind: Secret
metadata:
name: my-secrets
labels:
app: my-app
data:
properties.yml: dXNlcm5hbWU=
现在,当您在Pod上安装此机密时,Kubernetes将解密该机密并将其值放在相关路径下,您只需安装它即可。
此模式将有2个配置文件-一个配置文件中存储了非敏感配置,第二个配置文件(包括敏感配置)作为密钥存储。我不知道是否可以使用Spring Boot加载多个配置文件。
最后一条评论-此过程既麻烦又容易出错。对配置文件的每次更改都需要解码原始机密并重复此手动过程。另外,很难理解发生了什么变化-您所看到的是整个内容都已变化。因此,我们构建了Kamus。它使您仅加密敏感值,而不加密整个文件。让我知道这是否与您有关:)