从作业创建或编辑Kubernetes机密

时间:2019-11-21 14:25:15

标签: kubernetes kubernetes-secrets kubernetes-jobs

我正在尝试从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。有没有办法像这样创建/编辑这个秘密?

2 个答案:

答案 0 :(得分:2)

Volumes from secrets一旦容器/吊舱走了,就走了。另外,更新通过Secret创建的卷中的文件也不会更新Secret本身。

似乎工作的目标是生成证书并使用该证书创建或更新Secret对象?如果是这种情况,我建议您考虑使用Kubernetes APIkubectl从正在运行的容器中操纵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

中找到