The reason you cannot use Cloud Shell web preview to connect to JupyterLab is that web preview connects to your Cloud Shell VM instance, while JupyterLab is running on myvm (a separate instance) that you created with gcloud compute instances create
However, you can use ssh tunneling within Cloud Shell, much like you propose in your own answer and then use Cloud Shell web preview.
For instance, I am able to successfully connect to JupyterLab using web preview if I execute the following within Cloud Shell after setting up the environment variables and creating the instance:
export IMAGE_FAMILY="tf-latest-cu92"
export ZONE="us-central1-f"
export INSTANCE_NAME="myvm"
gcloud compute instances create ...
gcloud compute ssh $INSTANCE_NAME --zone=$ZONE -- -L 8080:localhost:8080
UPDATE: As pointed out in the comments, the above is not sufficient to get JupyterLab (as configured in the Deep Learning Image) to work with Cloud Shell; we also need to configure JupyterLab to allow cross-origin requests. Since we are tunneling through ssh, it's also a good practice to restrict JupyterLab connections to localhost (for security reasons). To achieve this, run the following commands on myvm (e.g., after setting up the tunnel above):
myvm$ sudo sed -i \
-e "s/\(c.NotebookApp.ip\).*/\1 = 'localhost'/g; \
s/\(c.NotebookApp.allow_origin\).*/\1 = '*'/g" \
/root/.jupyter/jupyter_notebook_config.py
myvm$ sudo pkill jupyter-lab # restart to pick up config