Mapping the Internal Nodes to External URLs
Hostmapping is an advanced configuration topic. Generally, it is only required in deployments in virtualized environments, such as Cloud deployments and some development and testing environments.
The isolation of the cluster is accomplished through virtualization that will hide the internal networking details (such as IP addresses and/or hostnames) from the outside world, while exposing other IP addresses and/or hostnames for use by clients accessing the cluster from outside of the virtualized environment. The exposed IP addresses and hostnames are available for use in the topology descriptor service definitions. This configuration works great for requests that are initiated from the external clients themselves which only ever use the Knox Gateway exposed endpoints.
Difficulties from these virtualized environments arise when the cluster redirects client requests to other nodes within the cluster and indicates the internal hostname locations, rather than those designated to be exposed externally. Since the services don't know or care whether a request is coming from an external or internal client, it uses its only view of the cluster, which is the internal details of the virtualized environment.
The Knox Gateway needs to know how to route a request that has been redirected by the service to an address that is not actually accessible by the gateway. Hostmapping acts as an adapter that intercepts the redirects from the service and converts the indicated internal address to a known external address that Knox will be able to route to once the client resends the request through the client facing gateway endpoint. The gateway uses the hostmap to replace the internal hostname within the routing policy for the particular request with the externally exposed hostname. This enables the dispatching from the Knox Gateway to successfully connect to the service within the virtualized environment. Otherwise, attempting to route to an internal-only address will result in connection failures.
A number of the REST API operations require multi-step interactions that facilitate the client's interaction with multiple nodes within a distributed system. External clients performing multi-step operations use the URL provided by the gateway in the responses to form the next request. Since the routing policy is hidden by the gateway from the external clients, the fact that the subsequent requests in the multi-stepped interaction are mapped to the appropriate externally exposed endpoints is not exposed to the client.
For example, when uploading a file with WebHDFS service:
- The external client sends a request to the gateway WebHDFS service.
- The gateway proxies the request to WebHDFS using the service URL.
- WebHDFS determines which DataNodes to create the file on and returns the path for the upload as a Location header in a HTTP redirect, which contains the datanode host information.
- The gateway augments the routing policy based on the datanode hostname in the redirect by mapping it to the externally resolvable hostname.
- The external client continues to upload the file through the gateway.
- The gateway proxies the request to the datanode by using the augmented routing policy.
- The datanode returns the status of the upload and the gateway again translates the information without exposing any internal cluster details.