Чтобы не запутаться в терминологии, нужно разграничить два определения.
- Ingress — сущность/объект кластера Kubernetes, где создается описание конфигурации самого Ingress Сontroller.
- Ingress Controller — обрабатывает трафик. Его конфигурация формируется из всех Ingress внутри одного кластера.
Вместе Ingress и Ingress-контроллер создают единую точку входа для трафика и выполняют одновременно роль прокси и балансировщика нагрузки.
#-------------------ingress-hosts.yaml--------------------------------
# Manifest File to create Ingess Rules for Hosts
#---------------------------------------------------------------------
apiVersion: networking.k8s.io/v1beta1 #Зависит от версии K8s
kind: Ingress
metadata:
name: ingress-hosts
spec:
rules:
- host: www.devopz.tech.net
http:
paths:
- backend:
serviceName: main
servicePort: 80
- host: web1.devopz.tech.net
http:
paths:
- backend:
serviceName: web1
servicePort: 80
- host: web2.devopz.tech.net
http:
paths:
- backend:
serviceName: web2
servicePort: 80
- host: cat.devopz.tech.net
http:
paths:
- backend:
serviceName: tomcat
servicePort: 8080
#-------------------ingress-paths.yaml--------------------------------
# Manifest File to create Ingess Rules for Host Paths
#---------------------------------------------------------------------
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-paths
spec:
rules:
- host: www.devopz.tech.net
http:
paths:
- path: "/page1"
backend:
serviceName: webx
servicePort: 80
- path: "/page2"
backend:
serviceName: webx
servicePort: 80
- path: "/page3"
backend:
serviceName: webx
servicePort: 80
### Install Ingress Controller: Contour
kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
kubectl get services -n projectcontour envoy -o wide
Get LoadBalancer IP or DNS Name and assign Your Domain to this DNS name
# Create Deployments
kubectl create deployment main --image=nginx:latest
kubectl create deployment web1 --image=nginx:version1
kubectl create deployment web2 --image=nginx:version2
kubectl create deployment webx --image=nginx:versionx
kubectl create deployment tomcat --image=tomcat:8.5.38
# Scale Deployments
kubectl scale deployment main --replicas 2
kubectl scale deployment web1 --replicas 2
kubectl scale deployment web2 --replicas 2
kubectl scale deployment webx --replicas 2
# Create Services, default type is: --type=ClusterIP
kubectl expose deployment main --port 80
kubectl expose deployment web1 --port 80
kubectl expose deployment web2 --port 80
kubectl expose deployment webx --port 80
kubectl expose deployment tomcat --port 8080
kubectl get services -o wide
kubectl apply -f ingress-hosts.yaml
kubectl apply -f ingress-paths.yaml
kubectl get ingress
kubectl describe ingress
# Completely delete Ingress Controller: Contour
kubectl delete ns projectcontour