You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Kubeless Bot:通过YAML获取Kubernetes Secrets的技术咨询

问题解答

1. 现有YAML的apiVersion和Kind正确性

你的现有配置中,apiVersion: apps/v1和kind: Deployment是完全正确的。apps/v1是Kubernetes 1.9+版本中Deployment资源的标准API版本,用于部署和管理无状态应用实例,符合你的场景需求。

2. 是否需要镜像才能运行

是的,Kubernetes容器必须依赖镜像运行。你的Deployment中的image: img字段指定了容器运行所需的镜像,这个镜像需要包含你的KafkaTrigger触发脚本以及对应的运行环境(比如Python、依赖包等),否则容器会启动失败。

3. 如何用一个YAML同时实现原有KafkaTrigger逻辑+拉取SSH密钥

你不需要额外编写拉取密钥的代码,直接通过Kubernetes的Secret挂载功能,就能让原有脚本无需修改即可访问SSH密钥。以下是两种可行方案:

方案一:将SSH密钥以文件形式挂载到容器(推荐,符合SSH密钥使用习惯)

在Deployment中添加Volume和VolumeMounts,将存储SSH密钥的Kubernetes Secret挂载到容器的SSH目录,原有脚本可直接读取密钥文件:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-bot-grab-secrets
  namespace: name
spec:
  template:
    spec:
      volumes:
        - name: ssh-secrets
          secret:
            secretName: SSH_SECRET_NAME  # 替换为存储SSH密钥的Secret名称
            items:
              - key: id_rsa  # Secret中存储私钥的key
                path: id_rsa
              - key: id_rsa.pub  # 可选,Secret中存储公钥的key
                path: id_rsa.pub
      containers:
      - name: test-bot-grab-secrets
        image: img
        env:
          - name: SQL_URI
            valueFrom:
              secretKeyRef:
                name: SECRET_NAME
                key: SQLALCHEMY_URI
        volumeMounts:
          - name: ssh-secrets
            mountPath: /root/.ssh  # 根据脚本运行用户调整路径,比如非root用户为/home/user/.ssh
            readOnly: true

方案二:若需从外部服务拉取密钥(使用Init容器前置执行)

如果SSH密钥未存储在Kubernetes Secret中,需要从外部服务拉取,可以用Init容器在主容器(运行KafkaTrigger脚本)启动前执行拉取逻辑,将密钥写入共享Volume,主容器再读取该Volume中的密钥:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-bot-grab-secrets
  namespace: name
spec:
  template:
    spec:
      volumes:
        - name: ssh-volume
          emptyDir: {}  # 临时共享Volume
      initContainers:
      - name: fetch-ssh-key
        image: img  # 包含拉取密钥脚本的镜像(可与主容器镜像相同)
        command: ["sh", "-c", "curl -o /ssh/id_rsa https://your-secret-service/ssh-key && chmod 600 /ssh/id_rsa"]
        volumeMounts:
          - name: ssh-volume
            mountPath: /ssh
      containers:
      - name: test-bot-grab-secrets
        image: img
        env:
          - name: SQL_URI
            valueFrom:
              secretKeyRef:
                name: SECRET_NAME
                key: SQLALCHEMY_URI
        volumeMounts:
          - name: ssh-volume
            mountPath: /root/.ssh
            readOnly: true

补充说明

  • 若使用方案一,需先创建存储SSH密钥的Secret:
    kubectl create secret generic SSH_SECRET_NAME --from-file=id_rsa=/path/to/local/id_rsa --from-file=id_rsa.pub=/path/to/local/id_rsa.pub
    
  • 挂载路径需匹配脚本运行用户的SSH目录,避免因权限或路径错误导致脚本无法读取密钥。

内容的提问来源于stack exchange,提问作者jeisenman19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:45:30