【问题标题】:Variable from kubernetes yaml causes: Could not resolve placeholder 'ACTUATOR_PASSWORD' in value "${ACTUATOR_PASSWORD}"来自 kubernetes yaml 的变量导致:无法解析值“${ACTUATOR_PASSWORD}”中的占位符“ACTUATOR_PASSWORD”
【发布时间】:2019-07-20 11:00:32
【问题描述】:

当我从 IntelliJ 运行我的应用程序时,我得到一个 warning / error 尽管应用程序构建良好并运行所有测试,这是我应该忽略的事情,还是可以解决这个问题?

Kubernetes secret 用于创建随机密码,因此我为该特定变量设置了一个占位符。

2019-02-26 19:45:29.600  INFO 38918 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-02-26 19:45:29.684  WARN 38918 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'actuatorSecurity': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'ACTUATOR_PASSWORD' in value "${ACTUATOR_PASSWORD}"
2019-02-26 19:45:29.685  INFO 38918 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2019-02-26 19:45:29.685  INFO 38918 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-02-26 19:45:29.707  INFO 38918 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2019-02-26 19:45:29.713  INFO 38918 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]

qronicle-deployment.yaml

apiVersion: v1
kind: Secret
metadata:
  name: actuator
  namespace: {{ .Release.Namespace }}
type: Opaque
data:
  actuator-password: {{ randAlphaNum 10 | b64enc | quote }}
....
- name: ACTUATOR_PASSWORD
  valueFrom:
    secretKeyRef:
      name: actuator
      key: actuator-password

application.properties

# spring boot actuator access control
management.endpoints.web.exposure.include=*
security.user.actuator-username=admin
security.user.actuator-password=${ACTUATOR_PASSWORD}

ACTUATOR_PASSWORD在这里被消费

@Configuration
@EnableWebSecurity
class ActuatorSecurity : WebSecurityConfigurerAdapter() {
    @Value("\${security.user.actuator-username}")
    private val actuatorUsername: String? = null

    @Value("\${security.user.actuator-password}")
    private val actuatorPassword: String? = null

    ....
}

【问题讨论】:

    标签: spring-boot kotlin spring-security kubernetes


    【解决方案1】:

    这在application.properties 文件中起到了作用

    security.user.password=${ACTUATOR_PASSWORD:admin123}

    如果未提供环境变量,将使用admin123

    【讨论】:

      【解决方案2】:

      通常,您会将其挂载在部署 yaml 之外。

      在这里,您可以在节点将要运行的 k8 上下文中运行 kubectl create secret generic <secret_name> --from-literal <secret_key> ='<password>'

      这将在那里创建一个秘密,您上面的部署 yaml 会将其映射到环境变量。

      【讨论】:

        猜你喜欢
        • 2021-01-29
        • 2017-02-19
        • 2017-07-23
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多