macOS Docker驱动下minikube打开服务URL出现连接重置故障
问题根因
结合排查信息,连接重置问题由以下几个原因共同导致:
- 所有服务均为
ClusterIP类型,本身未暴露节点端口,minikube service自动启动的访问隧道依赖当前终端运行的常驻转发进程实现,只要终端被关闭、进程被意外中断,本地转发端口会直接失效,触发连接重置。 - 一次性通过
minikube service --all启动6个服务的隧道时,多端口转发进程容易出现资源抢占、路由规则冲突,导致除系统自带的kubernetes服务外,其他业务服务的转发规则不生效。 - 访问kubernetes服务返回
Client sent an HTTP request to an HTTPS server属于预期正常现象:该服务是集群API Server的入口,本身只监听HTTPS请求,用HTTP协议访问必然返回该提示,不属于故障,无需额外处理。
注意:通过kubectl describe看到服务存在Endpoint不代表业务本身正常,Endpoint存在仅说明K8s找到了匹配标签的Pod,不代表Pod内的业务真的在监听对应端口、正常响应请求。
排查&修复步骤
- 先确认业务Pod运行状态:执行
kubectl get pods,检查需要访问的业务(akhq、connect、kafka等)对应的Pod是否为Running状态、READY列数值是否和预期副本数一致。如果Pod处于CrashLoopBackOff、Error、0/1 Running状态,直接执行kubectl logs <对应Pod名称>排查业务启动报错,先解决业务本身的启动问题。 - 验证集群内服务连通性:执行以下命令启动临时调试容器,直接通过服务名访问集群内的服务,确认集群内部访问是否正常:
如果集群内访问都失败,检查服务的selector标签和Pod标签是否匹配、业务配置的监听端口是否和service配置的targetPort一致。kubectl run -it --rm debug --image=curlimages/curl --restart=Never -- curl http://akhq:8085 - 集群内访问正常的情况下,关闭之前执行
minikube service --all的终端,新开一个单独的终端(全程不要关闭、不要执行Ctrl+C中断进程),单独启动单个服务的访问隧道,不要一次性启动所有服务:
启动过程中如果系统弹出本地网络、端口监听的权限请求,一律选择允许。如果本地开了全局网络代理,先把minikube service akhq127.0.0.1、localhost加入代理绕过列表,避免代理拦截本地端口转发流量导致连接重置。 - 如果不想依赖常驻隧道进程,可以直接把需要本地访问的服务类型修改为
NodePort,修改后minikube会自动通过Docker Desktop做端口映射,不需要保持隧道终端常驻:
修改完成后再执行# 以akhq服务为例,其他服务替换对应服务名即可 kubectl patch svc akhq -p '{"spec":{"type":"NodePort"}}'minikube service akhq即可正常访问。
内容的提问来源于stack exchange,提问作者Only-A-User
相关产品推荐
相关产品推荐

