Springboot集成使用阿里云kafka详细步骤(3)
- UID
- 1066743
|
Springboot集成使用阿里云kafka详细步骤(3)
外部注入路径变量的方式
我们上面的代码中是把conf文件的路径写死的,如果需要变动地址,可以使用以下方式
环境注入conf文件路径
因为代码中会默认获取环境变量中的java.security.auth.login.config配置,所以只需要启动时 赋值路径即可。
-Djava.security.auth.login.config=你的配置绝对路径
完整启动springboot的项目命令如下:
java -jar /jar/report-api-1.0.0-SNAPSHOT.jar --spring.profiles.active=beta -Djava.security.auth.login.config=/jar/kafka_client_jaas.conf
变量注入conf文件路径
注意 因为类的初始化在注入变量之前,所以conf的路径不能用变量的方式注入,否则会报空指针错误。
如下用法会报错
@Value("${kafka.conf.location}")
private String confLocation;
public KafkaAliyunConfiguration() {
// 如果用-D 或者其它方式设置过,这里不再设置
if (null == System.getProperty("java.security.auth.login.config")) {
// 请注意将 XXX 修改为自己的路径
// 这个路径必须是一个文件系统可读的路径,不能被打包到 jar 中
System.setProperty("java.security.auth.login.config", confLocation);
System.out.println("使用配置中的路径,kafka配置为:" + System.getProperty("java.security.auth.login.config"));
} else {
System.out.println("环境变量中已有config文件,kafka配置为:" + System.getProperty("java.security.auth.login.config"));
}
}
安全层面加固
因为直接conf文件中包含帐号密码容易被其他人查看到,有一种方式是外部引入模版文件,使用环境变量中的帐号密码修改conf文件。
模版文件如下:
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="_KAFKA_ALIYUN_USERNAME_"
password="_KAFKA_ALIYUN_PASSWORD_";
};
使用shell命令从s3中下载conf文件并修改conf文件如下:
initContainers:
- name: pull-lib
image: anigeo/awscli:latest
command: ["/bin/sh","-c"]
args: ['aws s3 cp s3://test-env/kafka.client.truststore.jks /jar/ ;aws s3 cp s3://test-env/kafka_client_jaas.conf /jar/ ;sed -i "s/_KAFKA_ALIYUN_USERNAME_/${KAFKA_SSL_USERNAME}/" /jar/kafka_client_jaas.conf;sed -i "s/_KAFKA_ALIYUN_PASSWORD_/${KAFKA_SSL_PASSWORLD}/" /jar/kafka_client_jaas.conf']
env:
- name: AWS_DEFAULT_REGION
value: cn-southwest-2
- name: KAFKA_SSL_USERNAME
valueFrom:
secretKeyRef:
name: aliyun-kafka
key: username
- name: KAFKA_SSL_PASSWORLD
valueFrom:
secretKeyRef:
name: aliyun-kafka
key: password
volumeMounts:
- name: workdir
mountPath: /jar |
|
|
|
|
|