0

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

现在我想迁移到 Istio mTLS。

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

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

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

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

我正在使用 go-lang 以防万一这对提供任何其他信息有用。

谢谢

4

2 回答 2

1

这样做的一种方法是使用grpc.WithInsecure(),这样您就不必向您的服务添加证书,因为istio-proxy您的 pod 中的容器将通过 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))

}

参考

于 2021-06-11T06:24:08.000 回答
0

我通过为我的请求生成 JWT 令牌解决了这个问题,并使用拦截器注入了令牌。从 GRPC 拦截器中获取灵感,使用 jwt 进行授权

于 2021-06-15T14:41:46.803 回答