F5 Solutions for Containers > Class 1: Kubernetes with F5 Container Ingress Service > Module 1: CIS Using NodePort Mode Source | Edit on
Lab 1.2 - Deploy Hello-World Using Ingress¶
Now that CIS is up and running, let’s deploy an application and leverage CIS.
For this lab we’ll use a simple pre-configured docker image called “f5-hello-world”. It can be found on docker hub at f5devcentral/f5-hello-world
To deploy our application, we will need the following definitions:
Define the Deployment resource: this will launch our application running in a container.
Define the Service resource: this is an abstraction which defines a logical set of pods and a policy by which to access them. Expose the service on a port on each node of the cluster (the same port on each node). You’ll be able to contact the service on any <NodeIP>:NodePort address. When you set the type field to “NodePort”, the master will allocate a port from a flag-configured range (default: 30000-32767), and each Node will proxy that port (the same port number on every Node) for your Service.
Define the Ingress resource: this is used to add the necesary annotations to define the virtual server settings.
See also
App Deployment¶
Back to the terminal and SSH session on kube-master1 we will create all the required files and launch them.
Create a file called
deployment-hello-world.yaml
Tip
Use the file in ~/agilitydocs/docs/class1/kubernetes
deployment-hello-world.yaml¶1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
apiVersion: apps/v1 kind: Deployment metadata: name: f5-hello-world-web namespace: default spec: replicas: 2 selector: matchLabels: app: f5-hello-world-web template: metadata: labels: app: f5-hello-world-web spec: containers: - env: - name: service_name value: f5-hello-world-web image: f5devcentral/f5-hello-world:latest imagePullPolicy: IfNotPresent name: f5-hello-world-web ports: - containerPort: 8080 protocol: TCP
Create a file called
nodeport-service-hello-world.yaml
Tip
Use the file in ~/agilitydocs/docs/class1/kubernetes
nodeport-service-hello-world.yaml¶1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
apiVersion: v1 kind: Service metadata: name: f5-hello-world-web namespace: default labels: app: f5-hello-world-web cis.f5.com/as3-tenant: AS3 cis.f5.com/as3-app: A1 cis.f5.com/as3-pool: web_pool spec: ports: - name: f5-hello-world-web port: 8080 protocol: TCP targetPort: 8080 type: NodePort selector: app: f5-hello-world-web
Create a file called
ingress-hello-world.yaml
Tip
Use the file in ~/agilitydocs/docs/class1/kubernetes
ingress-hello-world.yaml¶1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: f5-hello-world-web namespace: default annotations: virtual-server.f5.com/partition: "kubernetes" virtual-server.f5.com/ip: 10.1.1.4 virtual-server.f5.com/http-port: "80" virtual-server.f5.com/ssl-redirect: "false" virtual-server.f5.com/balance: "round-robin" virtual-server.f5.com/health: | [ { "path": "f5.hello.world/", "send": "HTTP GET /", "interval": 5, "timeout": 10 } ] spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: f5-hello-world-web port: number: 8080
We can now launch our application:
kubectl create -f deployment-hello-world.yaml kubectl create -f nodeport-service-hello-world.yaml kubectl create -f ingress-hello-world.yaml
To check the status of our deployment, you can run the following commands:
Note
This can take a few seconds to a minute to create these hello-world containers to running state.
kubectl get pods -o wide
kubectl describe svc f5-hello-world
Attention
To understand and test the new app pay attention to the NodePort value, that’s the port used to give you access to the app from the outside. In this example it’s “32722”, highlighted above.
Now that we have deployed our application sucessfully, we can check the configuration on bigip1. Switch back to the open management session on firefox.
Warning
Don’t forget to select the “kubernetes” partition or you’ll see nothing.
GoTo:
Here you can see a new Virtual Server, “ingress_10.1.1.4_80” was created, listening on 10.1.1.4:80 in partition “kubernetes”.
Check the Pools to see a new pool and the associated pool members.
GoTo:
and select the “ingress_default_f5-hello-world-web” pool. Click the Members tab.Note
You can see that the pool members listed are all the cluster node IPs on port 32722. (NodePort mode)
Access your web application via firefox on the jumpbox.
Note
Open a new tab and select the “Hello, World” shortcut or type http://10.1.1.4 in the URL field.
To check traffic distribution, hit Refresh many times on your open browser session. Then go back to the management console open on firefox.
GoTo:
Note
Are you seeing traffic distribution as shown in the image above? If not why? (HINT: Check the virtual server settings.)
Delete Hello-World
Important
Do not skip this step. Instead of reusing some of these objects, the next lab we will re-deploy them to avoid conflicts and errors.
kubectl delete -f ingress-hello-world.yaml kubectl delete -f nodeport-service-hello-world.yaml kubectl delete -f deployment-hello-world.yaml
Attention
Validate the objects are removed via the management console.