Create Ingress With IP Mode¶
You can use alb.ingress.kubernetes.io/target-type annotation in the Ingress object to specify how to route traffic to pods. You can choose between instance and ip.
The default value for alb.ingress.kubernetes.io/target-type is instance. So, you must define this explicitly if you want to use ip mode.
Docker Images¶
Here is the Docker Image used in this tutorial: reyanshkharga/nodeapp:v1
Note
reyanshkharga/nodeapp:v1 runs on port 5000 and has the following routes:
GET /Returns host info and app versionGET /healthReturns health status of the appGET /randomReturns a randomly generated number between 1 and 10
Step 1: Create a Deployment¶
First, let's create a deployment as follows:
Apply the manifest to create the deployment:
Verify deployment and pods:
Step 2: Create a Service¶
The kubernetes service can be NodePort or ClusterIP to use ip mode. So, let's create a ClusterIP service since it is more secure:
Apply the manifest to create the service:
Verify service:
Step 3: Create Ingress¶
Now that we have the service ready, let's create an Ingress object:
Observe the following:
- We have used annotations to specify load balancer and target group attributes
- We have one rule that matches
/path and then routes traffic tomy-service
Apply the manifest to create ingress:
Verify ingress:
Step 4: Verify AWS Resources in AWS Console¶
Visit the AWS console and verify the resources created by AWS Load Balancer Controller.
Pay close attention to the Listeners, Rules and TargetGroups.
You will observe that in the Target Group, IPs are registered as targets because we chose ip as target type. These IPs are associated with pods that my-service is configured to serve the traffic from.
Also, verify that the ALB was created by AWS Load Balancer Controller. You can check the events in the logs as follows:
kubectl logs -f deploy/aws-load-balancer-controller -n aws-load-balancer-controller --all-containers=true
Step 5: Access App Via Load Balancer DNS¶
Once the load balancer is in Active state, you can hit the load balancer DNS and verify if everything is working properly.
Access the load balancer DNS by entering it in your browser. You can obtain the load balancer DNS either from the AWS console or the Ingress configuration.
Try accessing the following paths:
# Root path
<load-balancer-dns>/
# Health path
<load-balancer-dns>/health
# Random generator path
<load-balancer-dns>/random
Troubleshooting¶
If you don't see the load balancer in the AWS console, this means the ingress has some issue. To identify the underlying issue, you can examine the logs of the controller as follows:
# Describe the ingress
kubectl describe ing my-ingress
# View aws load balancer controller logs
kubectl logs -f deploy/aws-load-balancer-controller -n aws-load-balancer-controller --all-containers=true
Clean Up¶
Assuming your folder structure looks like the one below:
Let's delete all the resources we created: