阿里云服务网格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。
该文章对您有帮助吗?