如何为 Kubernetes 中的 Flink 应用程序自定义资源提供 Vault 密钥

2023-12-19

我想为 Kubernetes 集群中运行的 Apache Flink 作业提供来自 Hashicorp Vault 的机密。 这些积分将用于访问状态后端以进行检查点和保存点。例如,状态后端可以是 Minio S3 存储。 有人可以提供一个工作示例吗Flink应用算子 https://github.com/lyft/flinkk8soperator/blob/master/docs/crd.md请给出以下设置?

用户名和密码(或访问密钥)的保管库机密:

vault kv put vvp/storage/config username=user password=secret
vault kv put vvp/storage/config access-key=minio secret-key=minio123

Flink 应用程序自定义资源的 k8s 清单:

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

谢谢。


设置 Vault 变量后

可以在部署中添加注释,将变量从Vault中取出到部署中

annotations:
        vault.hashicorp.com/agent-image: <Agent image>
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-secret-secrets: kv/<Path-of-secret>
        vault.hashicorp.com/agent-inject-template-secrets: |2

          {{- with secret "kv/<Path-of-secret>" -}}

          #!/bin/sh
          set -e

          {{- range $key, $value := .Data.data }}
          export {{ $key }}={{ $value }}
          {{- end }}

          exec "$@"
          {{- end }}
        vault.hashicorp.com/auth-path: auth/<K8s cluster for auth>
        vault.hashicorp.com/role: app

这将在您的 POD 中创建该文件。

当你的应用程序运行时,它应该首先执行这个文件,环境变量将被注入到 POD 中。

因此,Vault 注释将创建一个与您获得的文件相同的文件txt但相反,我们会这样做

{{- range $key, $value := .Data.data }}
       export {{ $key }}={{ $value }}
{{- end }}

它将保留并注入export在键和值之前。现在该文件是一种 shell 脚本,一旦它在应用程序启动时执行,它将向OS level.

将此文件保留在 repo 中并将其添加到 Docker 中./bin/runapp

#!/bin/bash
if [ -f '/vault/secrets/secrets' ]; then
  source '/vault/secrets/secrets'
fi
node <path-insnide-docker>/index.js #Sorry dont know scala or Java

包.json

"start": "./bin/runapp",

Dockerfile

ADD ./bin/runapp ./
EXPOSE 4444
CMD ["npm", "start"]

您的保险库注入文件将类似于 pod 内的内容/vault/secrets/secrets或您配置的路径。

#!/bin/sh
set -e
export development=false
export production=true
exec "$@"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 Kubernetes 中的 Flink 应用程序自定义资源提供 Vault 密钥 的相关文章

