TLS basic working model:
Secure communication between the two entities is paramount in today's digital world. TLS provides the secure end to end communication between two machines over a network.
Classic example of TLS model is accessing www.google.com(server) via browser(client). Following basic steps are involved
* Client makes a call, when URL was entered in browser
* Server sends its certificate
* Browser will check any Root CA present for server certificate, if its present it will validate via digital sign. If not it asks user to trust the certificate, happens when we use self signed certificates.
* Client sends its certificates, will be verified at server, its optional
* Once verification is done, it starts exchanging encrypting messages, which will be only decrypted using certs and keys at their end.
Generating TLS certs:
There are many tools in market through which we can generate certs. Openssl is one of the widely used opensource tool, we will use this to generate CA(self-signed) and TLS certs.
Plain TLS certs:
* openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out tls.crt -keyout tls.key
While executing the command, it asks for few details and make sure you have provided proper Common Name(CN), through which we will access our sample application. Outcome would be tls.crt and tls.key cert files.
* Lets create kubernetes secret of TLS type using cert files
kubectl create secret tls nginx-tls-secret --key tls.key --cert tls.crt -n default
* Run nginx sample application and expose it via service using kubectl command line
kubectl run nginx --image=nginx --port=80
kubectl expose deploy/nginx
* Assuming ingress controller is already running in kubernetes cluster, lets create ingress route for nginx application (Modify ingress class annotation according to the cluster ingress type). Copy the following content into a file and run kubectl apply -f filename.yaml
* If DNS record is not registered, make an /etc/hosts entry with hostname provided in ingress map to node ip address where ingress controller is running. Since we are going with self signed certs, certificate must be accepted while accessing the application.
Now application runs in kubernetes cluster with TLS certs via HTTPS (https://nginx.testdomain.com)
Comments
Post a Comment