基于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
相关产品推荐
相关产品推荐

