😮

KubernetesのappProtocolについて

2023/09/12に公開

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の設定が可能なようです。

4. 参考文献

Protocol Selection
Kubernetes Service

Discussion