使用服务网格(Service Mesh)

平台基于原生 istio 提供了服务网格的能力

添加服务网格 addon

平台提供了十分简单的开启服务网格的方式,只需在 dice.yml 中添加服务网格 addon,重建流水线进行部署,就可以开启服务网格的功能

界面方式添加:

使用服务网格(Service Mesh) - 图1

文本方式添加:

  1. version: 2.0
  2. envs: {}
  3. services:
  4. foobar:
  5. ...
  6. ...
  7. addons:
  8. mesh:
  9. plan: "service-mesh:basic"

TIP

如果部署失败,可能是 istio 尚未在集群内安装,当前需要联系平台支持同学进行安装

需要注意的是,当前服务网格的大部分策略只会针对 http/https/grpc 协议生效,所以 dice.yml 中需要对端口申明好明确的协议,否则功能无法生效

需要特别注意的是,开启了服务网格,必须在 dice.yml 中显示配置健康检查方式,使用 http 或者 exec 的方式进行健康检查

因为不显示配置健康检查时,默认使用端口检测;开启服务网格后,iptables 规则会将服务监听端口转发给 sidecar 实例,健康检查直接通过了,但业务实例可能还在初始化并没有监听端口

举例如下

  1. version: 2.0
  2. envs: {}
  3. services:
  4. foobar:
  5. ports:
  6. # http 协议端口,可以使用服务网格功能
  7. - port: 8080
  8. protocol: http
  9. # dubbo 协议端口,无法使用服务网格功能,也无需指定协议
  10. - port: 20880
  11. health_check:
  12. http:
  13. port: 8080
  14. path: /health
  15. duration: 300
  16. addons:
  17. mesh:
  18. plan: "service-mesh:basic"

开启透明加密传输

想要基于 istio 的 mTLS 开启业务层无感知的透明加密传输,只需在 dice.yml 中添加以下配置

  1. version: 2.0
  2. envs: {}
  3. services:
  4. foobar:
  5. traffic_security:
  6. mode: https
  7. ...
  8. ...
  9. addons:
  10. mesh:
  11. plan: "service-mesh:basic"

只有添加了 service-mesh addon 的服务,才能访问该服务

WARNING

开启加密传输之后,服务如果要单独暴露域名,请参考基于微服务网关实现域名路由

给单个服务绑定域名的方式,将无法访问