1

我已经设置了一个 GRPC 网关,其中包含与 HTTP URL 对应的所有方法。例如v1/my-service。这些路径似乎不适用于我设置的入口。我可以通过使用另一个 pod 使用内部集群 IP 将请求路由到此 URL 来间接发送请求,但是当我尝试直接访问 my-ip/v1/myservice 时,我收到一个几乎没有描述的服务器错误:

Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.

发生这种情况是否有原因?当我知道传入的 URL 格式对应于网关中定义的方法时,我不明白为什么会以这种方式收到服务器错误。我想指出,我的入口绝对有效,因为我只是使用这个中间 pod 来路由成功的请求,但我仍然通过入口发送它们。

4

1 回答 1

0

可能,您需要在 Ingress 资源上添加注释(?):

nginx.ingress.kubernetes.io/backend-protocol: "GRPC"

和 HTTP/2 入口控制器 ConfigMap选项(?):

use-http2="true"

此外,检查nginx.confNginx 入口控制器 pod:

kubectl exec -it <nginx-ingress-pod> sh
# cat nginx.conf

您想检查是否在服务器级别配置了类似的内容:

    server {
        listen 80 http2;
 
        access_log logs/access.log main;
 
        location / {
            # Replace localhost:50051 with the address and port of your gRPC server
            # The 'grpc://' prefix is optional; unencrypted gRPC is the default
            grpc_pass grpc://localhost:50051;
        }
    }
于 2020-07-13T19:31:20.657 回答