With vSphere IaaS control plane, you can run confidential vSphere Pods on a Supervisor. A confidential vSphere Pod uses a hardware technology that keeps the guest OS memory encrypted, protecting it against access from the hypervisor.
You can create confidential
vSphere Pods by adding Secure Encrypted Virtualization-Encrypted State (SEV-ES) as an extra security enhancement. SEV-ES prevents CPU registers from leaking information in registers to components like the hypervisor. SEV-ES can also detect malicious modifications to a CPU register state. For more information about using SEV-ES technology in the vSphere environment, see
Securing Virtual Machines with AMD Secure Encrypted Virtualization-Encrypted State in the
vSphere Security documentation.
Prerequisites
To enable SEV-ES on an
ESXi host, a vSphere administrator must follow these guidelines:
- Use the hosts that support the SEV-ES functionality.
- Use the ESXi version of 7.0 Update 2 or later.
- Enable SEV-ES in an ESXi system's BIOS configuration. See your system's documentation for more information about accessing the BIOS configuration.
- When enabling SEV-ES in the BIOS, enter a value for the Minimum SEV non-ES ASID setting equal the number of SEV-ES VMs and confidential vSphere Pods on the host plus one. For example, if you plan to run 100 SEV-ES VMs and 128 vSphere Pods, enter at least 229. You can enter a setting as high as 500.
Procedure
- Create a YAML file that contains the following parameters.
- In annotations, enable the confidential vSphere Pods feature.
...
annotations:
vmware/confidential-pod: enabled
...
- Specify memory resources for containers.
Make sure to set memory requests and memory limits to the same value, as in this example.
resources:
requests:
memory: "512Mi"
limits:
memory: "512Mi"
Use the following YAML file as an example:
apiVersion: v1
kind: Pod
metadata:
name: photon-pod
namespace: my-podvm-ns
annotations:
vmware/confidential-pod: enabled
spec: # specification of the pod's contents
restartPolicy: Never
containers:
- name: photon
image: wcp-docker-ci.artifactory.eng.vmware.com/vmware/photon:1.0
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello, world!; sleep 1; done"]
resources:
requests:
memory: "512Mi"
limits:
memory: "512Mi"
- Log in to the Supervisor.
kubectl vsphere login --server=https://<server_adress> --vsphere-username <your user account name>
- Switch to the namespace where you want to deploy the application.
kubectl config use-context <namespace>
- Deploy a confidential vSphere Pod from the YAML file.
kubectl apply -f <yaml file name>.yaml
Note: When the
vSphere Pod is deployed, DRS places it to the
ESXi node that supports SEV-ES. If no such node is available, the
vSphere Pod is marked as failed.
The confidential vSphere Pod that is launched provides hardware memory encryption support for all workloads that are running on that pod.
- Run the following command to verify that the confidential vSphere Pod has been created.
kubectl describe pod/<yaml name>
What to do next
A vSphere administrator can view the confidential
vSphere Pod. In the
vSphere Client, it appears with the
Encryption Mode: Confidential Compute tag.