使用 kubernetes secret 进行 ssh 身份验证时出现“只读文件系统”错误

问题描述 投票:0回答:1

我正在尝试在 Jenkins 和 GitHub 之间建立

SSH
身份验证。同样,我使用 kubernetes secret 来存储私钥和公钥,并且在创建 pod 时安装 secrets。我用来创建秘密的命令:

kubectl create secret generic test-ssh --from-file=id_rsa=id_rsa --from-file=id_rsa.pub=id_rsa.pub --namespace jenkins

并将其映射到 pod 配置中:

volumes:
  - secretVolume:
      mountPath: "/root/.ssh"
      secretName: "test-ssh"

创建 pod 后,我可以看到 secret 已正确映射到

~/.ssh
文件夹中,如下所示。

但问题是

~/.ssh
文件夹本身启用了粘性位权限

这阻止了构建在执行

known_hosts
命令时添加
ssh-keyscan
文件

ssh-keyscan github.com >> ~/.ssh/known_hosts
bash: ~/.ssh/known_hosts: Read-only file system

我希望实现我能想到的两个解决方案之一

  1. 创建
    ~/.ssh
    文件夹后删除粘性权限
  2. 挂载kubernetes secret时,不带粘性权限挂载

任何人都可以帮助我了解是否有可能实现这一目标? 我已经尝试过

chmod -t .ssh
它给了我同样的错误
chmod: changing permissions of '.ssh': Read-only file system

~/.ssh
文件夹的所有者是
root
,我已经以
root
用户身份登录。我已经通过运行
whoami
命令确认了这一点。

kubernetes ssh kubernetes-helm ssh-keys kubernetes-secrets
1个回答
0
投票

Secrets 不是允许更改权限的坐骑,因此您必须采取一些技巧才能使其正常工作。 最近我遇到了类似的问题,不得不让它发挥作用。我们使用自定义图像来执行 ssh 调用,因此我们将 .ssh 目录和 known_hosts 文件添加到图像中;在 Dockerfile 中设置权限。然后,我使用 subPath 来定位部署中的 id_rsa 和 id_rsa.pub 文件。我没有方便的映射,但如果需要明天可以展示我的意思。 我认为“官方”答案是将文件挂载在不同的位置,并使用共享挂载或在入口点文件/二进制文件中将它们复制到需要的位置。

© www.soinside.com 2019 - 2024. All rights reserved.