OKD 4.15重建Argo命名空间后Pod无法连接API服务器
问题背景
误删除ArgoCD命名空间后手动重建,通过Helm重新部署ArgoCD,但Pod无法启动,日志显示连接API服务器(172.30.0.1:443)超时。经测试,仅该命名空间内的Pod无法连通API服务器,无自定义网络策略、使用的ServiceAccount与正常命名空间一致,确定问题出在网络层面。
Pod错误日志:
time="2025-01-14T14:46:08Z" level=info msg="ArgoCD ApplicationSet Controller is starting" built="2023-03-23T14:57:27Z" commit=5bcd846fa16e4b19d8f477de7da50ec0aef320e5 namespace=argocd version=v2.6.7+5bcd846
time="2025-01-14T14:46:38Z" level=error msg="Get \https://172.30.0.1:443/api?timeout=32s: dial tcp 172.30.0.1:443: i/o timeoutunable to start manager"
排查与解决步骤
1. 检查命名空间的CNI网络注解
OKD默认使用OVN-Kubernetes,手动重建的命名空间可能缺失默认网络关联注解。
- 查看当前命名空间注解:
oc describe namespace argocd - 对比正常命名空间,若缺失
ovn.kubernetes.io/network: default等CNI相关注解,添加注解并重启Pod:oc annotate namespace argocd ovn.kubernetes.io/network=default oc delete pods -n argocd --all
2. 触发OVN网络配置同步
手动重建的命名空间可能未被OVN正确同步网络规则,强制触发同步:
oc patch namespace argocd -p '{"metadata":{"annotations":{"ovn.kubernetes.io/sync-time": "'$(date +%s)'"}}}'
之后再次测试API服务器连通性:
oc run -it --rm debug-pod --image=ubi8 --namespace=argocd -- curl -v https://172.30.0.1:443/api --insecure
3. 验证SecurityContextConstraints(SCC)权限
虽然ServiceAccount相同,但重建的命名空间可能未正确绑定SCC,导致Pod缺少网络访问权限:
- 检查ArgoCD组件使用的ServiceAccount是否绑定了必要的SCC(如
privileged或restricted):oc adm policy who-can use scc privileged -n argocd - 若权限缺失,为对应ServiceAccount添加SCC权限(示例为argocd-application-controller,需根据实际组件调整):
oc adm policy add-scc-to-user privileged -z argocd-application-controller -n argocd
4. 完全重置命名空间(终极方案)
若以上步骤无效,备份ArgoCD配置后删除并重建命名空间:
- 备份Helm配置和ArgoCD数据:
helm get values argocd -n argocd > argocd-values-backup.yaml oc export secrets -n argocd > argocd-secrets-backup.yaml - 卸载Helm部署并删除命名空间:
helm uninstall argocd -n argocd oc delete namespace argocd - 重新创建命名空间并添加默认注解(参考正常命名空间的注解):
oc create namespace argocd oc annotate namespace argocd openshift.io/sa.scc.mcs=s0:c25,c24 openshift.io/sa.scc.supplemental-groups=1000690000/10000 openshift.io/sa.scc.uid-range=1000690000/10000 - 重新部署ArgoCD:
helm install argocd argo/argocd -n argocd -f argocd-values-backup.yaml
内容的提问来源于stack exchange,提问作者gipsy

