是否有如何使用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结构,您的属性有一些不同的关注点:元数据、规范(分为容器和卷(
因此,为了让您的实现发挥作用:
- 为每个子树定义具有正确前缀的
@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
...
注:
- 安装在jar旁边的
bootstrap.yaml
完全覆盖捆绑在应用程序中的bootstrap.yaml
的内容(没有像application.yaml
那样的级联 - 我正在运行
2.0.1
如果你需要,我可以发布更多的配置位。