😮
KubernetesのappProtocolについて
1. 背景
KubernetesにgRPCアプリケーションをデプロイした際に、gRPCアプリケーションに問い合わせるアプリケーションがgRPC側に疎通できない状態になった。ただし、port forward経由でgRPCを叩くと問題なく動く状態であった。appProtocolにgrpcを指定したところ問題なくアプリケーション間疎通されるようになった。
2. appProtocolとは
Kubernetesの公式ドキュメントには以下のように述べられています。
AppProtocolフィールドによってServiceの各ポートに対して特定のアプリケーションプロトコルを指定することができます。
私の場合Istio Service Meshを使ってるのですが、port nameにhttp-suffix
のような形にしていることもあり、Istio側でHTTP/1.1として解釈されていたようです。
3. appProtocolの設定方法
kind: Service
metadata:
name: go-app
spec:
ports:
name: app
appProtocol: grpc
- port: 3000
今回は、gRPCの設定例を挙げましまたが、gRPC以外にもhttp2/https/tcp/tls/mong/mysql/redisの設定が可能なようです。
Discussion