我遇到了一个问题。在我的kubernetes集群中,我正在为我自己的项目运行一个GitLab镜像。这个镜像需要一个.crt和.key作为HTTPS使用的证书。我用letsencrypt-issuer设置了一个Ingress资源,它成功地获得了证书。但是要使用这些证书,它们需要命名为my.dns.com.crt
和my.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过程,以便在集群生成时,在获得证书之后但在创建部署之前执行作业?
1条答案
按热度按时间4nkexdtk1#
为什么要为创建新密码这个复杂的过程而烦恼呢?只需在
volumeMounts
节中使用subPath
对它们进行重命名即可:文档中的详细信息。