mirror of https://github.com/knative/docs.git
113 lines
3.0 KiB
Markdown
113 lines
3.0 KiB
Markdown
# gRPC Server - Go
|
|
|
|
A [gRPC](https://grpc.io) server written in Go.
|
|
|
|
This sample can be used to try out gRPC, HTTP/2, and custom port configuration
|
|
in a knative service.
|
|
|
|
The container image is built with two binaries: the server and the client.
|
|
This is done for ease of testing and is not a recommended practice
|
|
for production containers.
|
|
|
|
## Prerequisites
|
|
|
|
- Install the latest version of Knative Serving. See
|
|
[Install Knative Serving](https://knative.dev/docs/install/serving/install-serving-with-yaml).
|
|
|
|
- Install [docker](https://www.docker.com/).
|
|
|
|
- A [Docker Hub account](https://hub.docker.com) to which you can upload the sample's container image.
|
|
|
|
## Build and Deploy the sample code
|
|
|
|
1. Download a copy of the code:
|
|
|
|
```bash
|
|
git clone https://github.com/knative/docs.git knative-docs
|
|
cd knative-docs/code-samples/serving/grpc-ping-go
|
|
```
|
|
|
|
2. Use Docker to build a container image for this service and push to Docker Hub.
|
|
|
|
Replace `{username}` with your Docker Hub username then run the commands:
|
|
|
|
```bash
|
|
# Build the container on your local machine.
|
|
docker build --tag "{username}/grpc-ping-go" .
|
|
|
|
# Push the container to docker registry.
|
|
docker push "{username}/grpc-ping-go"
|
|
```
|
|
|
|
3. Update the `service.yaml` file in the project to reference the published image from step 1.
|
|
|
|
Replace `{username}` in `service.yaml` with your Docker Hub user name:
|
|
|
|
|
|
```yaml
|
|
apiVersion: serving.knative.dev/v1
|
|
kind: Service
|
|
metadata:
|
|
name: grpc-ping
|
|
namespace: default
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: docker.io/{username}/grpc-ping-go
|
|
ports:
|
|
- name: h2c
|
|
containerPort: 8080
|
|
```
|
|
|
|
4. Use `kubectl` to deploy the service.
|
|
|
|
```bash
|
|
kubectl apply --filename service.yaml
|
|
```
|
|
|
|
Response:
|
|
|
|
```bash
|
|
service "grpc-ping" created
|
|
```
|
|
|
|
## Exploring
|
|
|
|
Once deployed, you can inspect the created resources with `kubectl` commands:
|
|
|
|
```bash
|
|
# This will show the Knative service that we created:
|
|
kubectl get ksvc --output yaml
|
|
|
|
# This will show the Route, created by the service:
|
|
kubectl get route --output yaml
|
|
|
|
# This will show the Configuration, created by the service:
|
|
kubectl get configurations --output yaml
|
|
|
|
# This will show the Revision, created by the Configuration:
|
|
kubectl get revisions --output yaml
|
|
```
|
|
|
|
## Testing the service
|
|
|
|
Testing the gRPC service requires using a gRPC client built from the same
|
|
protobuf definition used by the server.
|
|
|
|
The Dockerfile builds the client binary. To run the client you will use the
|
|
same container image deployed for the server with an override to the
|
|
entrypoint command to use the client binary instead of the server binary.
|
|
|
|
Replace `{username}` with your Docker Hub user name and run the command:
|
|
|
|
```bash
|
|
docker run --rm {username}/grpc-ping-go \
|
|
/client \
|
|
-server_addr="grpc-ping.default.1.2.3.4.sslip.io:80" \
|
|
-insecure
|
|
```
|
|
|
|
The arguments after the container tag `{username}/grpc-ping-go` are used
|
|
instead of the entrypoint command defined in the Dockerfile `CMD` statement.
|