问题描述
服务配置完之后docker容器反复重启
排查问题
查看容器日志发现spring boot启动时,一直找不到nacos服务导致启动失败
解决方案
先说结果,笔者的服务采用的服务类型是 NodePort,而
在 Kubernetes 中,通过 DNS 名称访问服务的方式是依赖于服务的 ClusterIP
。通常服务的 DNS 名称格式是 [服务名].[命名空间].svc.cluster.local
。
首先查看服务信息,确定服务类型,对于笔者的 ry-nacos
服务,ClusterIP
是 10.233.31.41
。
kubectl get svc -n ruoyi # 查看服务信息
可以在一个 Pod 中执行以下命令来验证 DNS 解析是否正常:
kubectl exec -it <your-pod-name> -- nslookup ry-nacos.ruoyi.svc.cluster.local
或者直接在一个运行中的 Pod 中测试:
kubectl exec -it <your-pod-name> -- curl http://ry-nacos.ruoyi.svc.cluster.local:8848/nacos/v1/ns/instance/list?serviceName=test
加上.svc.cluster.local 后 DNS 解析正常
笔者的 Spring Boot 应用程序的配置文件中初始设置如下:
spring:
cloud:
nacos:
discovery:
server-addr: ry-nacos.ruoyi:8848
config:
server-addr: ry-nacos.ruoyi:8848
尝试修改配置文件,修改三次均无效
查询官方资料后发现这里的 ry-nacos.ruoyi
是一个错误的 DNS 名称。在 Kubernetes 中,通常服务的 DNS 名称格式是 [服务名].[命名空间].svc.cluster.local
所以对于笔者遇到的问题,只需要将 DNS 修改为
spring:
cloud:
nacos:
discovery:
server-addr: ry-nacos.ruoyi.svc.cluster.local:8848
config:
server-addr: ry-nacos.ruoyi.svc.cluster.local:8848
再次打包上传,启动服务,启动成功