我有很多GRPC微服务,它们使用自签名证书。我将身份验证信息添加到GRPC通道,然后用于识别端点并提供正确的服务。
现在我想迁移到Istio mTLS。
在第一阶段,我让Istio绕过所有GRPC连接,我的服务也能像现在这样工作。
在第二阶段,我想将TLS移交给Istio,但我一直在思考如何将身份验证信息传递给GRPC?
如何在Istio mTLS设置中处理身份验证?
GRPC可以支持其他身份验证机制有人用它向GRPC注入Istio身份验证信息吗?关于如何在设置中实现这一点的任何其他建议
我使用go lang只是为了以防万一,如果这对提供任何其他信息有用的话。
感谢
实现这一点的一种方法是使用grpc.WithInsecure()
,这样您就不必向服务添加证书,因为您的pod中的istio-proxy
容器将TLS终止任何传入连接。
客户端:
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
服务器端:
s := grpc.NewServer()
lis, _ := net.Listen("tcp", "localhost:50051")
// error handling omitted
s.Serve(lis)
如果您仍然需要使用TLS进行预部署等,您可以简单地使用配置选项来指定,例如:
var conn *grpc.ClientConn
var err error
// error handling omitted do not copy paste
if ( config.IstioEnabled ) {
conn, err = grpc.Dial("localhost:50051", grpc.WithInsecure())
} else {
creds, _ := credentials.NewClientTLSFromFile(certFile, "")
conn, err = grpc.Dial("localhost:50051", grpc.WithTransportCredentials(creds))
}
参考。
我通过为请求生成JWT令牌来解决此问题,并使用Interceptor注入令牌。从GRPC拦截器获得jwt 授权的灵感