GitHub - mscheidegger/minidisc:Tailscale 网络的零配置服务发现

主要观点: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 端口,若绑定失败可注册为代理,由领导者广告服务,直到连接断开。
阅读 10
0 条评论