Spring Boot bootstrap.yml中的Openshift秘密

时间:2018-07-18 11:18:16

标签: spring-boot kubernetes openshift spring-config

这是我的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 – OSE中将secret配置为ENV变量时,应用程序正在启动。

   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

在这种情况下感到惊讶,E NV变量正在容器/ POD中工作,但是在引导过程中无法以某种方式获取它

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中的机密?如何配置以获取秘密作为ENV变量并注入bootstrap.yml文件?

注意:我无法将Vault配置移出bootstrap.yml。

Openshift企业信息:

Version:
OpenShift Master:v3.2.1.31
Kubernetes Master:v1.2.0-36-g4a3f9c5

1 个答案:

答案 0 :(得分:0)

最后,我能够实现这一目标。这就是我所做的

提供令牌作为参数:

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

引导文件:

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

感谢提供输入的同事。