我正在尝试从Kubernetes作业中生成Kubernetes机密。秘密是TLS证书,为了进行Elasticsearch传输,我尝试了此工作:
apiVersion: batch/v1
kind: Job
metadata:
name: conso-security-tls-gen-certs
spec:
template:
spec:
containers:
- name: generator
volumeMounts:
- name: certs
mountPath: "/certs"
image: "docker.elastic.co/elasticsearch/elasticsearch:7.4.2"
command: ["/bin/sh", "-c"]
args:
- "bin/elasticsearch-certutil ca (...) --silent -out /certs/bundle.p12"
restartPolicy: Never
volumes:
- name: certs
secret:
secretName: conso-security-tls-certs
backoffLimit: 4
但是正如https://github.com/kubernetes/kubernetes/issues/62099所说,卷/certs
是ReadOnly。有没有办法像这样创建/编辑这个秘密?
答案 0 :(得分:2)
Volumes from secrets一旦容器/吊舱走了,就走了。另外,更新通过Secret创建的卷中的文件也不会更新Secret本身。
似乎工作的目标是生成证书并使用该证书创建或更新Secret对象?如果是这种情况,我建议您考虑使用Kubernetes API或kubectl
从正在运行的容器中操纵Secrets。您需要设置并使用有权使用给定名称空间中的Secrets的Service Account。
答案 1 :(得分:-1)
您需要从作业中创建 kubernetes 机密。 至少需要一个 CA 的机密,以及 ElasticSearch 证书本身的第二个机密。然后您可以将这些秘密用于 ElasticSearch 状态集。
创建机密的示例是:
echo "===> Create CA secret"
kubectl create secret generic elastic-certificates --from-file=/certificates/elastic-certificates.p12
echo "===> Create CA chain secret"
kubectl create secret generic elastic-ca-chain --from-file=/certificates/elastic-ca-chain.pem
此类脚本的完整详细信息可在帖子 Configure TLS for ElasticSearch in a Kubernetes Deployment
中找到