【发布时间】:2022-06-21 19:55:47
【问题描述】:
我想为在 Kubernetes 集群中运行的 Apache Flink 作业提供来自 Hashicorp Vault 的机密信息。 这些积分将用于访问用于检查点和保存点的状态后端。状态后端可以是例如 Minio S3 存储。 有人可以为FlinkApplication operator 提供一个工作示例吗?请给出以下设置?
用户名和密码(或访问密钥)的保险柜秘密:
vault kv put vvp/storage/config username=user password=secret
vault kv put vvp/storage/config access-key=minio secret-key=minio123
Flink 应用自定义资源的 k8s manifest:
apiVersion: flink.k8s.io/v1beta1
kind: FlinkApplication
metadata:
name: processor
namespace: default
spec:
image: stream-processor:0.1.0
deleteMode: None
template:
metadata:
annotations:
vault.hashicorp.com/agent-inject: "true"
vault.hashicorp.com/role: vvp-flink-job
vault.hashicorp.com/agent-inject-secret-storage-config.txt: vvp/data/storage/config
flinkConfig:
taskmanager.memory.flink.size: 1024mb
taskmanager.heap.size: 200
taskmanager.network.memory.fraction: 0.1
taskmanager.network.memory.min: 10mb
web.upload.dir: /opt/flink
jobManagerConfig:
resources:
requests:
memory: "1280Mi"
cpu: "0.1"
replicas: 1
taskManagerConfig:
taskSlots: 2
resources:
requests:
memory: "1280Mi"
cpu: "0.1"
flinkVersion: "1.14.2"
jarName: "stream-processor-1.0-SNAPSHOT.jar"
parallelism: 3
entryClass: "org.StreamingJob"
programArgs: >
--name value
flink 应用的 Docker 文件:
FROM maven:3.8.4-jdk-11 AS build
ARG revision
WORKDIR /
COPY src /src
COPY pom.xml /
RUN mvn -B -Drevision=${revision} package
# runtime
FROM flink:1.14.2-scala_2.12-java11
ENV FLINK_HOME=/opt/flink
ENTRYPOINT ["/docker-entrypoint.sh"]
EXPOSE 6123 8081
CMD ["help"]
flink-config.yaml 包含以下示例:
# state.backend: filesystem
# Directory for checkpoints filesystem, when using any of the default bundled
# state backends.
#
# state.checkpoints.dir: hdfs://namenode-host:port/flink-checkpoints
# Default target directory for savepoints, optional.
#
# state.savepoints.dir: hdfs://namenode-host:port/flink-savepoints
最终目标是替换硬编码的秘密或以某种方式从保险库中设置它们:
state.backend: filesystem
s3.endpoint: http://minio:9000
s3.path.style.access: true
s3.access-key: minio
s3.secret-key: minio123
谢谢。
【问题讨论】:
-
您已经为保管库添加了注释的问题是什么,如果 CRD 正在创建部署或 POD,您的注释将在 POD 或部署中,并且您将在文件中获取变量。 learn.hashicorp.com/tutorials/vault/kubernetes-sidecar?in=vault/…
-
嗨@Harsh Manvar,问题是如何为 Flink 应用程序本身提供 Vault 文件中的变量。是否应该使用 shell 脚本将其附加到 flink-config.yaml 或在 Java/Scala 应用程序运行时通过
StreamExecutionEnvironment getExecutionEnvironment(Configuration configuration)设置?configuration.setString("s3.access-key", accessKey)。我可能已经用这条评论在某种程度上回答了我的问题。 -
您的意思是最终从保险库到您的 pod 应用程序应该能够使用环境访问变量?正确的? vault 将其作为文件注入 pod 内,但您希望 ti 作为环境变量,因此应用程序从 env 获取它而不是解析它?
-
实际上这是将其设置为环境的另一种选择。变量,不是吗?我正在考虑从我的 Scala 应用程序中解析 pod 的 secret-storage-config.txt 中提供的保险库机密。
-
是的,我会写答案而不是解析从 env 获取变量会很容易,但这取决于您的开发计划。您可以将此 txt 文件行作为环境变量注入或解析文件是选项。
标签: kubernetes apache-flink vault