Spring Boot bootstrap.yml 中的 Openshift 秘密
Openshift secret in Spring Boot bootstrap.yml
这是我的 bootstrap.yml 的样子。
spring:
cloud:
config:
uri: http://xxxx.com
username: ****
password: ****
vault:
host: vault-server
port: 8200
scheme: http
authentication: token
token: ${VAULT_ROOT_TOKEN}
application:
name: service-name
management:
security:
enabled: false
当我在 Deployment Config 中将 secret 配置为 ENV 变量时,应用程序正在启动 – OSE,如下所示。
name: VAULT_ROOT_TOKEN
value: *********
但是将机密配置为 ENV 变量并从 OSE 机密中获取值不起作用。
name: VAULT_ROOT_TOKEN
valueFrom:
secretKeyRef:
name: vault-token
key: roottoken
我遇到的错误是
org.springframework.vault.VaultException: Status 400 secret/service-name/default: 400 Bad Request: missing required Host header
在这种情况下令人惊讶,ENV 变量在 container/POD 中工作,但不知何故它无法在 bootstrap 过程中获取 。
env | grep TOKEN
VAULT_ROOT_TOKEN=********
我在 OSE 中的秘密配置
oc describe secret vault-token
Name: vault-token
Namespace: ****
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
roottoken: 37 bytes
我的部署配置或 OSE 中的秘密缺少什么?如何配置以获取 secret 作为 ENV 变量并注入 bootstrap.yml 文件?
注意:我无法将 Vault 配置移出 bootstrap.yml。
Openshift 企业信息:
Version:
OpenShift Master:v3.2.1.31
Kubernetes Master:v1.2.0-36-g4a3f9c5
我终于做到了。这就是我所做的
提供令牌作为参数:
java $JAVA_OPTS -jar -Dspring.cloud.vault.token=${SPRING_CLOUD_VAULT_TOKEN} service-name.jar
我的配置是这样的:
部署配置:
- name: SPRING_CLOUD_VAULT_TOKEN
valueFrom:
secretKeyRef:
name: vault-token
key: roottoken
Bootstrap 文件:
spring:
cloud:
config:
uri: http://xxxx.com
username: ****
password: ****
vault:
host: vault-server
port: 8200
scheme: http
authentication: token
token: ${SPRING_CLOUD_VAULT_TOKEN}
application:
name: service-name
management:
security:
enabled: false
感谢提供意见的同事。
这是我的 bootstrap.yml 的样子。
spring:
cloud:
config:
uri: http://xxxx.com
username: ****
password: ****
vault:
host: vault-server
port: 8200
scheme: http
authentication: token
token: ${VAULT_ROOT_TOKEN}
application:
name: service-name
management:
security:
enabled: false
当我在 Deployment Config 中将 secret 配置为 ENV 变量时,应用程序正在启动 – OSE,如下所示。
name: VAULT_ROOT_TOKEN
value: *********
但是将机密配置为 ENV 变量并从 OSE 机密中获取值不起作用。
name: VAULT_ROOT_TOKEN
valueFrom:
secretKeyRef:
name: vault-token
key: roottoken
我遇到的错误是
org.springframework.vault.VaultException: Status 400 secret/service-name/default: 400 Bad Request: missing required Host header
在这种情况下令人惊讶,ENV 变量在 container/POD 中工作,但不知何故它无法在 bootstrap 过程中获取 。
env | grep TOKEN
VAULT_ROOT_TOKEN=********
我在 OSE 中的秘密配置
oc describe secret vault-token
Name: vault-token
Namespace: ****
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
roottoken: 37 bytes
我的部署配置或 OSE 中的秘密缺少什么?如何配置以获取 secret 作为 ENV 变量并注入 bootstrap.yml 文件?
注意:我无法将 Vault 配置移出 bootstrap.yml。
Openshift 企业信息:
Version:
OpenShift Master:v3.2.1.31
Kubernetes Master:v1.2.0-36-g4a3f9c5
我终于做到了。这就是我所做的
提供令牌作为参数:
java $JAVA_OPTS -jar -Dspring.cloud.vault.token=${SPRING_CLOUD_VAULT_TOKEN} service-name.jar
我的配置是这样的:
部署配置:
- name: SPRING_CLOUD_VAULT_TOKEN
valueFrom:
secretKeyRef:
name: vault-token
key: roottoken
Bootstrap 文件:
spring:
cloud:
config:
uri: http://xxxx.com
username: ****
password: ****
vault:
host: vault-server
port: 8200
scheme: http
authentication: token
token: ${SPRING_CLOUD_VAULT_TOKEN}
application:
name: service-name
management:
security:
enabled: false
感谢提供意见的同事。