Istio 集成 Nacos 作为注册中心

springboot + nacos2.0.2 + istio

  • server 配置
nacos.discovery.server-addr=192.168.27.173:8848
server.port=10016
spring.application.name=mesh-server
nacos.discovery.auto-register=true
nacos.discovery.register.group-name=group1
nacos.discovery.register.healthy=true
nacos.discovery.register.enabled=true
nacos.discovery.register.ephemeral=true
nacos.discovery.register.metadata.username=test
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
logging.level.org.reflections.Reflections:error
  • server 端写一个接口
@RestController
@RequestMapping("/server")
public class RestServerController {

    @GetMapping("/info")
    public String client() {

        return "ok";
    }
}
  • server 端的 Dockerfile
FROM openjdk:8u121-jdk
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && echo 'Asia/Shanghai' >/etc/timezone
ADD /target/server-1.0-SNAPSHOT.jar /
ENTRYPOINT java -jar /server-1.0-SNAPSHOT.jar
  • server 端的 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-istio-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spring-boot-istio-server
  template:
    metadata:
      labels:
        app: spring-boot-istio-server
    spec:
      containers:
        - name: spring-boot-istio-client
          image: spring-boot-istio-server:0.0.1
          imagePullPolicy: Never
          tty: true
          ports:
            - name: http
              protocol: TCP
              containerPort: 10016
  • client 类似于server端.不同的是调用server端代码为
@RestController
@RequestMapping("/client")
public class RestClientController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/version")
    public String client() {

        return restTemplate.getForObject("http://mesh-server.group1.public.nacos:10016/server/info", String.class);
    }
}
  • client的配置
spring.application.name=mesh-client
  • 这两个服务会注册到nacos上. 目前nacos支持mcpxds-over-mcp协议. istio1.9之后用xds-over-mcp协议
  • nacos开启istio同步
nacos.istio.mcp.server.enabled=true

修改istio配置.使用nacos作为istio的服务发现.开启Istio-proxy 捕获 DNS 请求,解析自定义的 ServiceEntry

  • 添加xds configsource
rootNamespace: istio-system
trustDomain: cluster.local
configSources:
  - address: xds://192.168.27.173:18848
  • 配置dns-proxy. 虽然 Kubernetes 为 Kubernetes Service 提供了一个开箱即用的 DNS 解析,但任何自定义的 ServiceEntry 都不会被识别。有了这个功能,ServiceEntry 地址可以被解析,而不需要自定义 DNS 服务配置。对于 Kubernetes Service 来说,一样的 DNS 响应,但减少了 kube-dns 的负载,并且提高了性能
proxyMetadata:
  ISTIO_META_DNS_AUTO_ALLOCATE: \"true\"
  ISTIO_META_DNS_CAPTURE: \"true\"

测试

  • 进去spring-boot-mesh-client的pod中. 执行
curl http://localhost:10015/client/version 返回 ok

一些命令

  • 查看istiod的日志
kubectl logs -f istiod-dcf548bfd-xjdl6  -n istio-system
  • 查看envoy的代理日志
kubectl logs -f -l app=spring-boot-istio-client -c istio-proxy -n istio-demo
  • 查看某个pod的服务列表
istioctl proxy-config clusters whoami-586fd9cddd-jgrcc -n istio-demo
  • pilot-discovery命令在istiod中的/usr/local/bin/pilot-discovery

nacos生成的serviceEntry

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mesh-server.group1.public.nacos
spec:
  hosts:
  - mesh-server.group1.public.nacos
  location: MESH_INTERNAL
  ports:
  - number: 10015
    name: http
    protocol: HTTP
  resolution: STATIC
  endpoints:
  - address: xxxx
  	port: xxxx
  	weight: x
  - address: xxxx
  	port: xxxx
  	weight: x

总结

  • nacos 定时每10s 同步service list 给istiod.
  • 实时感知服务上下线问题?
  • istiod服务发现同步给envoy服务列表时是全量同步的. 服务很多时有同步的压力. envoy直接对接nacos吗?
  • 同步会检测服务的checksum. 服务信息如果有变更再同步. 但是好像有点bug…

参考

  • https://zhuanlan.zhihu.com/p/337173238
  • https://github.com/piomin/sample-istio-services
  • https://github.com/alibaba/nacos/issues/6405
  • https://istio.io/latest/zh/docs/ops/configuration/traffic-management/dns-proxy/
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值