6.6. 使用 HTTP2 / gRPC 与无服务器应用程序交互
OpenShift Container Platform 路由不支持 HTTP2,因此不支持需要使用 HTTP2 进行传输的 gRPC。如果您在应用程序中使用这些协议,则必须使用入口(ingress)网关直接调用应用程序。要做到这一点,您必须找到 ingress 网关的公共地址以及应用程序的特定主机。
流程
- 找到应用程序主机。请参阅验证无服务器应用程序部署中的相关内容。
获取入口网关的公共地址:
$ oc -n knative-serving-ingress get svc kourier
输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m
公共地址位于
EXTERNAL-IP
字段,这里是:a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com
手动在 HTTP 请求的主机标头中设置应用程序的主机,但将请求定向到 ingress 网关的公共地址。
下面是一个例子,它使用从验证无服务器应用程序部署的步骤中获取的信息:
$ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com Hello Serverless!
您还可以通过将授权设置为应用程序的主机来创建 gRPC 请求,同时将请求直接定向到 ingress 网络。
以下是在 Golang gRPC 客户端中的一个示例:
注意如示例所示,请确保将对应的端口(默认为 80)附加到两个主机中。
grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )