1

我正在使用Go-micro、Docker、Traefik来部署我的服务。我部署了 go-micro 服务并注册了Traefik这是我在 Traefik 仪表板中的 sum(grpc service) 状态。当我在终端卷曲它时,我得到了这个结果,我认为它是二进制的 grpc 消息。但是当我使用这段代码时

package main

import (
    "context"
    "fmt"
    proto "gomicro-demo/client/service"
    "google.golang.org/grpc"
    "google.golang.org/grpc/metadata"
    "log"
)

func main() {


    con, err := grpc.Dial("localhost:8080", grpc.WithInsecure())

    if err != nil {
        log.Fatal("Connection error: ", err)
    }

    md := metadata.New(map[string]string{"Host": "sum.traefik"})
    ctx := metadata.NewOutgoingContext(context.Background(), md)

    service := proto.NewSumClient(con)
    res, err2 := service.GetSum(ctx, &proto.Request{})

    if err2 == nil {
        fmt.Println(res)
    } else {
        log.Fatal("Call error:", err2)
    }

}

我收到此错误rpc error: code = Unimplemented desc = Not Found: HTTP status code 404; 传输:收到意外的内容类型 "text/plain; charset=utf-8"。由于地址或 grpc 元数据(主机标头),我不知道这个错误是如何发生的。请帮我解决这个问题。非常感谢!

4

1 回答 1

0

你可以像这样导出tcp。请使用trefik2, HostSNI必须设置

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: redis
spec:
  entryPoints:
    - redis
  routes:
  - match: HostSNI(`*`)
    services:
    - name: redis
      port: 6379
于 2020-08-03T05:57:36.843 回答