我遇到了一个有趣的情况,我需要克隆一个私人的github回购到一个码头容器,我在库伯内特斯运行。最初,我尝试使用gitRepo挂载,但是,在部署清单中使用OAuth密钥是不可接受的,我希望使用回购部署密钥,而不是附加到GitHub帐户的OAuth密钥。
理想情况下,我应该使用一个使用秘密创作的gitRepo挂载,但是在撰写本文时,这个特性是不可用的。
约束条件
我需要以下几点:
可能的解决办法:
将SSH密钥挂载为机密和克隆:
我尝试将回购克隆到一个emptydir中,在一个单独的荚中运行bash脚本(无论如何,这个脚本必须运行,我也在将它用于其他事情),但是我遇到了将ssh键放到荚中的问题。This question就是关于这个问题的,但是它似乎没有办法做到这一点。我能够通过秘密挂载获得密钥,但是权限设置为777。为了解决这个问题,我将密钥挂载到一个/test/目录中,然后尝试将它们放到/root/.ssh/中。这给了我这些奇怪的错误:
cp: '/test/id_rsa' and '/root/.ssh/id_rsa' are the same file
cp: '/test/id_rsa.pub' and '/root/.ssh/id_rsa.pub' are the same file我还试着使用cat,并将它们连接到文件中,但这是行不通的。起初,当我走错了路时,它给了我这些错误:
cat: /keys/id_rsa: input file is output file
cat: /keys/id_rsa.pub: input file is output file一旦我修好了路,它什么也没做,默默地失败了。进入容器的kubectl exec在/root/.ssh/中没有显示任何文件。
我想我已经走到了这条路的底部,所以我不认为这是解决办法。
配置ssh以忽略键权限
如果SSH有一种方法可以忽略键上的权限--默认情况下它强制执行644或更少的权限--那么上面的解决方案是可能的。我很惊讶我没有找到任何方法来做这件事,但是我的google-fu总是会发现结果说你只需要正确地设置权限。
将钥匙安全地放入容器的其他方法
理想情况下,我希望在容器中有一个键,以便使用其他repos来扩展这个项目。可能还有其他的方法,我没有想过,也没有尝试过。
在容器中使用OAuth键进行克隆
我考虑过尝试在环境变量中使用OAuth密钥,然后使用它通过HTTPS克隆回购。这不太理想,但如果有效的话,我会接受的。现在唯一阻止我这样做的是我不能使用部署密钥。如果有一种使用部署密钥的OAuth的方法,我还没有找到它,但是如果有人知道更多的话,它可能是解决方案。
在码头图像中的克隆
没有任何东西在回购,我会感到不舒服,在码头的形象,所以我可以走这条路。问题是,我需要能够下拉更新的回购。如果我把它放进容器里,没有钥匙我就拉不动了。可能有一些我还没试过的解决办法。
我觉得我没有什么可以尝试的了,所以任何建议都值得一试。
类似问题
This question非常类似于我试图做的事情,但是我觉得由于他们没有使用Kubernetes和我,所以值得单独发布,因为秘密和不同的文件挂载方法。
This question讨论了如何在Kubernetes中将SSH密钥放入容器中,但是我并不是一成不变地在SSH上使用git,所以我认为这应该是自己的问题。
发布于 2016-12-10 16:17:41
尝试安装包含部署密钥的秘密,如下所示:
volumeMounts:
- mountPath: /root/.ssh
name: ssh-key
volumes:
- name: ssh-key
secret:
secretName: ssh-key
defaultMode: 256下面是我如何使用它的完整示例:
apiVersion: batch/v2alpha1
kind: ScheduledJob
metadata:
name: transporter
spec:
schedule: 0 5 * * *
jobTemplate:
spec:
template:
spec:
nodeSelector:
role: mysqldump
containers:
- name: transporter
image: camil/mysqldump
command: ["/bin/bash", "-c"]
args:
- ssh-keyscan -t rsa $TARGET_HOST > ~/.ssh/known_hosts && ssh -i /root/.ssh/private/id_rsa $LINUX_USER@$TARGET_HOST 'mkdir mysqldump || true' && scp -i /root/.ssh/private/id_rsa /mysqldump/* $LINUX_USER@$TARGET_HOST:/home/$LINUX_USER/mysqldump
env:
- name: TARGET_HOST
valueFrom:
configMapKeyRef:
name: transporter
key: target.host
- name: LINUX_USER
valueFrom:
configMapKeyRef:
name: transporter
key: linux.user
imagePullPolicy: Always
volumeMounts:
- mountPath: /mysqldump
name: mysqldump
- mountPath: /root/.ssh/private
name: ssh-key
volumes:
- name: mysqldump
hostPath:
path: /home/core/mysqldump
- name: ssh-key
secret:
secretName: ssh-key
defaultMode: 256
restartPolicy: OnFailurehttps://stackoverflow.com/questions/41067668
复制相似问题