使用Kubernetes后端进行Google Cloud ESP gRPC转码

问题描述 投票:0回答:1

我有一个带有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          

但是,当我尝试卷曲部署到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个回答
0
投票

解决方案是将端口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
© www.soinside.com 2019 - 2024. All rights reserved.