ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Ambassador 可以从您的应用程序外部轻松访问您的服务。这包括gRPC服务,虽然需要一些额外的配置:默认情况下,Envoy使用HTTP / 1.x连接到上游服务,然后尽可能升级到HTTP / 2。但是,gRPC建立在HTTP / 2上,而大多数gRPC服务器根本不会说HTTP / 1.x. Ambassador 必须告诉底层 Envoy 你的gRPC服务只想通信到HTTP/2,使用grpc属性 `Mapping`。 ## Writing a gRPC service for Ambassador ### Dockerize 在构建我们的gRPC应用程序并在本地测试它之后,我们需要将其打包为Docker容器并将其部署到Kubernetes。 要运行gRPC应用程序,我们需要包括client/server和proto定义。 ### 映射gRPC服务 Ambassador Mappings基于URL前缀; 对于gRPC,URL前缀是完整的服务名称,包括包路径(package.service)。这些在.proto定义文件中定义。在示例proto定义文件中,我们看到: ``` package helloworld; // The greeting service definition. service Greeter { ... } ``` 所以URL prefix是`helloworld.Greeter`,映射将是: ``` --- apiVersion: ambassador/v0 kind: Mapping name: grpc_py_mapping grpc: True prefix: /helloworld.Greeter/ rewrite: /helloworld.Greeter/ service: grpc-example ``` ### 部署到Kubernetes `grpc_example.yaml ` ``` --- apiVersion: v1 kind: Service metadata: labels: service: grpc-example name: grpc-example annotations: getambassador.io/config: | --- apiVersion: ambassador/v0 kind: Mapping name: grpc_java_mapping grpc: True prefix: /Simple/ rewrite: /Simple/ service: grpc-example spec: type: ClusterIP ports: - name: grpc-greet port: 80 targetPort: grpc-api selector: service: grpc-example --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: grpc-example spec: replicas: 1 template: metadata: labels: service: grpc-example spec: containers: - name: grpc-example image: woms/grpc-server:0.0.1 ports: - name: grpc-api containerPort: 9898 restartPolicy: Always ``` 将Ambassador映射添加到服务后,Kubernetes部署YAML文件的其余部分非常简单。我们需要识别要使用的容器映像,公开containerPort以侦听Docker容器正在侦听的同一端口,并将服务端口(80)映射到容器端口(9898)。 配置YAML文件后,使用kubectl将其部署到集群。 ``` $ kubectl apply -f grpc_example.yaml ``` ### 测试部署 确保在进行更高级的更改(例如添加TLS)之前测试您的Kubernetes部署。要使用Ambassador 测试任何服务,我们将需要您可以获得的正在运行的 Ambassador 服务的主机名: ``` $ kubectl get service ambassador -o wide ``` 将grpc-client的链接更改为:`$AMBASSADORHOST:$PORT` ## gRPC and TLS 通过 ambassador 通过加密通道连接到gRPC服务需要一些额外的配置。目前,gRPC和 ambassador通信通过明文。 ![](https://d33wubrfki0l68.cloudfront.net/1fee79d11765ad8cba0cd6133c4f02f5a9acd3c8/8073b/images/grpc-tls.png) 如果要在gRPC调用中添加TLS加密,首先需要告诉Ambassador添加HTTP / 2执行TLS所需的ALPN协议。接下来,您需要稍微更改客户端代码并告诉它与Ambassador打开一个安全的RPC通道。