Spring Cloud Kubernetes is not loading secret keys with pattern like xx.yy

7/18/2021

I am trying to learn about Spring Cloud Kubernetes for loading secrets and what I have observed is if a property has yml like structure, then it doesn't get loaded in app.

Ex:

kind: Secret
metadata:
  name: activemq-secrets
  labels:
    broker: activemq
type: Opaque
data:
  amqusername: bXl1c2VyCg==
  amq.password: MWYyZDFlMmU2N2Rm

K8 Manifest

  template:
    spec:
      volumes: 
        - name: secretvolume
          secret:
            secretName: activemq-secrets
      containers:
        -
          volumeMounts: 
            - name: secretvolume
              readOnly: true
              mountPath: /etc/secrets/

jvm args:

-Dspring.cloud.kubernetes.secrets.paths=/etc/secrets/
-Dspring.cloud.kubernetes.secrets.enabled=true

Trying to load @Value("${amqusername}")works

But when I try to read this property with @Value("${amq.password}") I get error with placeholder not found. I have tried printing all spring configs and it doesn't show up. How can I fix this.

-- Sai
kubernetes
secret-key
spring

1 Answer

7/18/2021

Try changing the variable name in the secret to amq_password

Update:

If you use environment variables rather than system properties, most operating systems disallow period-separated key names, but you can use underscores instead (e.g. SPRING_CONFIG_NAME instead of spring.config.name).

https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/html/boot-features-external-config.html

-- San
Source: StackOverflow