如何在istio-mTLS设置中进行GRPC身份验证



我有很多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 授权的灵感

最新更新