使用spring.cloud.kubernetes.secrets.paths属性将机密读取为文件



是否有如何使用spring.cloud.kubernetes.secrets.paths=/mnt/secrets-store属性将机密读取为文件(装入卷(的示例?

我的Pod.yaml


kind: Pod
apiVersion: v1
metadata:
name: nginx-mounted-secrets
namespace: default
labels:
aadpodidbinding: pod-mi
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: foo
mountPath: "/mnt/secrets-store"
readOnly: true
volumes:
- name: foo
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: spc

当我运行Pod时,秘密被安装在上

kubectl -n default exec -it nginx-mounted-secrets -- bash
root@nginx-mounted-secrets:/# ls /mnt/secrets-store
service-one-secret
service-two-secret

我尝试了以下操作,但字段没有填充:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties
@Data
public class ApplicationSecrets {
private String serviceOneSecret;
private String serviceTwoSecret;
}

我正在使用

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
<version>1.1.6.RELEASE</version>
</dependency>

在一般的spring应用程序中,ConfigurationProperties属性是使用前缀构建的用于分离关注点(即弹簧特性与应用特性(。

根据yml结构,您的属性有一些不同的关注点:元数据、规范(分为容器和卷(

因此,为了让您的实现发挥作用:

  1. 为每个子树定义具有正确前缀的@ConfigurationProperties,并相应地使用它们

2.[OR]加载yml属性并通过@Value查找它们,使用自定义属性占位符,如下所示:如何使用YamlPropertiesFactoryBean使用Spring Framework 4.1加载YAML文件?例如,他们自动连接地图中的所有属性(该解决方案具有@Value("#{${propertyname}}") private Map<String,String> propertyname;

我认为在您的案例中可能缺少的是让spring知道秘密安装在哪里。我已经通过bootstrap.yaml文件(安装在应用程序jar旁边(完成了这项工作。

spring:
cloud:
kubernetes:
secrets:
# this would be "/mnt/secrets-store" in your case
paths: /etc/secrets
enabled: true
config:
name: "config-map-name"
enabled: true
...

注:

  1. 安装在jar旁边的bootstrap.yaml完全覆盖捆绑在应用程序中的bootstrap.yaml的内容(没有像application.yaml那样的级联
  2. 我正在运行2.0.1

如果你需要,我可以发布更多的配置位。

相关内容

  • 没有找到相关文章

最新更新