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

标签 docker kubernetes openshift spring-cloud

我想将 SSH 身份验证与 Spring Boot 云配置服务器一起使用。到目前为止,我一直在 docker swarm 上的 docker 容器中运行配置服务器,没有任何问题。
我的组织最近决定将所有内容都迁移到 Openshift 3。我正在尝试部署配置服务器,但是在使用 SSH 对 Gitlab 进行身份验证时遇到了问题。在 docker 镜像中,我在将公共(public)和私有(private) SSH key 复制到/root/.ssh 之前使用它,它可以工作,但在我的 Fabric8 在 Openshift 上生成的 S2I 镜像中它根本不起作用。
在 Openshift 中,我创建了一个名为 cfgssh 的通用 kubernetes 密码。其中包含 id_rsa 和 id_rsa.pub 键(base64 编码)
然后我在我的部署配置/容器中将 secret 安装到/root/.ssh。这不起作用我猜测应用程序运行的用户没有对/root/.ssh 的读取权限?这总是以 configServer 在身份验证异常后崩溃而告终。
我能够在本地和 docker swarm 上运行 spring cloud configserver 而没有任何身份验证问题,所以它绝对不是云 configserver 配置问题。
有没有其他人遇到/找到解决这个问题的方法?
我的配置如下。
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
引用:secrets file permissions .

关于docker - 如何授予 Openshift 容器的非特权用户对/root/.ssh 的读取访问权限以进行 spring 云配置服务器 SSH 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62761677/

相关文章:

java - 将 Magnolia CMS 添加到 OpenShift 应用程序

ssh - 在提示符下使用openshift在特定目录中打开ssh session

windows - 无法使用 create-react-app 和 docker windows 获取 webpack 热重载

windows - 为什么 Visual Studio Build Tools 安装程序会立即返回而不安装任何东西?

nginx - 使用 DNS 设置 Rancher + Kubernetes 的最佳方法是什么

docker - Kubernetes/Spring Cloud Dataflow 流 > spring.cloud.stream.bindings.output.destination 被生产者忽略

docker - 在代理后运行Docker

docker - 如何从github自动设置docker镜像版本?

rest - 使用 GO API 查找可用的 RAM

node.js - 在 Openshift 上设置 NODE_ENV 的目的是什么