不指定端口的情况下进行go gRPC路由

6

初次接触gRPC:

有了gRPC客户端,如何使用路由?

我的gRPC服务器在本地路径10.0.1.6/hw上。

它在Kubernetes pod中运行并监听,并且如果在pod中运行,则在内部工作正常。但我现在通过url和ingress访问它。

但是,如果没有端口号,我该如何测试它的路由是否有效?

const (
    address     = "10.0.1.6:80/hw"
    defaultName = "World"
)

var (
    conn *grpc.ClientConn
    c    pb.GreeterClient
)

func setupRPC() {

    var err error
    conn, err = grpc.Dial(address, grpc.WithInsecure())
    c = pb.NewGreeterClient(conn)
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }

}

我遇到了这个错误:
could not greet: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp: lookup tcp/80/hw: nodename nor servname provided, or not known"

你知道如何测试 gRPC 端点吗?


1
我认为你正在测试的IP是虚拟的,比如192.168之类的。如果它在Pod外运行,而在Pod内失败,你是否使用了正确的IP地址? - Virmundi
1个回答

0

如果它在Pod内部正常运作,那你只需要将它暴露出来。你可以通过添加yaml定义来实现服务,例如下面的代码。

apiVersion: v1
kind: Service
metadata:
  namespace: $YOUR_NAMESPCAE
  labels:
    app: $YOUR_SERVICE_NAME
  name: $YOUR_SERVICE_NAME
spec:
  ports:
  - name: $YOUR_GRCP_PORT
    port: $YOUR_GRCP_PORT
    targetPort: $YOUR_GRCP_PORT
  selector:
    app: $YOUR_SERVICE_NAME
status:
  loadBalancer: {}

请注意,当出现$YOUR_GRCP_PORT时,您需要定义要公开的GRCP端口。
现在,您只需要编辑您提到的入口。它应该类似于以下内容。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: vizix-ingress
  namespace: preprod-vizix-io
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: "/"
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: $YOUR_SERVICE_NAME
          servicePort: $YOUR_GRCP_PORT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接