【问题标题】:Google Cloud ESP gRPC transcoding with Kubernetes backend使用 Kubernetes 后端的 Google Cloud ESP gRPC 转码
【发布时间】:2017-12-23 06:18:29
【问题描述】:

我有一个带有 gRPC 接口的服务,我希望客户端可以选择使用 JSON over HTTP 进行调用。我决定使用 Google Cloud Platform 及其功能来transcode the HTTP request into a gRPC request。我决定从Hello GRPC Java Example 开始。当后端通过 Docker 在 Google Compute Engine 实例上使用以下 Docker 运行命令运行时,我能够成功获得响应:

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          

但是,当我尝试 curl 部署到 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"]

【问题讨论】:

标签: java kubernetes google-cloud-endpoints


【解决方案1】:

解决方案是将端口 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

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2018-09-16
    • 1970-01-01
    • 2016-12-06
    • 2021-10-07
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多