如何规范定义服务的协议类型

阿里云服务网格ASM支持代理任何TCP流量,包括HTTP、HTTPS、gRPC和原始TCP协议等,默认可以自动检测HTTP和HTTP2流量。对于无法自动识别的协议,将被视为普通TCP流量。为了正确识别协议类型,提供额外的功能,在数据面集群中必须规范定义服务的协议类型。本文介绍如何规范定义服务的协议类型。

背景信息

ASM常见的协议类型包括HTTP、HTTP2、HTTPS、TCP、TLS、gRPC、gRPC-Web、Mongo、MySQL和Redis。ASM定义服务的协议类型有以下两种方式。

方式一:使用服务端口名称指定协议类型

在Service中的ports中,portname需设置为{协议名称}{协议名称}-{自定义后缀}。例如服务的9090端口是gRPC协议类型,可以设置portnamegrpc-demo;服务的3306端口是MySQL数据库协议,可以设置portnamemysql。YAML示例如下:

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - port: 9090
    name: grpc-demo
  - port: 3306
    name: mysql

方式二:使用服务端口的appProtocol指定协议类型

若您的阿里云服务网格ASM版本≥v1.8.6,且使用的数据面集群为阿里云容器服务Kubernetes(版本≥v1.18)或者社区版本Kubernetes(版本≥v1.18),可以使用Service的appProtocol指定协议类型。指定协议类型为HTTPS的YAML示例如下:

kind: Service
metadata:
  name: myservice
spec:
  ports:
   -port: 3306
    name: database
    appProtocol: https
说明

ports.appProtocol的生效优先级高于ports.name