阿里雲Service MeshASM支援代理任何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指定協議類型
若您的阿里雲Service MeshASM版本≥v1.8.6,且使用的資料面叢集為阿里雲Container ServiceKubernetes(版本≥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
。