[GSP269] Deploy a Web App on GKE with HTTPS Redirect using Lets Encrypt
Делаю:
31.05.2019
https://www.qwiklabs.com/focuses/2771?parent=catalog
$ wget https://storage.googleapis.com/vwebb-codelabs/gke-tls-qwik/gke-tls-lab.tar.gz
$ tar zxfv gke-tls-lab.tar.gz
$ cd gke-tls-lab
Configure Cloud Endpoints
$ gcloud compute addresses create endpoints-ip --region us-central1
$ gcloud compute addresses list
endpoints-ip 34.66.27.77
$ export PROJECT_ID=$(gcloud config get-value project)
$ export ENDPOINTS_IP=34.66.27.77
$ sed -i "s/\[MY-PROJECT\]/$PROJECT_ID/g" ./openapi.yaml
$ sed -i "s/\[MY-STATIC-IP\]/$ENDPOINTS_IP/g" ./openapi.yaml
// Deploy to Cloud Endpoints:
$ gcloud endpoints services deploy openapi.yaml
Create a Kubernetes Engine Cluster
$ gcloud container clusters create cl-cluster --zone us-central1-f
$ gcloud container clusters get-credentials cl-cluster --zone us-central1-f
Set up Role-Based Access Control
To be able to deploy to the cluster, you need the proper permissions.
$ kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user $(gcloud config get-value account)
Install Helm
$ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > get_helm.sh
$ chmod 700 get_helm.sh
$ ./get_helm.sh
$ kubectl create serviceaccount -n kube-system tiller
$ kubectl create clusterrolebinding tiller-binding \
--clusterrole=cluster-admin \
--serviceaccount kube-system:tiller
$ helm init --service-account tiller
$ helm repo update
Install NGINX Ingress
You will deploy an NGINX ingress using Helm to handle our HTTP to HTTPS redirect when configure our web app for HTTPS to ensure the user always has a secure connection to our app.
$ helm install stable/nginx-ingress --set controller.service.loadBalancerIP=${ENDPOINTS_IP},rbac.create=true
Deploy “Hello World” App
$ sed -i "s/\[MY-PROJECT\]/$PROJECT_ID/g" ./configmap.yaml
$ sed -i "s/\[MY-PROJECT\]/$PROJECT_ID/g" ./ingress.yaml
Deploy web app to cluster
$ kubectl apply -f configmap.yaml
$ kubectl apply -f deployment.yaml
$ kubectl apply -f service.yaml
$ kubectl apply -f ingress.yaml
$ echo http://api.endpoints.${PROJECT_ID}.cloud.goog
Set Up HTTPS
$ helm install --name cert-manager --version v0.3.2 --namespace kube-system stable/cert-manager
$ export [email protected]
$ cat letsencrypt-issuer.yaml | sed -e "s/email: ''/email: $EMAIL/g" | kubectl apply -f-
Reconfigure ingress for HTTPS
$ sed -i "s/\[MY-PROJECT\]/$PROJECT_ID/g" ./ingress-tls.yaml
$ kubectl apply -f ingress-tls.yaml
$ kubectl describe ingress esp-ingress
$ echo http://api.endpoints.${PROJECT_ID}.cloud.goog
Note: It might take 5-10 minutes for the ingress to be properly provisioned.