首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >kubernetes集群内的C# gRPC无法将DNS名称解析为其他服务

kubernetes集群内的C# gRPC无法将DNS名称解析为其他服务
EN

Stack Overflow用户
提问于 2018-06-09 05:46:33
回答 1查看 1.7K关注 0票数 2

我试着调试了几个小时,但没有效果。我不是知道怎么用谷歌搜索,就是知道它有什么不寻常的问题。

我在google cloud上有Kubernetes引擎集群。为了测试它,我部署了简单的应用程序:https://github.com/iniside/uSpark,它由三个控制台应用程序组成:

  • GreeterServer -使用gRPC和Endpoints
  • Greeter.Backend的前端-使用gRPC service.
  • uSpark的后端-客户端控制台应用程序。

他们都在使用.NET Core2.1、gRPC 1.12和C#。Kubernetes引擎为1.10

我已经尝试查看服务dns是否在群集内部解析。在创建Channel时,我也尝试通过服务的IP直接调用服务。

其中任何一个都会以以下形式结束:

代码语言:javascript
运行
复制
Grpc.Core.RpcException: 'Status(StatusCode=Unavailable, Detail="Name resolution failure")'

GreeterServer正在尝试与Greeter.Backend对话:

代码语言:javascript
运行
复制
public override Task<HelloReply> SayHelloAgain(HelloRequest request, ServerCallContext context)
{
    Channel channel = new Channel("grpc-greeter-backend.default.svc.cluster.local", 9000, ChannelCredentials.Insecure);
    var backendClient = new GreeterBackend.GreeterBackendClient(channel);

    var reply = backendClient.SayHelloFromBackend(new BackendHelloRequest { Name = "iniside" });
    channel.ShutdownAsync().Wait(); //not neeed to wait, but easier to debug now.
    return Task.FromResult<HelloReply>(new HelloReply { Message = "Hello Again " + request.Name + " " + reply.Message });
}

这是我的后端代码:

代码语言:javascript
运行
复制
class GreeterBackendImpl : GreeterBackend.GreeterBackendBase
{
    public override Task<BackendHelloReply> SayHelloFromBackend(BackendHelloRequest request, ServerCallContext context)
    {
        return Task.FromResult<BackendHelloReply>(new BackendHelloReply { Message = "Hello " + request.Name + " From Backend"});
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        Server server = new Server
        {
            Services = { GreeterBackend.BindService(new GreeterBackendImpl()) },
            Ports = { new ServerPort("127.0.0.1", 9000, ServerCredentials.Insecure) }
        };

        server.Start();

        Console.WriteLine("Gretter server is linstening on port 50051");
        Console.WriteLine("Press any key to stop server");

        int read = Console.Read();
        while (read < 0)
        {

        }
    }
}

前端配置:

代码语言:javascript
运行
复制
apiVersion: v1
kind: Service
metadata:
  name: esp-grpc-greeter
spec:
  ports:
  # Port that accepts gRPC and JSON/HTTP2 requests over HTTP.
  - port: 80
    targetPort: 9100
    protocol: TCP
    name: http2
  selector:
    app: esp-grpc-greeter
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: esp-grpc-greeter
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: esp-grpc-greeter
    spec:
      containers:
      - name: esp
        image: gcr.io/endpoints-release/endpoints-runtime:1
        args: [
          "--http2_port=9100",
          "--service=hellohorld3.endpoints.sa-game-206414.cloud.goog",
          "--rollout_strategy=managed",
          "--backend=grpc://127.0.0.1:9000"
        ]
        ports:
          - containerPort: 9100
      - name: greeter
        image: eu.gcr.io/sa-game-206414/greeter-service:v1
        ports:
          - containerPort: 8000

后端配置:

代码语言:javascript
运行
复制
apiVersion: v1
kind: Service
metadata:
  name: grpc-greeter-backend
spec:
  ports:
  # Port that accepts gRPC and JSON/HTTP2 requests over HTTP.
  - port: 8080
    targetPort: 9000
    protocol: TCP
    name: http2
  - port: 9000
    targetPort: 9000
    protocol: TCP
    name: http2900
  selector:
    app: grpc-greeter-backend
  type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: grpc-greeter-backend
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: grpc-greeter-backend
    spec:
      containers:
      - name: greeter-backend
        image: eu.gcr.io/sa-game-206414/greeter-backend:b1
        ports:
          - containerPort: 9000
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50768781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档