| gRPC XDS Example | |
| ================ | |
| The XDS example consists of a Hello World client and a Hello World server capable of | |
| being configured with the XDS management protocol. Out-of-the-box the client | |
| behaves the same the hello-world version and the server behaves similar to the | |
| example-hostname but with a required dependency on xDS. | |
| __XDS support is incomplete and experimental, with limited compatibility. It | |
| will be very hard to produce a working environment just by this example. Please | |
| refer to documentation specific for your XDS management server and | |
| environment.__ | |
| ### Build the example | |
| Build the XDS hello-world example client & server. From the `grpc-java/examples/examples-xds` | |
| directory: | |
| ``` | |
| $ ../gradlew installDist | |
| ``` | |
| This creates the scripts `build/install/example-xds/bin/xds-hello-world-client` and | |
| `build/install/example-xds/bin/xds-hello-world-server`. | |
| ### Run the example without using XDS Credentials | |
| To use XDS, you should first deploy the XDS management server in your deployment environment | |
| and know its name. You need to set the `GRPC_XDS_BOOTSTRAP` environment variable (preferred) or if that is not set then | |
| the `io.grpc.xds.bootstrap` java system property to point to the gRPC XDS bootstrap file (see | |
| [gRFC A27](https://github.com/grpc/proposal/blob/master/A27-xds-global-load-balancing.md#xdsclient-and-bootstrap-file) for the | |
| bootstrap format). This is needed by both `build/install/example-xds/bin/xds-hello-world-client` | |
| and `build/install/example-xds/bin/xds-hello-world-server`. | |
| 1. To start the XDS-enabled example server on its default port of 50051, run: | |
| ``` | |
| $ export GRPC_XDS_BOOTSTRAP=/path/to/bootstrap.json | |
| $ ./build/install/example-xds/bin/xds-hello-world-server | |
| ``` | |
| 2. In a different terminal window, run the XDS-enabled example client: | |
| ``` | |
| $ export GRPC_XDS_BOOTSTRAP=/path/to/bootstrap.json | |
| $ ./build/install/example-xds/bin/xds-hello-world-client "xds world" xds:///yourServersName | |
| ``` | |
| The first command line argument (`xds world`) is the name you wish to include in | |
| the greeting request to the server and the second argument | |
| (`xds:///yourServersName`) is the target to connect to using the `xds:` target | |
| scheme. | |
| ### Run the example with xDS Credentials | |
| The above example used plaintext (insecure) credentials as explicitly provided by the client and server | |
| code. We will now demonstrate how the code can authorize use of xDS provided credentials by using | |
| `XdsChannelCredentials` on the client side and using `XdsServerCredentials` on the server side. | |
| This code is enabled by providing an additional command line argument. | |
| 1. On the server side, add `--xds-creds` on the command line to authorize use of xDS security: | |
| ``` | |
| $ export GRPC_XDS_BOOTSTRAP=/path/to/bootstrap.json | |
| $ ./build/install/example-xds/bin/xds-hello-world-server --xds-creds | |
| ``` | |
| 2. Similarly, add `--xds-creds` on the command line when you run the xDS client: | |
| ``` | |
| $ export GRPC_XDS_BOOTSTRAP=/path/to/bootstrap.json | |
| $ ./build/install/example-xds/bin/xds-hello-world-client --xds-creds "xds world" xds:///yourServersName | |
| ``` | |
| In this case, if the xDS management server is configured to provide mTLS credentials (for example) to the client and | |
| server, then they will use these credentials to create an mTLS channel to authenticate and encrypt. |