ingress-nginx-helm/docs/user-guide/basic-usage.md

94 lines
3.1 KiB
Markdown
Raw Normal View History

2018-12-21 10:40:45 +00:00
# Basic usage - host based routing
2019-09-02 21:29:37 +00:00
ingress-nginx can be used for many use cases, inside various cloud provider and supports a lot of configurations. In this section you can find a common usage scenario where a single load balancer powered by ingress-nginx will route traffic to 2 different HTTP backend services based on the host name.
2018-12-21 10:40:45 +00:00
First of all follow the instructions to install ingress-nginx. Then imagine that you need to expose 2 HTTP services already installed, `myServiceA`, `myServiceB`, and configured as `type: ClusterIP`.
Let's say that you want to expose the first at `myServiceA.foo.org` and the second at `myServiceB.foo.org`.
If cluster version < 1.19 you can create two **ingress** resources like this:
2018-12-21 10:40:45 +00:00
```
apiVersion: networking.k8s.io/v1beta1
2018-12-21 10:40:45 +00:00
kind: Ingress
metadata:
name: ingress-myservicea
2018-12-21 10:40:45 +00:00
spec:
ingressClassName: nginx
2018-12-21 10:40:45 +00:00
rules:
- host: myservicea.foo.org
2018-12-21 10:40:45 +00:00
http:
paths:
- path: /
backend:
serviceName: myservicea
servicePort: 80
2018-12-21 10:40:45 +00:00
---
apiVersion: networking.k8s.io/v1beta1
2018-12-21 10:40:45 +00:00
kind: Ingress
metadata:
name: ingress-myserviceb
2018-12-21 10:40:45 +00:00
annotations:
# use the shared ingress-nginx
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: myserviceb.foo.org
2018-12-21 10:40:45 +00:00
http:
paths:
- path: /
backend:
serviceName: myserviceb
servicePort: 80
2018-12-21 10:40:45 +00:00
```
If the cluster uses Kubernetes version >= 1.19.x, then its suggested to create 2 ingress resources, using yaml examples shown below. These examples are in conformity with the `networking.kubernetes.io/v1` api.
2018-12-21 10:40:45 +00:00
```
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myservicea
spec:
rules:
- host: myservicea.foo.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myservicea
port:
number: 80
ingressClassName: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myserviceb
spec:
rules:
- host: myserviceb.foo.org
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myserviceb
port:
number: 80
ingressClassName: nginx
```
When you apply this yaml, 2 ingress resources will be created managed by the **ingress-nginx** instance. Nginx is configured to automatically discover all ingress with the `kubernetes.io/ingress.class: "nginx"` annotation or where `ingressClassName: nginx` is present.
Please note that the ingress resource should be placed inside the same namespace of the backend resource.
On many cloud providers ingress-nginx will also create the corresponding Load Balancer resource. All you have to do is get the external IP and add a DNS `A record` inside your DNS provider that point myservicea.foo.org and myserviceb.foo.org to the nginx external IP. Get the external IP by running:
2018-12-21 10:40:45 +00:00
```
kubectl get services -n ingress-nginx
```
To test inside minikube refer to this documentation: [Set up Ingress on Minikube with the NGINX Ingress Controller](https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/)