You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MicroK8s单节点集群中Pod无法通过Kustomize创建的Service通信求助

问题排查与解决步骤

针对单节点MicroK8s中Service无法转发流量到Postgres Pod的问题,可按以下步骤排查:

  • 检查Service与Pod的关联状态
    执行kubectl describe service <service-name>,查看输出中的Endpoints字段。如果该字段为空,说明Service的标签选择器与Pod标签不匹配:

    • 用kubectl get pods --show-labels查看Pod的标签列表,对比Service的spec.selector配置,确保两者完全一致。
  • 验证kube-proxy的iptables规则
    MicroK8s默认依赖kube-proxy的iptables模式实现Service转发,检查是否生成了对应规则:

    • 执行sudo iptables-save | grep <service-cluster-ip>,确认存在指向Pod IP的DNAT规则。
    • 若规则缺失,重启kube-proxy组件:microk8s kubectl rollout restart daemonset kube-proxy -n kube-system,等待重启完成后重试连接。
  • 检查网络策略限制
    查看当前Namespace是否存在NetworkPolicy:kubectl get networkpolicy,如果有策略,确认是否允许Service所在网段(通常是ClusterIP网段,如10.152.183.0/24)的流量访问Postgres Pod。若策略限制了访问,需调整规则或删除不必要的NetworkPolicy。

  • 确认Postgres的监听配置
    Postgres默认仅监听localhost,会拒绝Service转发的跨Pod流量:

    • 进入Postgres Pod:kubectl exec -it <postgres-pod-name> -- bash
    • 检查postgresql.conf中的listen_addresses,确保设置为'*'。
    • 检查pg_hba.conf,添加允许Kubernetes集群网段的连接规则,例如:host all all 10.0.0.0/8 md5,然后重启Postgres服务。
  • 检查MicroK8s网络插件状态
    确认默认CNI插件(如Calico)正常运行:microk8s kubectl get pods -n kube-system -l k8s-app=calico-node,确保所有Pod处于Running状态。

    • 若插件异常,可尝试重置MicroK8s网络(注意:此操作会中断现有Pod连接):microk8s reset network,之后重新启用DNS插件:microk8s enable dns。
  • 手动测试Service转发
    若以上步骤无效,可手动添加iptables规则测试:

    • 在节点上执行:sudo iptables -t nat -A OUTPUT -d <service-cluster-ip> -p tcp --dport <postgres-port> -j DNAT --to-destination <pod-ip>:<postgres-port>
    • 再次尝试用Service ClusterIP连接Postgres,若成功则说明kube-proxy规则生成存在问题,需进一步排查kube-proxy日志。

内容的提问来源于stack exchange,提问作者Ruik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:03:15