云原生下本地开发

最近把公司微服务开发环境都迁移到k8s中. 之前部署在一台实体机上面. 记录下踩到的坑

技术栈

  • Nacos 2.0.2
  • SpringCloud 2020.01

问题

  1. nacos 2.0.2 使用grpc 需要暴露更多端口. 且需要tcp代理. ingress 解决不了问题.
  2. 本地服务调用与开发环境通用服务之间服务调用的网络隔离问题.

nacos 问题.使用 kubefwd 解决

  • 服务注册地址直接写 k8s 部署nacos的 service name, 再使用kubefwd将service网络访问代理出来. 即可解本地决注册问题.
  • 为了让本地服务可以调用开发环境的一些通用服务, 通用服务不再将自己ip注册到nacos. 而使用 service name. 那本地服务调用通用服务时即可通过kebefwd转发.
  • 通用服务使用serviceName注册到nacos方式. pod 加个环境变量.注意这里的app 要和serviceName相同
- name: SPRING_CLOUD_NACOS_DISCOVERY_IP
  valueFrom:
    fieldRef:
      apiVersion: v1
      fieldPath: 'metadata.labels[''app'']'

本地服务调用隔离

  • 我们使用 knife4j 作为接口文档,会在网关上聚合swagger 文档.
  • 再把网关服务(通用服务)部署到实体机上.
  • 各个开发者当通过 knife4j 接口文档工具进行本地测试.会在api gateway 服务获取到客户端ip. 然后经过自定义负载均衡器(使用的SpringCloudLoadbalancer). 根据客户端ip进行服务选择. 优先调用本地服务(开发者自己的服务).
  • 迁移到k8s 后. 访问 knife4j 经过ingress, 但经过ingress代理后客户端ip被隐藏. 这样就拿不到客户端ip了
  • 解决方式就是将 ingress 部署的service 中的 externaltrafficpolicy 改为 Local 即可解决
  • 测试方式可以部署一个 whoami 服务测试下.
  • 这里需要注意的是改为Local后则只能通过nodePort的去访问. 不能通过主节点(Master)去访问了. 即ingress service部署到那个k8s的node上就只能通过那个node+port访问,
    • 解决方式1. 指定调度到master节点
    • 解决方式2. 每个节点都部署一个ingress service

思考

  • 服务上下线不及时. 有时候我本地服务重启完成了不能立即被访问. 我们都是知道这是服务列表缓存的问题.
  • 更新到nacos 2.0.2 后使用grpc长连接. 可以通过这个来探索下服务实时上下线的问题.

总结

  • 在k8s内部pod访问某个service时可以直接通过serviceName访问
  • 那么只需要springboot也能把整个微服务体系建设起来. k8s 充当注册中心.
  • 当然现在更流行的serviceMesh就是这种玩法. 将之前springCloud的各种SDK交给sidecar去解决.
  • 通过以上方式. 本地开发只需要启动需要修改的服务. 如果你们的开发模式是每个人/团队负责一个微服务的开发工作那么本地资源占用很少. 只需要启动一个小的微服务. 又回到了原来的单体服务开发. 爽的一比

2021-08-05 补充

  • web端调式的时候需要对不同的模块访问不同人启动的服务.
  • 这里可以做一个debugSet.html 做一个routing表
客户端IP          服务列表			server端Ip
192.168.1.1     order-service	192.168.1.11
  • 重写 Loadbalancer 根据表路由不同的服务.

参考

  • https://juejin.cn/post/6937108793427771429
  • https://www.cnblogs.com/zisefeizhu/p/13262239.html
  • https://blog.csdn.net/weixin_45425591/article/details/116152834
  • https://kubernetes.io/zh/docs/tasks/access-application-cluster/create-external-load-balancer/
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