We will be running the below deployment.yaml on minikube.
apiVersion: apps/v1 kind: Deployment metadata: name: helloweb labels: app: hello spec: selector: matchLabels: app: hello template: metadata: labels: app: hello spec: containers: - name: hello-app image: gcr.io/google-samples/hello-app:1.0 ports: - containerPort: 8080
Applied above deployment using below command:
$ kubectl apply -f deployment.yaml deployment.apps/helloweb created
Check the status using below command:
$ kubectl get all NAME READY STATUS RESTARTS AGE pod/helloweb-5dfb8764bf-9k7ss 1/1 Running 0 9s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 86d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/helloweb 1/1 1 1 9s NAME DESIRED CURRENT READY AGE replicaset.apps/helloweb-5dfb8764bf 1 1 1 9s
This will create helloweb application.
We will expose the above application using node port service. The node port service opens a port on node and maps it to node/cluster ip.
apiVersion: v1 kind: Service metadata: name: helloweb-svc labels: app: hello spec: type: NodePort ports: - port: 9080 targetPort: 8080 selector: app: hello
This maps the application target port 8080 to port 9080.
Create node port service using below command:
$ kubectl apply -f service-nodeport.yaml service/helloweb-svc created
Check the status using below command:
$ kubectl get all NAME READY STATUS RESTARTS AGE pod/helloweb-5dfb8764bf-9k7ss 1/1 Running 0 52s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/helloweb-svc NodePort 10.97.186.9 <none> 9080:31467/TCP 4s service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 87d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/helloweb 1/1 1 1 52s NAME DESIRED CURRENT READY AGE replicaset.apps/helloweb-5dfb8764bf 1 1 1 52s
The node port service maps the 9080 to 8080 using node port 31647.
We can see the application in browser by port forwarding to 7080 using below command:
$ kubectl port-forward service/helloweb-svc 7080:9080 Forwarding from 127.0.0.1:7080 -> 8080 Forwarding from [::1]:7080 -> 8080 Handling connection for 7080
You can also access using minikube service command:
$ minikube service helloweb-svc |-----------|--------------|-------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|--------------|-------------|---------------------------| | default | helloweb-svc | 9080 | http://192.168.49.2:31467 | |-----------|--------------|-------------|---------------------------| 🏃 Starting tunnel for service helloweb-svc. |-----------|--------------|-------------|------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|--------------|-------------|------------------------| | default | helloweb-svc | | http://127.0.0.1:56345 | |-----------|--------------|-------------|------------------------| 🎉 Opening service default/helloweb-svc in default browser... ❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it.
This will open browser and run the service.
Running it on GKE:
We can create a cluster using below command:
$ gcloud container clusters create hello-cluster --num-nodes=1 --zone "us-central1-c" --project "jovial-honor-327604"
Once the cluster is created open terminal and run below command:
$ gcloud container clusters get-credentials hello-cluster --zone "us-central1-c"
Create deployment and service using above steps. This will launch the service with External-IP you can use this node IP to access the service from the browser by opening the node port on the firewall.
$ kubectl get service helloweb-svc --output yaml
spec:
...
ports:
- nodePort: 30876 # external-ip; http://ip-1:30876; http://ip-2:30876 ....
port: 80 # cluster-ip:port; http://cluster-ip:80/
protocol: TCP
targetPort: 8080 # application port
selector:
using the NodePort from above to open firewall:
$ gcloud compute firewall-rules create test-node-port --allow tcp:NODE_PORT
Happy Coding !!!
No comments:
Post a Comment