Spring boot Openshift/Kubernetes ssh Secret不';t使用Camel SFTP组件
长话短说---> 将从Openshift中的机密中检索到的ssh密钥传递到apache camel SFTP组件时,无法连接服务器;然而,如果我直接将实际ssh密钥文件的路径(不创建机密)传递给同一个组件,它就可以正常工作。例外情况是,密钥无效。我试图用java读取密钥文件,并将其作为ByteArray作为privateKey参数传递,但没有成功。似乎传递密钥是因为byte没有尽可能地发挥作用 SFTP组件属性->Spring boot Openshift/Kubernetes ssh Secret不';t使用Camel SFTP组件,spring-boot,kubernetes,apache-camel,openshift,Spring Boot,Kubernetes,Apache Camel,Openshift,长话短说---> 将从Openshift中的机密中检索到的ssh密钥传递到apache camel SFTP组件时,无法连接服务器;然而,如果我直接将实际ssh密钥文件的路径(不创建机密)传递给同一个组件,它就可以正常工作。例外情况是,密钥无效。我试图用java读取密钥文件,并将其作为ByteArray作为privateKey参数传递,但没有成功。似乎传递密钥是因为byte没有尽可能地发挥作用 SFTP组件属性-> sftp: host: my.sftp.server port: 22 f
sftp:
host: my.sftp.server
port: 22
fileDirectory: /to
fileName: /app/home/file.txt
username: sftp-user
privateKeyFilePath: /var/run/secret/secret-volume/ssh-privatekey **(Also tried privateKey param with byte array)**
knownHostsFile: resource:classpath:keys/known_hosts
binary: true
- name: SSH_SECRET
valueFrom:
secretKeyRef:
name: sshsecret
key: ssh-privatekey
spring:
cloud:
kubernetes:
secrets:
enabled: true
enableApi: true
name: sshsecret
volumeMounts:
- mountPath: /var/run/secret/secret-volume
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sshsecret
spring:
cloud:
kubernetes:
secrets:
enabled: true
paths: /var/run/secret/secret-volume
应用程序详细信息:
我正在使用Openshift 3.11。
开发配置了fabric8和SpringCloud kubernetes插件的Camel-SpringBoot微集成服务以进行部署
我正在创建一个秘密,
oc secrets新sshauth sshsecret--ssh privatekey=$HOME/.ssh/id\u rsa
我已尝试使用deployment.yml和bootstrap.yml引用secret
使用带有密钥ref的as env变量->
部署.yml->
sftp:
host: my.sftp.server
port: 22
fileDirectory: /to
fileName: /app/home/file.txt
username: sftp-user
privateKeyFilePath: /var/run/secret/secret-volume/ssh-privatekey **(Also tried privateKey param with byte array)**
knownHostsFile: resource:classpath:keys/known_hosts
binary: true
- name: SSH_SECRET
valueFrom:
secretKeyRef:
name: sshsecret
key: ssh-privatekey
spring:
cloud:
kubernetes:
secrets:
enabled: true
enableApi: true
name: sshsecret
volumeMounts:
- mountPath: /var/run/secret/secret-volume
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sshsecret
spring:
cloud:
kubernetes:
secrets:
enabled: true
paths: /var/run/secret/secret-volume
bootstrap.yml->
sftp:
host: my.sftp.server
port: 22
fileDirectory: /to
fileName: /app/home/file.txt
username: sftp-user
privateKeyFilePath: /var/run/secret/secret-volume/ssh-privatekey **(Also tried privateKey param with byte array)**
knownHostsFile: resource:classpath:keys/known_hosts
binary: true
- name: SSH_SECRET
valueFrom:
secretKeyRef:
name: sshsecret
key: ssh-privatekey
spring:
cloud:
kubernetes:
secrets:
enabled: true
enableApi: true
name: sshsecret
volumeMounts:
- mountPath: /var/run/secret/secret-volume
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sshsecret
spring:
cloud:
kubernetes:
secrets:
enabled: true
paths: /var/run/secret/secret-volume
使用已装入的卷->
部署.yml->
sftp:
host: my.sftp.server
port: 22
fileDirectory: /to
fileName: /app/home/file.txt
username: sftp-user
privateKeyFilePath: /var/run/secret/secret-volume/ssh-privatekey **(Also tried privateKey param with byte array)**
knownHostsFile: resource:classpath:keys/known_hosts
binary: true
- name: SSH_SECRET
valueFrom:
secretKeyRef:
name: sshsecret
key: ssh-privatekey
spring:
cloud:
kubernetes:
secrets:
enabled: true
enableApi: true
name: sshsecret
volumeMounts:
- mountPath: /var/run/secret/secret-volume
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sshsecret
spring:
cloud:
kubernetes:
secrets:
enabled: true
paths: /var/run/secret/secret-volume
bootstrap.yml->
sftp:
host: my.sftp.server
port: 22
fileDirectory: /to
fileName: /app/home/file.txt
username: sftp-user
privateKeyFilePath: /var/run/secret/secret-volume/ssh-privatekey **(Also tried privateKey param with byte array)**
knownHostsFile: resource:classpath:keys/known_hosts
binary: true
- name: SSH_SECRET
valueFrom:
secretKeyRef:
name: sshsecret
key: ssh-privatekey
spring:
cloud:
kubernetes:
secrets:
enabled: true
enableApi: true
name: sshsecret
volumeMounts:
- mountPath: /var/run/secret/secret-volume
name: secret-volume
volumes:
- name: secret-volume
secret:
secretName: sshsecret
spring:
cloud:
kubernetes:
secrets:
enabled: true
paths: /var/run/secret/secret-volume
注意:部署服务后,我可以看到装载的卷与容器相连,甚至可以猛击到POD中,转到同一目录并找到完全完整的私钥
任何帮助都将不胜感激。问我所有你需要知道的问题来解决这个问题。这是我方面的一个非常严重的错误。我在camel-SFTP组件中使用了privateKeyUri,而不是privateKeyFile。我没有纠正这一点,总是直接更改配置映射中的SFTP参数 顺便说一下,对于那些试图实现类似用例的人;使用第二个选项,即将机密装载到卷中,然后在Camel中引用卷路径。不要将secret用作ENV变量,因此不需要在bootstrap.yml中启用secret API 谢谢你,干杯
Rito在
privateKeyFilePath
中指定的私钥文件的名称是ssh privatekey
;在deployment.yml中,secretName字段是secretName:sshsecret
。装载卷中的文件名是什么-ssh privatekey
或sshsecret
?在OCP中创建的机密名称是sshsecret,但是在机密数据中,我们有密钥-值对,因此密钥是ssh privatekey。因此,当您将机密装载到卷时,机密数据会写入文件,文件名就是上面提到的密钥名。简而言之,文件名是ssh privatekey。