在kubernetes集群中,使用cert-manager自动生成证书服务时,证书默认是属于单个命名空间的,不可跨命名空间;对于一些泛域名来说,如果想在其他命名空间也能使用而不导致原有的证书失效,那么只有将证书同步到其他命名空间中。
下面提供两种方法,第一种手动同步虽然能达到同步证书的目的,但是不省心,每次都要考虑同步证书;第二种自动同步,可以做到同步到所有的命名空间,并且只要新生成命名空间,也能自动同步。

一、手动同步

1、查询secret

  1. #查询secret
  2. kubectl get secrets -n NAMESPACE

2、同步secret到其他命名空间

  1. #默认命名空间
  2. kubectl get secret SECRET_NAME --namespace=default -oyaml | kubectl apply --namespace=OTHERS_NAMESPACE -f -
  3. #非默认
  4. kubectl get secret SECRET_NAME --namespace=OTHERS_NAMESPACE -oyaml | grep -v '^\s*namespace:\s' | kubectl apply --namespace=default -f -

3、查询同步结果

  1. kubectl get secrets -n NAMESPACE
  2. kubectl get secrets -n OTHERS_NAMESPACE

二、自动同步(Kubed 在所有 Kubernetes 命名空间之间同步 ConfigMap/secrets)

借助kubed 这个工具,我们可以实现两个功能:
1、可以做到将ConfigMaps/Secrets 跨命名空间,跨集群同步;
2、将拉取私有镜像仓库的secret 同步到其他命名空间。
需要注意的是删除源文件,其他命名空间的副本secret将同等删除。
ref:https://appscode.com/products/kubed/v0.12.0/guides/config-syncer/intra-cluster/
ref:https://cert-manager.io/v0.16-docs/faq/kubed/