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

eanckbw9  于 2023-06-21  发布在  Kubernetes
关注(0)|答案(3)|浏览(147)

我们将一个名称空间用于开发环境,另一个用于登台环境。在每个命名空间中,我们都有几个configMap和secret,但是两个环境之间有很多共享变量,所以我们希望有一个公共文件。
有没有一种方法可以将基本configMap放入默认名称空间,并使用以下内容引用它:

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

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

vddsk6oq

vddsk6oq1#

Kubernetes 1.13及更早版本

它们不能被共享,因为它们不能从其命名空间之外的pod访问。资源的名称在一个名称空间内必须是唯一的,但在不同的名称空间之间则不需要。
解决方法是复制它。

在命名空间之间复制secret
kubectl get secret <secret-name> --namespace=<source-namespace> --export -o yaml \
  | kubectl apply --namespace=<destination-namespace> -f -
在命名空间之间复制configmap
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 -

如果有人仍然认为需要该标志,可以使用@zoidbergwill编写的导出脚本。

2izufjch

2izufjch2#

除了接受的答案,如果资源(即secretconfigMaps

*可能会改变
*应该在namespace s之间自动同步

可能值得考虑使用Reflector,或者如果只需要secret,则使用clustersecret来减少手动操作。
使用Reflector需要三个步骤:
1.通过Helm图表等方式部署反射器
1.例如,在生产namespace中创建带注解的源资源。

apiVersion: v1
kind: ConfigMap
metadata:
  name: source-resource
  namespace: production
  annotations:
    reflector.v1.k8s.emberstack.com/reflection-allowed: "true"
    reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "testing"
data:
  ...

1.创建一个没有数据的带注解的镜像资源,例如测试namespace

apiVersion: v1
kind: ConfigMap
metadata:
  name: mirrored-resource
  namespace: testing
  annotations:
    reflector.v1.k8s.emberstack.com/reflects: "production/source-resource"
data:
  ...
ukdjmx9f

ukdjmx9f3#

请使用以下命令从一个名称空间复制到另一个名称空间
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 -

相关问题