1. A method comprising: receiving, using one or more data processing apparatuses, a plurality of different requests for an encryption key pair from a plurality of different virtual machines, wherein each virtual machine is a hardware virtualization; for each request, generating, using the one or more data processing apparatuses, a host key pair, the host key pair comprising an encryption key and a decryption key for encrypting and decrypting communications between a respective virtual machine that sent the request and a client device that is separate from the respective virtual machine; for each request, sending, using the one or more data processing apparatuses, the host key pair to a metadata server for the respective virtual machine that sent the request, wherein the metadata server is configured to exchange metadata with the respective virtual machine, and wherein each host key pair is sent to the respective virtual machine using a different metadata server for each host key pair; and providing, using the one or more data processing apparatuses, the encryption key of the host key pair to the client device upon a client request from the client device.