1*cc02d7e2SAndroid Build Coastguard WorkergRPC Hostname Example 2*cc02d7e2SAndroid Build Coastguard Worker===================== 3*cc02d7e2SAndroid Build Coastguard Worker 4*cc02d7e2SAndroid Build Coastguard WorkerThe hostname example is a Hello World server whose response includes its 5*cc02d7e2SAndroid Build Coastguard Workerhostname. It also supports health and reflection services. This makes it a good 6*cc02d7e2SAndroid Build Coastguard Workerserver to test infrastructure, like load balancing. This example depends on a 7*cc02d7e2SAndroid Build Coastguard WorkergRPC version of 1.28.1 or newer. 8*cc02d7e2SAndroid Build Coastguard Worker 9*cc02d7e2SAndroid Build Coastguard Worker### Run the Server 10*cc02d7e2SAndroid Build Coastguard Worker 11*cc02d7e2SAndroid Build Coastguard Worker1. Navigate to this directory: 12*cc02d7e2SAndroid Build Coastguard Worker 13*cc02d7e2SAndroid Build Coastguard Worker```sh 14*cc02d7e2SAndroid Build Coastguard Workercd grpc/examples/python/xds 15*cc02d7e2SAndroid Build Coastguard Worker``` 16*cc02d7e2SAndroid Build Coastguard Worker 17*cc02d7e2SAndroid Build Coastguard Worker2. Run the server 18*cc02d7e2SAndroid Build Coastguard Worker 19*cc02d7e2SAndroid Build Coastguard Worker```sh 20*cc02d7e2SAndroid Build Coastguard Workervirtualenv venv -p python3 21*cc02d7e2SAndroid Build Coastguard Workersource venv/bin/activate 22*cc02d7e2SAndroid Build Coastguard Workerpip install -r requirements.txt 23*cc02d7e2SAndroid Build Coastguard Workerpython server.py 24*cc02d7e2SAndroid Build Coastguard Worker``` 25*cc02d7e2SAndroid Build Coastguard Worker 26*cc02d7e2SAndroid Build Coastguard Worker### Run the Client 27*cc02d7e2SAndroid Build Coastguard Worker 28*cc02d7e2SAndroid Build Coastguard Worker1. Set up xDS configuration. 29*cc02d7e2SAndroid Build Coastguard Worker 30*cc02d7e2SAndroid Build Coastguard WorkerAfter configuring your xDS server to track the gRPC server we just started, 31*cc02d7e2SAndroid Build Coastguard Workercreate a bootstrap file as desribed in [gRFC A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md): 32*cc02d7e2SAndroid Build Coastguard Worker 33*cc02d7e2SAndroid Build Coastguard Worker``` 34*cc02d7e2SAndroid Build Coastguard Worker{ 35*cc02d7e2SAndroid Build Coastguard Worker xds_servers": [ 36*cc02d7e2SAndroid Build Coastguard Worker { 37*cc02d7e2SAndroid Build Coastguard Worker "server_uri": <string containing URI of xds server>, 38*cc02d7e2SAndroid Build Coastguard Worker "channel_creds": [ 39*cc02d7e2SAndroid Build Coastguard Worker { 40*cc02d7e2SAndroid Build Coastguard Worker "type": <string containing channel cred type>, 41*cc02d7e2SAndroid Build Coastguard Worker "config": <JSON object containing config for the type> 42*cc02d7e2SAndroid Build Coastguard Worker } 43*cc02d7e2SAndroid Build Coastguard Worker ] 44*cc02d7e2SAndroid Build Coastguard Worker } 45*cc02d7e2SAndroid Build Coastguard Worker ], 46*cc02d7e2SAndroid Build Coastguard Worker "node": <JSON form of Node proto> 47*cc02d7e2SAndroid Build Coastguard Worker} 48*cc02d7e2SAndroid Build Coastguard Worker``` 49*cc02d7e2SAndroid Build Coastguard Worker 50*cc02d7e2SAndroid Build Coastguard Worker2. Point the `GRPC_XDS_BOOTSTRAP` environment variable at the bootstrap file: 51*cc02d7e2SAndroid Build Coastguard Worker 52*cc02d7e2SAndroid Build Coastguard Worker``` 53*cc02d7e2SAndroid Build Coastguard Workerexport GRPC_XDS_BOOTSTRAP=/etc/xds-bootstrap.json 54*cc02d7e2SAndroid Build Coastguard Worker``` 55*cc02d7e2SAndroid Build Coastguard Worker 56*cc02d7e2SAndroid Build Coastguard Worker3. Run the client: 57*cc02d7e2SAndroid Build Coastguard Worker 58*cc02d7e2SAndroid Build Coastguard Worker``` 59*cc02d7e2SAndroid Build Coastguard Workerpython client.py xds:///my-backend 60*cc02d7e2SAndroid Build Coastguard Worker``` 61*cc02d7e2SAndroid Build Coastguard Worker 62*cc02d7e2SAndroid Build Coastguard Worker### Verifying Configuration with a CLI Tool 63*cc02d7e2SAndroid Build Coastguard Worker 64*cc02d7e2SAndroid Build Coastguard WorkerAlternatively, `grpcurl` can be used to verify your server. If you don't have it, 65*cc02d7e2SAndroid Build Coastguard Workerinstall [`grpcurl`](https://github.com/fullstorydev/grpcurl/releases). This will allow 66*cc02d7e2SAndroid Build Coastguard Workeryou to manually test the service. 67*cc02d7e2SAndroid Build Coastguard Worker 68*cc02d7e2SAndroid Build Coastguard WorkerBe sure to set up the bootstrap file and `GRPC_XDS_BOOTSTRAP` as in the previous 69*cc02d7e2SAndroid Build Coastguard Workersection. 70*cc02d7e2SAndroid Build Coastguard Worker 71*cc02d7e2SAndroid Build Coastguard Worker1. Verify the server's application-layer service: 72*cc02d7e2SAndroid Build Coastguard Worker 73*cc02d7e2SAndroid Build Coastguard Worker```sh 74*cc02d7e2SAndroid Build Coastguard Worker> grpcurl --plaintext -d '{"name": "you"}' localhost:50051 75*cc02d7e2SAndroid Build Coastguard Worker{ 76*cc02d7e2SAndroid Build Coastguard Worker "message": "Hello you from rbell.svl.corp.google.com!" 77*cc02d7e2SAndroid Build Coastguard Worker} 78*cc02d7e2SAndroid Build Coastguard Worker``` 79*cc02d7e2SAndroid Build Coastguard Worker 80*cc02d7e2SAndroid Build Coastguard Worker2. Verify that all services are available via reflection: 81*cc02d7e2SAndroid Build Coastguard Worker 82*cc02d7e2SAndroid Build Coastguard Worker```sh 83*cc02d7e2SAndroid Build Coastguard Worker> grpcurl --plaintext localhost:50051 list 84*cc02d7e2SAndroid Build Coastguard Workergrpc.health.v1.Health 85*cc02d7e2SAndroid Build Coastguard Workergrpc.reflection.v1alpha.ServerReflection 86*cc02d7e2SAndroid Build Coastguard Workerhelloworld.Greeter 87*cc02d7e2SAndroid Build Coastguard Worker``` 88*cc02d7e2SAndroid Build Coastguard Worker 89*cc02d7e2SAndroid Build Coastguard Worker3. Verify that all services are reporting healthy: 90*cc02d7e2SAndroid Build Coastguard Worker 91*cc02d7e2SAndroid Build Coastguard Worker```sh 92*cc02d7e2SAndroid Build Coastguard Worker> grpcurl --plaintext -d '{"service": "helloworld.Greeter"}' localhost:50051 93*cc02d7e2SAndroid Build Coastguard Workergrpc.health.v1.Health/Check 94*cc02d7e2SAndroid Build Coastguard Worker{ 95*cc02d7e2SAndroid Build Coastguard Worker "status": "SERVING" 96*cc02d7e2SAndroid Build Coastguard Worker} 97*cc02d7e2SAndroid Build Coastguard Worker 98*cc02d7e2SAndroid Build Coastguard Worker> grpcurl --plaintext -d '{"service": ""}' localhost:50051 99*cc02d7e2SAndroid Build Coastguard Workergrpc.health.v1.Health/Check 100*cc02d7e2SAndroid Build Coastguard Worker{ 101*cc02d7e2SAndroid Build Coastguard Worker "status": "SERVING" 102*cc02d7e2SAndroid Build Coastguard Worker} 103*cc02d7e2SAndroid Build Coastguard Worker``` 104*cc02d7e2SAndroid Build Coastguard Worker 105*cc02d7e2SAndroid Build Coastguard Worker### Running with Proxyless Security 106*cc02d7e2SAndroid Build Coastguard Worker 107*cc02d7e2SAndroid Build Coastguard Worker#### Run the Server with Secure Credentials 108*cc02d7e2SAndroid Build Coastguard Worker 109*cc02d7e2SAndroid Build Coastguard WorkerAdd the `--secure true` flag to the invocation outlined above. 110*cc02d7e2SAndroid Build Coastguard Worker 111*cc02d7e2SAndroid Build Coastguard Worker```sh 112*cc02d7e2SAndroid Build Coastguard Workerpython server.py --secure true 113*cc02d7e2SAndroid Build Coastguard Worker``` 114*cc02d7e2SAndroid Build Coastguard Worker 115*cc02d7e2SAndroid Build Coastguard Worker#### Run the Client with Secure Credentials 116*cc02d7e2SAndroid Build Coastguard Worker 117*cc02d7e2SAndroid Build Coastguard WorkerAdd the `--secure true` flag to the invocation outlined above. 118*cc02d7e2SAndroid Build Coastguard Worker 119*cc02d7e2SAndroid Build Coastguard Worker3. Run the client: 120*cc02d7e2SAndroid Build Coastguard Worker 121*cc02d7e2SAndroid Build Coastguard Worker``` 122*cc02d7e2SAndroid Build Coastguard Workerpython client.py xds:///my-backend --secure true 123*cc02d7e2SAndroid Build Coastguard Worker``` 124