跨Namespace复制Kubernetes Secret失败,请求排查指导
跨Namespace复制Kubernetes Secret失败,请求排查指导
我仔细看了你尝试跨Namespace复制Secret的操作记录,问题的核心原因应该是你保留了原Secret中的ownerReferences字段,这会导致Elasticsearch Operator自动清理掉kube-system里的复制Secret。
为什么会出现这个问题?
原Secret的ownerReferences指向了default Namespace中的Elasticsearch资源(name: dd),而Kubernetes的所有者引用机制会让对应的控制器(这里是Elasticsearch Operator)负责管理它的所有子资源。当你把带有这个引用的Secret放到kube-system Namespace后,Operator会发现这个Secret的所有者不在当前Namespace,不符合它的管理逻辑,于是会自动删除这个“不应该存在”的Secret——这就是为什么你执行apply后提示created,但查kube-system的Secret时却找不到的原因。
正确的复制步骤
你需要在复制时移除所有和原Namespace绑定、以及控制器关联的元数据字段,包括:
metadata.creationTimestampmetadata.resourceVersionmetadata.uidmetadata.ownerReferences
可以用这条命令完成复制:
kubectl --namespace default get secret dd-es-remote-ca -o yaml | yq 'del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid, .metadata.ownerReferences)' | sed 's/namespace: default/namespace: kube-system/' | kubectl apply -f -
验证结果
执行完上面的命令后,再检查kube-system Namespace的Secret:
kubectl --namespace kube-system get secret dd-es-remote-ca
这次应该能看到复制成功的Secret了。
备注:内容来源于stack exchange,提问作者alexus
相关产品推荐
相关产品推荐

