Using Ingress we can easily expose services by DNS Provided urls.
Is Ingress capable of doing Load Balancing?
Yes
Is Ingress capable of exposing both http and https routes?
Yes
To use Ingress, you need to install the Ingress controller. There are many ingress controllers available. Some of them given below.
a. Ingress-nginx
b. Traefik
c. Contour
d. Haproxy
How to enable Ingress addon in minikube?
Execute below command
minikube addon enable ingress
Let’s develop an application using ingress.
Step 1: Enable ingress controller.
Get all the available addons by executing the below command.
minikube addons list
$minikube addons list
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| dashboard | minikube | enabled ✅ |
| default-storageclass | minikube | enabled ✅ |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gvisor | minikube | disabled |
| helm-tiller | minikube | disabled |
| ingress | minikube | disabled |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled |
| istio-provisioner | minikube | disabled |
| logviewer | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled |
| nvidia-gpu-device-plugin | minikube | disabled |
| registry | minikube | disabled |
| registry-aliases | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ✅ |
| storage-provisioner-gluster | minikube | disabled |
Let’s enable ingress addon by executing the below command.
minikube addons enable ingress
$minikube addons enable ingress
🌟 The 'ingress' addon is enabled
Step 2: Create a deployment.
empService.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: employee-service-deployment
labels:
app: employee-service-deployment
author: krishna
serviceType: webservice
spec:
template:
metadata:
name: employee-service
labels:
app: employee-service
author: krishna
serviceType: webservice
spec:
containers:
- name: employee-service-container
image: jboss/wildfly
replicas: 1
selector:
matchLabels:
app: employee-service
Create deployment by executing the below command.
kubectl create -f empService.yml
$kubectl create -f empService.yml
deployment.apps/employee-service-deployment created
$kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
employee-service-deployment 1/1 1 1 2m33s
Step 3: let's expose the service to this deployment by executing the below command.
kubectl expose deployment employee-service-deployment --type=NodePort --port=8080
$kubectl expose deployment employee-service-deployment --type=NodePort --port=8080
service/employee-service-deployment exposed
Query services.
$kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
employee-service-deployment NodePort 10.99.151.96 <none> 8080:30497/TCP 22s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 31d
Now the service is exposed on minikube cluster port 30497.
Let’s run the command 'minikube ip' to retrieve the IP address of the running cluster.
$minikube ip
192.168.99.100
Open the url ‘http://192.168.99.100:30497/’ in browser, you will see Wildfly server home page.
Step 4: Update /etc/hosts file by adding below setting.
192.168.99.100 empservice.example.com
Once you update /etc/hosts file, you can able to access the Wildfly server using the DNS name ‘empservice.example.com’.
Open below url in brower.
http://empservice.example.com:30497/
You will see Wildfly server home page.
Step 5: Lets create ingress object.
ingressDemo.yml
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: emp-service-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: empservice.example.com http: paths: - path: /emp-service pathType: Prefix backend: serviceName: employee-service-deployment servicePort: 8080
Create an ingress object by executing the below command.
kubectl create -f ingressDemo.yml
$kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
emp-service-ingress <none> empservice.example.com 192.168.99.100 80 42s
$kubectl create -f ingressDemo.yml
ingress.networking.k8s.io/emp-service-ingress created
Query ingress objects.
$kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
emp-service-ingress <none> empservice.example.com 192.168.99.100 80 2m47s
As you ingressDemo.yml file, I configured Path with the string ‘/emp-service’.
Let’s do a curl request on the path ‘http://empservice.example.com/emp-service’.
$curl http://empservice.example.com/emp-service
<!DOCTYPE html>
<html>
<head>
<!-- proper charset -->
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
<title>Welcome to WildFly</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="StyleSheet" href="wildfly.css" type="text/css">
</head>
<body>
<div class="wrapper">
<div class="content">
<div class="logo">
<img src="wildfly_logo.png" alt="WildFly" border="0" />
</div>
<h1>Welcome to WildFly</h1>
<h3>Your WildFly instance is running.</h3>
<p><a href="https://docs.wildfly.org">Documentation</a> | <a href="https://github.com/wildfly/quickstart">Quickstarts</a> | <a href="/console">Administration
Console</a> </p>
<p><a href="https://wildfly.org">WildFly Project</a> |
<a href="https://community.jboss.org/en/wildfly">User Forum</a> |
<a href="https://issues.jboss.org/browse/WFLY">Report an issue</a></p>
<p class="logos"><a href="https://www.jboss.org"><img src="jbosscommunity_logo_hori_white.png" alt="JBoss and JBoss Community" width=
"195" height="37" border="0"></a></p>
<p class="note">To replace this page simply deploy your own war with / as its context path.<br />
To disable it, remove the "welcome-content" handler for location / in the undertow subsystem.</p>
</div>
</div>
</body>
</html>
You can even open the url ‘http://empservice.example.com/emp-service’ in web browser to see wildfly server homepage.
Let’s cleanup by deleting deployment, service and ingress.
$kubectl delete deployment employee-service-deployment
deployment.apps "employee-service-deployment" deleted
$
$kubectl delete service employee-service-deployment
service "employee-service-deployment" deleted
$
$kubectl delete ingress emp-service-ingress
ingress.extensions "emp-service-ingress" deleted
No comments:
Post a Comment