随机推荐

  • 解析 request.object.existed() 返回 false

    我的解析有问题 我写了云代码 Parse Cloud afterSave Parse User function request var user request object if user existed all the times u
  • “git推送”和“git流放推送”有什么区别?

    我有一个 git 存储库 并且系统指示我执行以下操作序列 将给定的一组文件从文件夹复制到上述 git 存储库 源文件夹 不是存储库的一部分 Execute git add Execute git exile push folder name
  • 如何在反应日期中添加一年的选择?

    向右滑动几个月直到我到达正确的年份是很痛苦的react dates 是否有可能添加一些年份 月份的选择 是的 从版本开始是可能的 电子邮件受保护 cdn cgi l email protection 相关拉取请求 https github
  • gcc include 顺序损坏?

    我遇到了一个奇怪的问题 linux c 编译器包含本地目录而不是系统目录中的文件 使用 H 选项查看预编译器输出 可以看到系统文件 usr include sched h突然包括time h来自本地目录而不是系统一的标头 我假设如果包含文件
  • powershell 无法向 Excel 图表添加多个图例条目(系列)

    我在通过 powershell 将多个系列添加到 Excel 图表对象中的系列集合时遇到问题 这是我的代码 threading thread CurrentThread CurrentCulture en US excel New Obje
  • 带有 BroadcastReceiver 的清单中的 ACTION_USER_PRESENT

    对于是否可以通过清单捕获 ACTION USER PRESENT 屏幕解锁似乎存在不同意见 该线程暗示不 它不能完成 Android 广播接收器不工作 https stackoverflow com questions 6698716 an
  • 使用 Scala 中的原始类型实现 Java 接口

    我正在尝试使用 Scala 构建 Sonar 的扩展 我需要扩展以下 Java 接口 public interface Decorator extends BatchExtension CheckProject void decorate
  • 使用 NSKeyedUnarchiver 解码时出现问题

    我正在 XCode 3 2 3 上编写一个针对 iOS 4 0 的应用程序 当应用程序关闭时 我使用 NSCoder 协议存储一些数据 保存似乎工作正常 问题是从保存的文件中检索数据 我的保存方法如下所示 void saveMusicalW
  • 如何将 TrueType 字体转换为 PCL5 Soft 字体?

    如何将 TrueType 字体转换为 PCL5 softfont spf 主要思想是将软字体嵌入到 PCL5 打印文件中 然后选择它供打印机使用 因为它是通过 PCL5 命令指定的字体 ID 另外 如果您知道在创建 PCL5 文件时使用 T
  • 在 C++11 中使用没有托管共享指针的shared_from_this()

    假设我有一个类 它是enable shared from this 的子类 这个基类的文档说在调用shared from this之前应该有一个拥有这个类的共享指针 用new分配类并调用shared from this来管理对象是否安全 正
  • 解析不同架构维度输入的所有可能类型

    我正在为我们公司的产品编写一个库 它将采用我们的用户已经熟悉的任何类型的架构维度作为从字符串转换为双精度的函数的输入 这是我们希望有效的输入类型列表 Input 意义 Output 英寸以双精度表示 12 5 12 英尺 6 英寸 150
  • C# WPF - 窗口中的黑线

    我的窗户上有一条小黑线 为什么
  • 为什么单态和多态在 JavaScript 中很重要?

    我一直在阅读一些有关更改检测的文章 它们都说单态函数比多态函数快得多 例如 这里有一个引用 这样做的原因是 它必须以动态方式编写 所以 它可以检查每个组件 无论其模型结构如何 喜欢 虚拟机不喜欢这种动态代码 因为它们不能 优化它 它被认为是
  • 从内存映射文件读取时出现问题

    我试图在我的应用程序 特别是 Windows 服务 中实现内存映射文件 然后使用 C 形式从服务写入的 MMF 中读取 不幸的是 我似乎无法获得从 MMF 读取任何内容的表单 更重要的是 该表单似乎从未找到该服务创建的 MMF 下面是概述我
  • 如何在不安装 Visual Studio 2012 的情况下使用 MsBuild 在生成服务器上生成 Visual Studio 2012 发布配置文件

    我阅读了这里的许多帖子 但从未找到有效的明确答案 因此 在花了时间让它发挥作用后 我认为我应该发布它 问题 发布配置文件将在服务器上构建 但不会发布 解决方案 确保您已安装Microsoft Windows SDK 和 Net Framew
  • Django 强制密码过期

    是否有任何 django 应用程序可以在一定的时间间隔 例如 30 天 后强制使用户的密码过期 我正在使用 djangp 的身份验证 并希望扩展它或使用社区应用程序 到目前为止我已经尝试过 在用户配置文件中添加了一个字段 用于存储上次更新密
  • 如何强制oracle使用索引范围扫描?

    我对包含 14 亿条记录 带索引 的表运行了一系列极其相似的查询 唯一的问题是这些查询中至少有 10 的执行时间比其他查询多 100 倍以上 我运行了一个解释计划 并注意到对于快速查询 大约 90 Oracle 使用索引范围扫描 对于慢速的
  • 是否有任何简单的自动化方法可以找出与 Delphi 项目关联的所有源文件?

    我喜欢在发布版本时备份项目的源代码集 我使用 GExperts 项目备份 它似乎将项目管理器中的所有文件收集到 ZIP 文件中 您还可以将任意文件添加到此文件集中 但我始终意识到我不一定获得所有文件 除非我专门仔细检查使用条款并将我拥有的所
  • ValueError:endog必须在单位间隔内

    在使用 statsmodels 时 我收到这个奇怪的错误 ValueError endog must be in the unit interval 有人可以给我有关此错误的更多信息吗 谷歌没有提供帮助 产生错误的代码 Multiple r
  • 如何为 Kubernetes 中的 Flink 应用程序自定义资源提供 Vault 密钥

    我想为 Kubernetes 集群中运行的 Apache Flink 作业提供来自 Hashicorp Vault 的机密 这些积分将用于访问状态后端以进行检查点和保存点 例如 状态后端可以是 Minio S3 存储 有人可以提供一个工作示