繁体   English   中英

如何为 spring 云配置服务器 SSH 身份验证授予 Openshift 容器的非特权用户对 /root/.ssh 的读取访问权限?

[英]How to give a Openshift container's unprivileged user read access to /root/.ssh for spring cloud config server SSH authentication?

我想通过 Spring 启动云配置服务器使用 SSH 身份验证。 到目前为止,我一直在 docker 集群上的 docker 容器中运行配置服务器,没有任何问题。

我的组织最近决定将所有内容移至 Openshift 3。我正在尝试部署配置服务器,但是我遇到了使用 SSH 对 Gitlab 进行身份验证的问题。 在 docker 映像中,我在将公共和私有 SSH 密钥复制到 /root/.ssh 之前使用过,它可以工作,但它在我生成的 S8 中的 Openshift 上不起作用。

在 Openshift 中,我创建了一个名为cfgssh的通用 kubernetes 密钥,它由 id_rsa 和 id_rsa.pub 密钥(base64 编码)组成,然后我将密钥安装到 /root/.ssh 在我的部署配置/容器中。 这不起作用我猜用户运行应用程序时没有对 /root/.ssh 的读取访问权限? 这总是以 configServer 在身份验证异常后崩溃而告终。

我能够在本地和 docker swarm 上运行 spring 云配置服务器,而没有任何身份验证问题,因此这绝对不是云配置服务器配置问题。

有没有其他人遇到/找到解决这个问题的方法?

我的配置如下。

Maven fabric8部署片段:

spec:
  replicas: 4
  template:
    spec:      
      containers:
        - env:
          - name: SPRING_PROFILES_ACTIVE
          value: qa
          volumeMounts:
            - name: cfgssh
              mountPath: ~/.ssh
              readOnly: true
          livenessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
              scheme: HTTPS
            initialDelaySeconds: 180
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
              scheme: HTTPS
            initialDelaySeconds: 60
            timeoutSeconds: 5
          resources:
            requests:
              memory: "64Mi"
            limits:
              memory: "256Mi"
          env:
            - name: JAVA_OPTIONS
              value: "-Xms64M -Xmx256M"
      volumes:
        - name: cfgssh
          secret:
            secretName: cfgssh
            items:              
              - key: id_rsa
                path: id_rsa
              - key: id_rsa.pub
                path: id_rsa.pub

假设它在容器中使用 ssh 客户端(您没有指定您正在使用的图像),我的猜测是您运行的任何用户都不是root 您可以通过执行来检查容器的默认用户是什么

$ kubectl exec -it <pod-name> -c <container-name> sh
$ whoami

话虽如此,安装在~/.ssh上应该可以工作(您在执行到 pod/容器时检查)。 所以我认为你可能对你的id_rsa文件有错误的权限。 (他们需要是0600 )。 确保在您的volumes部分:

      volumes:
        - name: cfgssh
          secret:
            secretName: cfgssh
            defaultMode: 0600 <= add this
            items:              
              - key: id_rsa
                path: id_rsa
              - key: id_rsa.pub
                path: id_rsa.pub

参考: 机密文件权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM