首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kubernetes吊舱克隆安全的git回购

问在Kubernetes吊舱克隆安全的git回购
EN

Stack Overflow用户
提问于 2016-12-09 19:37:59
回答 1查看 6.5K关注 0票数 10

我遇到了一个有趣的情况,我需要克隆一个私人的github回购到一个码头容器,我在库伯内特斯运行。最初,我尝试使用gitRepo挂载,但是,在部署清单中使用OAuth密钥是不可接受的,我希望使用回购部署密钥,而不是附加到GitHub帐户的OAuth密钥。

理想情况下,我应该使用一个使用秘密创作的gitRepo挂载,但是在撰写本文时,这个特性是不可用的。

约束条件

我需要以下几点:

  • 容器内的回购器,当我的容器运行时,我可以间歇地拉动它
  • 必须使用GitHub部署键访问回购。
  • 钥匙必须保持安全(在库伯奈特斯秘密中),而不是存储在码头映像中。
  • 回购必须在同一个吊舱中的两个容器之间共享一个写入和一个读取。

可能的解决办法:

将SSH密钥挂载为机密和克隆:

我尝试将回购克隆到一个emptydir中,在一个单独的荚中运行bash脚本(无论如何,这个脚本必须运行,我也在将它用于其他事情),但是我遇到了将ssh键放到荚中的问题。This question就是关于这个问题的,但是它似乎没有办法做到这一点。我能够通过秘密挂载获得密钥,但是权限设置为777。为了解决这个问题,我将密钥挂载到一个/test/目录中,然后尝试将它们放到/root/.ssh/中。这给了我这些奇怪的错误:

代码语言:javascript
复制
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,并将它们连接到文件中,但这是行不通的。起初,当我走错了路时,它给了我这些错误:

代码语言:javascript
复制
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,所以我认为这应该是自己的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-10 16:17:41

尝试安装包含部署密钥的秘密,如下所示:

代码语言:javascript
复制
volumeMounts:
  - mountPath: /root/.ssh
    name: ssh-key
volumes:
- name: ssh-key
  secret:
    secretName: ssh-key
    defaultMode: 256

下面是我如何使用它的完整示例:

代码语言:javascript
复制
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: OnFailure
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41067668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档