有没有办法在命名空间之间共享 kubernetes 中的 configMap?

Is there a way to share a configMap in kubernetes between namespaces?

我们为开发环境使用一个命名空间,为暂存环境使用一个命名空间。在每个命名空间中,我们都有几个 configMap 和秘密,但两个环境之间有很多共享变量,因此我们希望为它们创建一个通用文件。

有没有办法将基本 configMap 放入默认命名空间并使用类似以下内容引用它:

- envFrom:
    - configMapRef:
        name: default.base-config-map

如果这不可能,除了通过命名空间复制变量之外没有其他方法吗?

Kubernetes 1.13 及更早版本

无法共享它们,因为无法从其命名空间之外的 pods 访问它们。资源名称在命名空间内必须是唯一的,但跨命名空间则不能。

解决方法是复制过来。

在命名空间之间复制秘密
kubectl get secret <secret-name> --namespace=<source-namespace> --export -o yaml \
  | kubectl apply --namespace=<destination-namespace> -f -
在命名空间之间复制配置映射
kubectl get configmap <configmap-name>  --namespace=<source-namespace> --export -o yaml \
  | kubectl apply --namespace=<destination-namespace> -f -

Kubernetes 1.14+

The --export flag was deprecated in 1.14 而是可以使用以下命令:

kubectl get secret <secret-name> --namespace=<source-namespace>  -o yaml \
  | sed 's/namespace: <from-namespace>/namespace: <to-namespace>/' \
  | kubectl create -f -

如果有人仍然认为需要旗帜,export script written by @zoidbergwill

请使用以下命令从一个命名空间复制到另一个

kubectl get configmap <configmap-name> -n <source-namespace> -o yaml | sed 's/namespace: <source-namespace>/namespace: <dest-namespace>/' | kubectl create -f -

kubectl get secret <secret-name> -n <source-namespace> -o yaml | sed 's/namespace: <source-namespace>/namespace: <dest-namespace>/' | kubectl create -f -