【问题标题】:go gRPC routing without specifying port在不指定端口的情况下进行 gRPC 路由
【发布时间】:2018-10-04 22:48:24
【问题描述】:

gRPC 新手:

有一个 gRPC 客户端,你如何使用路由?

我的 gRPC 服务器位于此本地路径 10.0.1.6/hw

如果我在 pod 中运行它,它正在 Kubernetes 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 端点?

【问题讨论】:

  • 我认为您正在测试的 IP 是虚拟 IP。像 192.168。如果它在 Pod 之外运行(我从您的问题中推断但在其中失败),您是否使用了正确的 IP 地址?

标签: go kubernetes grpc istio


【解决方案1】:

如果它在 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

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 2018-10-16
    • 2013-01-02
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多