xref: /aosp_15_r20/external/grpc-grpc/examples/python/xds/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
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