阿里云服务网格ASM支持代理任何TCP流量,包括HTTP、HTTPS、gRPC和原始TCP协议等,默认可以自动检测HTTP和HTTP2流量。对于无法自动识别的协议,将被视为普通TCP流量。为了正确识别协议类型,提供额外的功能,在数据面集群中必须规范定义服务的协议类型。本文介绍如何规范定义服务的协议类型。
背景信息
ASM常见的协议类型包括HTTP、HTTP2、HTTPS、TCP、TLS、gRPC、gRPC-Web、Mongo、MySQL和Redis。ASM定义服务的协议类型有以下两种方式。
方式一:使用服务端口名称指定协议类型
在Service中的ports
中,port
的name
需设置为{协议名称}
或{协议名称}-{自定义后缀}
。例如服务的9090端口是gRPC协议类型,可以设置port
的name
为grpc-demo
;服务的3306端口是MySQL数据库协议,可以设置port
的name
为mysql
。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
。