登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-19 09:27:36 398浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《如何在 istio mTLS 设置中进行 GRPC 身份验证?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我有一堆 GRPC 微服务,它们正在使用自签名证书。我将身份验证信息添加到 GRPC 通道,然后用于识别端点并提供正确的服务。

现在我想迁移到 Istio mTLS。

在第一阶段,我让 Istio 绕过所有 GRPC 连接,我的服务就像现在一样工作。

在第二阶段,我想将 TLS 交给 Istio,但我不知道如何将身份验证信息传递给 GRPC?

如何在 Istio mTLS 设置中处理身份验证?

GRPC 可以支持其他身份验证机制 有人用它来向 GRPC 注入 Istio 身份验证信息吗?关于如何在设置中实现此功能的任何其他建议

我使用 go-lang 以防万一这对于提供任何附加信息有用。

谢谢


正确答案


我通过为我的请求生成 jwt 令牌解决了这个问题,并使用拦截器注入了令牌。从 GRPC interceptor for authorization with jwt 获得灵感

实现此目的的一种方法是使用 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))

}

Reference

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>