当前位置: 首页 > 知识库问答 >
问题:

使用Kubernetes后端的Google Cloud ESP gRPC代码转换

法浩壤
2023-03-14

我有一个带有gRPC接口的服务,我希望客户端可以使用JSON over HTTP来调用它。我决定使用Google云平台及其将HTTP请求转换为gRPC请求的能力。我决定从Hello GRPC Java示例开始。当后端通过Docker在Google Compute Engine实例上运行时,我可以通过以下Docker run命令成功地获得响应:

docker run --detach --name=esp \
  --publish=8000:8000 \
  --publish=9000:9000 \
  --link=grpc-hello:grpc-hello \
  --service hellogrpc.endpoints.skypo-llc.cloud.goog \
  --version 2017-11-30r1 \
  --http_port=8000 \
  --http2_port=9000 \
  --backend=grpc://grpc-hello:50051
  gcr.io/endpoints-release/endpoints-runtime:1          

但是,当我试图卷曲部署到Kubernetes的相同ESP和后端服务时,我会在端口8000上得到二进制输出,或者在端口9000上得到超时:

$ curl -v -d '{"name":"message"}' 
http://helloservice.com:8000/helloworld.Greeter/SayHello?key=REDACTED
.....
Warning: Binary output can mess up your terminal. Use "--output -" to tell 
Warning: curl to output it to your terminal anyway, or consider "--output 
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 57)
* stopped the pause stream!
* Closing connection 0

以下是我的Kubernetes配置:

apiVersion: v1
kind: Service
metadata:
  name: grpc-hello
spec:
  ports:
  - port: 80
    targetPort: 9000
    protocol: TCP
    name: http
  selector:
    app: grpc-hello
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: grpc-hello
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: grpc-hello
    spec:
      containers:
      - name: esp
        image: gcr.io/endpoints-release/endpoints-runtime:1
        args: [
        "--http_port", "8000",
        "--http2_port", "9000",
        "--backend", "grpc://127.0.0.1:50051",
        "--service", "hellogrpc.endpoints.skypo-llc.cloud.goog",
        "--version", "2017-12-22r0",
        ]                                                                                                                                                                                                                                                                  
        ports:
          - containerPort: 9000
            containerPort: 8000
      - name: java-grpc-hello
        image: gcr.io/skypo-llc/java-grpc-hello:1.0
        ports:
          - containerPort: 50051

和我的DockerFile:

FROM gcr.io/google_appengine/openjdk8

RUN apt-get update \
    && apt-get -y -q upgrade \
    && rm -rf /var/lib/apt/lists/*

ADD ./server/build/libs/server.jar /hello/server.jar

EXPOSE 8000
EXPOSE 9000

ENTRYPOINT ["java", "-jar", "/hello/server.jar"]

共有1个答案

拓拔弘化
2023-03-14

解决方案是将端口8000添加到Kubernetes服务部分:

  - port: 8000
    targetPort: 8000
    protocol: TCP
    name: http2

因此,整个服务部现在是:

apiVersion: v1
kind: Service
metadata:
  name: grpc-hello
spec:
  ports:
  - port: 80
    targetPort: 9000
    protocol: TCP
    name: http
  - port: 8000
    targetPort: 8000
    protocol: TCP
    name: http2
  selector:
    app: grpc-hello
  type: LoadBalancer
 类似资料:
  • 问题内容: 如何设置Karma以运行后端单元测试(使用Mocha编写)?如果我将后端测试脚本添加到中,它将无法声明未定义。 问题答案: 你不知道 业力仅用于测试基于浏览器的代码。如果您的项目在后端具有mocha测试,而在前端具有karma / mocha,请尝试在脚本下编辑package.json以将测试设置为: 然后,如果返回true,您将知道提交或部署是安全的。

  • 问题内容: 我曾经有一个可打电话的课 我曾经用来提交。如何更改使用? 以下代码无法编译 不存在变量U类型的实例,因此SampleTask符合Supplier 问题答案: 期望一个,而您给它一个。 错误消息告诉您,编译器已尝试找到用于“ 您的a”的类型,但找不到该类型。 Java将把lambda隐式“提升”到功能接口(例如或)。但是它不会将功能接口视为可互换的- 也就是说,您不能在期望的位置使用a

  • 我已经完成了,需要提取以“12”开头的值。我已经编写了代码并在工作。可以帮助我用正则表达式编写代码 我的出路

  • 我正在为Kubernetes使用fabric8 java客户端库。我无法找到对容器执行更新操作的最佳方法。基本上,我想做的是,我已经创建了一个容器映像为“nginx”的pod,现在我想更新这个映像为“nginx:1.16.1”。 我想做的是

  • 问题内容: 我正在尝试从 The Go Programming Language Phrasebook ( 《 Go编程语言短语》)中获取 一个示例,该书于2012年基于Go 1.0编写。该示例使用的包现已变为。我目前正在使用Go 1.2.1,并且下面的代码无法按原样编译,因为该软件包现已失效: 我仍然是GoLang的新手,因此我不确定如何将较早的实验软件包集成到标准库中。我做了一些研究,发现现在

  • 问题内容: 我遵循了负载均衡器教程:https : //cloud.google.com/container- engine/docs/tutorials/http-balancer 在使用Nginx映像时,当尝试使用自己的应用程序映像时,它工作正常后端切换为不正常。 我的应用程序重定向到/(返回302),但在pod定义中添加了一个: 我的入口看起来像: 服务配置为: 后端健康状况如下: 入口的规