主要观点:Minidisc 是 Tailscale 网络的零配置服务发现工具,可用于在 Tailnet 上广告和发现 gRPC 或 REST 服务,无需运行服务器,服务形成简单的对等网络,只要服务运行即可被发现。
关键信息:
- 目前主要支持 Python 和 Go 语言,唯一验证的平台是 Linux。
- 客户端通过指定服务名称和标签来查找服务,可获取 gRPC 通道或列出所有可用服务。
- 服务器通过启动 Minidisc Registry 并添加条目来广告服务,在 Go 和 Python 中实现方式类似。
- 有命令行工具
md
,可用于列出服务、查找服务和广告不支持 Minidisc 的服务器服务。 - 在 Docker 中运行 Minidisc 需注意配置,将
tailscaled
的 Unix Domain Socket 放入共享卷可使其工作。
重要细节: - 在 Python 中查找服务:
import grpc; import minidisc; endpoint = minidisc.find_service('myservice', {'env': 'prod'}); channel = grpc.insecure_channel(endpoint)
。 - 在 Go 中查找服务:
import ( "log" "github.com/mscheidegger/minidisc/go/pkg/minidisc" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ); func main() { labels := map[string]string{"env": "prod"}; addr, err := minidisc.FindService("myservice", labels); if err!= nil { log.Fatalf("Minidisc is unavailable: %v", err) }; clientConn, err := grpc.NewClient( addr.String(), grpc.WithTransportCredentials(insecure.NewCredentials()) ); //... now use the clientConn. }
。 - 在 Go 中使用自定义解析器:
import ( "github.com/mscheidegger/minidisc/go/pkg/mdgrpc" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ); func main() { mdgrpc.RegisterResolver(); clientConn, err := grpc.NewClient( "minidisc://myservices?env=prod", grpc.WithTransportCredentials(insecure.NewCredentials()) ); //... now use the clientConn. }
。 - 服务器广告服务在 Go 中:
import ( "github.com/mscheidegger/minidisc/go/pkg/minidisc" ); func main() { // Initialise the service at "port", then... registry, err := minidisc.StartRegistry(); if err!= nil { log.Fatalf("Minidisc is unavailable: %v", err) }; labels := map[string]string{"env": "prod"}; registry.AdvertiseService(port, "myservice", labels); // Now you can enter the serving loop. }
,在 Python 中类似。 md
命令行工具使用:md list
列出所有服务,md find myservice env=prod
查找匹配服务,md advertise my-services.yaml
广告服务,可参考 example-cfg.yaml 示例配置,也有 Docker 镜像。- 在 Docker 中配置:在
compose.yaml
中设置共享卷tailscale-socket
,并在容器中设置TS_SOCKET
为共享卷路径,如volumes: tailscale-socket: {}; services: ts-sidecar: volumes: - tailscale-socket:/var/run/tailscale; foobar: volumes: - tailscale-socket:/var/run/tailscale
等。 - Minidisc 的发现网络是基于简单对等网络,节点尝试绑定到本地 Tailnet 地址的 28004 端口,若绑定失败可注册为代理,由领导者广告服务,直到连接断开。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。