检索作为卷安装的 Kubernetes Secrets
Retrieve Kubernetes Secrets mounted as volumes
嗨,我正在玩弄 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
我的问题是如何访问我在 spring-boot 应用程序中秘密创建的 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
作为容器
对于第一种方法,您将在以下位置找到值:
- /app/secrets/my-secret/username
- /app/secrets/my-secret/password
对于第二种方法,您无法在运行时更改环境变量的值,您需要重新启动或重新部署 pod
您没有将秘密注入 properties.yml
。相反,您将秘密的内容用作 properties.yml
。该过程如下所示:
- 使用敏感数据(例如密码)创建
properties.yml
- Base64 编码此文件(例如
base64 properties.yml
)。
- 获取 base64 编码值并将其放入密钥
properties.yaml
下的秘密中。
您最终应该得到以下格式的秘密:
apiVersion: v1
kind: Secret
metadata:
name: my-secrets
labels:
app: my-app
data:
properties.yml: dXNlcm5hbWU=
现在,当您将此机密挂载到您的 pod 上时,Kubernetes 将解密该机密并将值放在相关路径下,您可以直接挂载它。
模式是有 2 个配置文件 - 一个具有与代码一起存储的非敏感配置,第二个(包括敏感配置)作为秘密存储。我不知道是否可以使用 Spring Boot.
加载多个配置文件
最后一条评论 - 这个过程既麻烦又容易出错。对配置文件的每次更改都需要解码原始密码并重复此手动过程。此外,很难理解发生了什么变化——您所看到的只是整个内容都发生了变化。因此,我们构建 Kamus。它让您只加密敏感值而不是整个文件。让我知道这是否与您相关:)
嗨,我正在玩弄 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
我的问题是如何访问我在 spring-boot 应用程序中秘密创建的 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
作为容器
对于第一种方法,您将在以下位置找到值:
- /app/secrets/my-secret/username
- /app/secrets/my-secret/password
对于第二种方法,您无法在运行时更改环境变量的值,您需要重新启动或重新部署 pod
您没有将秘密注入 properties.yml
。相反,您将秘密的内容用作 properties.yml
。该过程如下所示:
- 使用敏感数据(例如密码)创建
properties.yml
- Base64 编码此文件(例如
base64 properties.yml
)。 - 获取 base64 编码值并将其放入密钥
properties.yaml
下的秘密中。
您最终应该得到以下格式的秘密:
apiVersion: v1
kind: Secret
metadata:
name: my-secrets
labels:
app: my-app
data:
properties.yml: dXNlcm5hbWU=
现在,当您将此机密挂载到您的 pod 上时,Kubernetes 将解密该机密并将值放在相关路径下,您可以直接挂载它。
模式是有 2 个配置文件 - 一个具有与代码一起存储的非敏感配置,第二个(包括敏感配置)作为秘密存储。我不知道是否可以使用 Spring Boot.
加载多个配置文件最后一条评论 - 这个过程既麻烦又容易出错。对配置文件的每次更改都需要解码原始密码并重复此手动过程。此外,很难理解发生了什么变化——您所看到的只是整个内容都发生了变化。因此,我们构建 Kamus。它让您只加密敏感值而不是整个文件。让我知道这是否与您相关:)