我目前正在探索gRPC作为REST的替代方案来进行客户端/服务器通信。
目前,我有一个Dart/flutter应用程序(我的客户端)主要在手机上运行。它通过REST与Go后端(我的服务器)进行通信。后端部署在Kubernetes集群上。后端前面有一个Nginx ingress控制器。我有一个Ingress规则可以做到这一点:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: fanout-ingress
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
cert-manager.io/issuer: letsencrypt-prod
spec:
ingressClassName: nginx
rules:
- host: fancy-domain.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api
port:
number: 8080
tls:
- hosts:
- fancy-domain.com
secretName: letsencrypt-prod-tls
字符串
通过这种设置,客户端可以简单地使用任何经典的HTTP客户端,我知道客户端将负责从fancy-domain.com
获取证书以加密流量。由于此证书由受信任的第三方签名(在这种情况下让我们加密),客户端也可以确定它正在与正确的域进行通信。
当涉及到迁移到gRPC时,我很难理解这是如何工作的。我在网上找到的所有指南都显示客户端使用嵌入在客户端的证书(它们直接加载*.pem
文件)。但看起来它们直接与后端对话。
我 * 认为 * 我想做的是让客户端使用我的域提供的证书(客户端应该把它们从域中取出来,而不是把证书以某种方式嵌入到某个地方),我想在入口控制器级别完成TLS终止。
这可能吗?我找不到任何关于这种设置的文档。
1条答案
按热度按时间xxe27gdn1#
好吧,结果上面的代码(用于ingress规则)几乎已经准备好了。我只是添加了这个注解:
字符串
然后在客户端,就像这样简单:
型
一切都是开箱即用。