网上有好几种方法,我使用的不是直接写在yaml中,而是使用命令,全程不会接触和修改rsa的公私钥文件内容。
一,拿到或生成pem格式的密钥对。
过程略,假设拿到的文件名为private.pem和public.pem
二,在K8s集群中导入rsa文件。
命名为rsa-secret ,namespace为cgtest.
kubectl create secret generic rsa-secret --from-file=ssh-privatekey=private.pem --from-file=ssh-publickey=public.pem -n cgtest
后期,如果要更新,需要先delete(kubectl delete secret rsa-secret -n cgtest),再create.
三,在pod中挂载
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: golang-deploy
namespace: cgtest
spec:
replicas: 1
selector:
matchLabels:
app: golang-deploy
template:
metadata:
labels:
app: golang-deploy
spec:
nodeName: xxxxx
containers:
- name: golang
image: demo.harbor/golang:1.12.9-alpine3.10
imagePullPolicy: IfNotPresent
command: ["sh","-c","while true;do date;sleep 1;done"]
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: "/etc/secret-volume"
volumes:
- name: secret-volume
secret:
secretName: rsa-secret
其中,volumes不带namespace,但会自动从Deployment下读namespace。
四,在应用中读取。
程序代码就从/etc/secret-volume目录下读取private.pem(私钥)和public.pem(公钥)