当前位置: 首页 > 知识库问答 >
问题:

如何为库伯内特斯中的Flink应用程序自定义资源提供保险库机密

林绪
2023-03-14

我想为在库伯内特斯集群中运行的Apache Flink作业提供来自Hashicorp Vault的机密。这些信用将用于访问检查点和保存点的状态后端。状态后端可能是例如Minio S3存储。在以下设置下,有人能为Flink Application操作员提供一个工作示例吗?

用户名和密码(或访问密钥)的Vault机密:

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配置。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

最终目标是替换硬编码的机密或从vault中以某种方式设置它们:

state.backend: filesystem
s3.endpoint: http://minio:9000
s3.path.style.access: true
s3.access-key: minio
s3.secret-key: minio123

非常感谢。

共有1个答案

龙涵蓄
2023-03-14

设置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 annotation将创建一个与您获取的txt文件相同的文件,但我们将按照如下方式执行

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

它将在密钥之前保留并注入导出

将此文件保存在reop中,并将其添加到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

package.json

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

文档文件

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

您的vault注入文件将类似于位于vault/secrets/secrets的内部pod或您配置的路径。

#!/bin/sh
set -e
export development=false
export production=true
exec "$@"
 类似资料:
  • 我是Kubernetes的新手,他们的概念我不太清楚:云提供商。 我已经使用RKE(Rancher引擎)安装了我的库伯内特斯集群。 我的集群设置在rancher2的顶部。 我的节点是托管OVH服务器的虚拟机。 我设法让运行中的应用程序具有L7入口和ClusterIP服务,但每次我尝试使用L4负载平衡器时,负载平衡器都处于挂起状态。根据https://github.com/rancher/ranch

  • 我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub

  • 希望你们都好, 我目前正在尝试将awx操作符部署到Kubernetes集群上,但在从集群外部访问该服务时遇到了一些问题。 目前,我已设置了以下服务: 我确实设置了一个名为

  • 我使用Flink搭配K8s。一切正常,但我必须在jobmanager启动时手动提交jar。 我认为我们可以扩展flink的形象,并添加提交作业的后期操作。所以jobmanager将是一对一的flink工作。我想这是https://www.youtube.com/watch?v=w721NI-mtAA公司 在这种情况下,如果JM关闭,K8s将启动新的pod并重新提交作业。 我没说错吧? 有没有人对F

  • 大家下午好,我有一个关于将应用程序本身的监控添加到prometheus的问题。我使用的是spring boot actuator,并相应地查看普罗米修斯的值:https://example.com/actuator/prometheus我通过默认头盔图表()为它添加了默认值,从而提升了普罗米修斯: 普罗米修斯本身可以在http://ex.com/prometheus部署。我的springboot应

  • 我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他