Exposing App through NodePort

Deploy app

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
deployment.apps "kubernetes-bootcamp" created

kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            0           8s

kubectl get pods
NAME                                   READY     STATUS    RESTARTS   AGE
kubernetes-bootcamp-5c69669756-gtrcd   1/1       Running   0          28s

Expose app

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service "kubernetes-bootcamp" exposed

The option –type=NodePort specifies a type of the service. Now, we need to get the exposed port

kubectl describe services/kubernetes-bootcamp
...
NodePort:                 <unset>  30022/TCP
...

Test that the app is exposed outside of the cluster

curl icanhazip.com
159.89.165.6

curl 159.89.165.6:30022
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-gtrcd | v=1

The Service is exposed

Scale app

kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.extensions "kubernetes-bootcamp" scaled

kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4         4         4            4           4m

kubectl get pods -o wide
NAME                                   READY     STATUS    RESTARTS   AGE       IP          NODE
kubernetes-bootcamp-5c69669756-4fgc2   1/1       Running   0          20s       10.42.3.6   k8s-01
kubernetes-bootcamp-5c69669756-gtrcd   1/1       Running   0          4m        10.42.0.2   k8s-04
kubernetes-bootcamp-5c69669756-kdvkb   1/1       Running   0          20s       10.42.1.2   k8s-03
kubernetes-bootcamp-5c69669756-qxmvw   1/1       Running   0          20s       10.42.4.2   k8s-02

There are 4 Pods now, with different IP addresses

curl 159.89.165.6:30022
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-kdvkb | v=1

curl 159.89.165.6:30022
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-4fgc2 | v=1

curl 159.89.165.6:30022
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-qxmvw | v=1

curl 159.89.165.6:30022
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-gtrcd | v=1

We hit a different Pod with every request. This demonstrates that the load-balancing is working

Custom NodePort Port

kubectl delete svc kubernetes-bootcamp
service "kubernetes-bootcamp" deleted

cat << EOF > custom_node_port.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    run: kubernetes-bootcamp
  name: kubernetes-bootcamp
  selfLink: /api/v1/namespaces/default/services/kubernetes-bootcamp
spec:
  externalTrafficPolicy: Cluster
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    nodePort: 30080
  selector:
    run: kubernetes-bootcamp
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
EOF

kubectl create -f custom_node_port.yaml
service "kubernetes-bootcamp" created

kubectl describe services/kubernetes-bootcamp
...
NodePort:                 <unset>  30080/TCP
...
curl icanhazip.com
13.127.135.16

curl 13.127.135.16:30080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-f7v5v | v=1

curl 13.127.135.16:30080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-gj4sl | v=1

curl 13.127.135.16:30080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-mcdr7 | v=1

curl 13.127.135.16:30080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5dbf48f7d4-mqltq | v=1

results matching ""

    No results matching ""