# 前言
书接上回Caddy & GRPC 端口复用配置,新在集群上部署了一个带端口复用的服务,除了 Caddy 换成了 Nginx 之外,其他还是一样的配方。
看到有些教程给出的解决方案是写两个 Ingress 配置文件,其中一个文件配置nginx.ingress.kubernetes.io/backend-protocol
为 GRPC ,不免有些不太优雅了。
# 正文
本专案的具体细节:
层级 | 软件 / 包 |
---|---|
1 | Nginx |
2 | cmux |
3 | GPRC & Getaway |
后端先启动 GPRC 服务,随后 Gateway 连接 GRPC 提供 json 格式的接口,由程序内 cmux 包将流入的流量根据类型进行分流,分别传给 GRPC 和 Gateway,最后由 Nginx 作为 Ingress 根据连接类型进行反向代理。
Ingress 配置:(请自行调整serviceName.namespace.svc.cluster.local
为你自己服务的地址,我在这里使用集群内部的 DNS 解析)
Service 配置:(实例,仅为补充说明场景)
在 Ingress 的配置文件中,我直接匹配请求头中Content-Type
字段的grpc
关键字,当命中关键字时,使用 GRPC 反代而不是 HTTP 反代,当然你也可以细化匹配规则,目前我看到的相关的Content-Type
有以下几种,欢迎有相关经验的大佬补充:
- application/grpc
- application/grpc+proto
- application/grpc+json
- application/grpc-web+proto
- application/grpc-web+json
- application/grpc-web-text+proto
8小时劳动,8小时休闲,8个小时休息,下班!