Kubernetes -创建自定义保密SSL证书

p5fdfcr1  于 2023-02-07  发布在  Kubernetes
关注(0)|答案(1)|浏览(165)

我遇到了一个问题。在我的kubernetes集群中,我正在为我自己的项目运行一个GitLab镜像。这个镜像需要一个.crt和.key作为HTTPS使用的证书。我用letsencrypt-issuer设置了一个Ingress资源,它成功地获得了证书。但是要使用这些证书,它们需要命名为my.dns.com.crtmy.dns.com.key。所以我手动运行了以下3个命令:

kubectl get secret project-gitlab-tls -n project-utility \
  -o jsonpath='{.data.tls\.crt}' | base64 --decode > /mnt/data/project/gitlab/certs/tls.crt

kubectl get secret project-gitlab-tls -n project-utility \
  -o jsonpath='{.data.tls\.key}' | base64 --decode > /mnt/data/project/gitlab/certs/tls.key

kubectl create secret generic gitlab-registry-certs \
  --from-file=gitlab.project.com.crt=/mnt/data/project/gitlab/certs/tls.crt \
  --from-file=gitlab.project.com.key=/mnt/data/project/gitlab/certs/tls.key \
  --namespace project-utility

前两个命令将解码后的crt/key内容打印到一个文件中,这样第三个命令就可以使用这些文件创建一个到特定DNS名称的自定义Map。

volumeMounts:
    - mountPath: /etc/gitlab/ssl
      name: registry-certs
volumes:
- name: registry-certs
  secret:
    secretName: gitlab-registry-certs

这一切都工作,但我希望这个过程是自动化的,因为我使用的是ArgoCD作为部署工具。我想过一个作业,但一个作业运行的是不允许对集群进行更改的Ubuntu版本,所以我需要调用外部主机上的bash脚本。我如何实现这一点,因为我只能找到关于运行映像的作业的信息,而不能找到如何执行主机命令。如果有更简单的方法来使用我看不到的证书,请让我知道,因为我觉得这种使用证书的方式有点奇怪,但是GitLab需要<DNS>.crt<DNS>.key的命名约定,所以这就是我重新Map的原因。
因此,问题是如何自动化这个重新Map过程,以便在集群生成时,在获得证书之后但在创建部署之前执行作业?

4nkexdtk

4nkexdtk1#

为什么要为创建新密码这个复杂的过程而烦恼呢?只需在volumeMounts节中使用subPath对它们进行重命名即可:

containers:
  - ...
    volumeMounts:
      - name: registry-certs
        mountPath: /etc/gitlab/ssl/my.dns.com.crt
        subPath: tls.crt
      - name: registry-certs
        mountPath: /etc/gitlab/ssl/my.dns.com.key
        subPath: tls.key
volumes:
  - name: registry-certs
    secret:
      secretName: project-gitlab-tls

文档中的详细信息。

相关问题