На локальному кластері, створеному за допомогою Kubeadm
Чому Ingress необхідний у Kubernetes?
Ingress є ключовим компонентом у Kubernetes, який надає маршрутизацію HTTP та HTTPS до сервісів на основі правил, визначених користувачем.
Ingress може забезпечити балансування навантаження, завершення SSL з'єднань та віртуальний хостинг за іменем.
У цьому блозі я продемонструю, як налаштувати Ingress, що базується на хостах і шляху, найпростішим способом, встановивши контролер Ingress на кластері Nginx. Для рішення LoadBalancer ми будемо використовувати metallb, оскільки кластер створений локально за допомогою kubeadm з 3 віртуальними машинами.
Загальні типи Ingress, які ми використовуємо в Kubernetes
1. Ingress для одного сервісу:
Ingress із вказівкою стандартного бекенду без правил.
2. Ingress для віртуального хостингу на основі імені:
Підтримує маршрутизацію HTTP трафіку до кількох імен хостів на тій самій IP-адресі.
3.
На локальному кластері, створеному за допомогою Kubeadm
Чому Ingress потрібен у Kubernetes?
Ingress є ключовим компонентом у Kubernetes, який надає маршрутизацію HTTP та HTTPS до сервісів на основі правил, визначених користувачем.
Ingress може забезпечити балансування навантаження, завершення SSL з'єднань та віртуальний хостинг за іменем.
У цьому блозі я продемонструю, як налаштувати Ingress, що базується на хостах і шляху, найпростішим способом, встановивши контролер Ingress на кластері Nginx. Для рішення LoadBalancer ми будемо використовувати metallb, оскільки кластер створений локально за допомогою kubeadm з 3 віртуальними машинами.
Загальні типи Ingress, які ми використовуємо в Kubernetes
1. Простий Fanout / Ingress, що базується на шляху:
Маршрутизуйте трафік з однієї IP-адреси до кількох сервісів на основі URI HTTP.
Правило Ingress
Попередні вимоги
Можливо, вам доведеться розгорнути контролер Ingress, наприклад, ingress-nginx.
Створення простору імен
kubectl create namespace ingress-nginx
Встановлення Nginx Ingress
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
Виведення
Перевірка перед запуском
kubectl get pods -n ingress-nginx
Переконайтеся, що pod контролера Ingress працює, готовий та запущений.
Виведення
Список сервісів
kubectl get svc --namespace=ingress-nginx
Виведення
LoadBalancer знаходиться в стані очікування, оскільки це локальний кластер, а не хмарний, або не встановлено хмарний контролер.
Рішення LoadBalancer ??? для кластера, створеного за допомогою kubeadm😀
metallb
Але ми маємо рішення для створення LoadBalancer у локальному кластері за допомогою metallb
Встановлення metallb
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.3/config/manifests/metallb-native.yaml
Список pod'ів
kubectl get pods -n metallb-system
Виведення
Визначення IP-адрес для призначення сервісам LoadBalancer
vi ip-pool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: cheap
namespace: metallb-system
spec:
addresses:
- 192.168.10.0/24
Застосування пулу IP-адрес
kubectl apply -f ip-pool.yaml
Перевірка статусу IP-адреси сервісу Ingress для LoadBalancer
kubectl get svc -n ingress-nginx
Виведення
IP-адресу було призначено за допомогою metallb.
Одноразовий Ingress — Демонстрація
Розгорнімо тестовий додаток.
- Створіть деплоймент
vi kubewebserver.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubewebserver
labels:
app: kubewebserver
spec:
replicas: 1
selector:
matchLabels:
app: kubewebserver
template:
metadata:
labels:
app: kubewebserver
spec:
containers:
- name: kubewebserver
image: nginx:alpine
ports:
- containerPort: 80
- Застосуйте деплоймент
kubectl apply -f kubewebserver.yaml
- Створіть сервіс
vi kubewebserver-service.yaml
apiVersion: v1
kind: Service
metadata:
name: kubewebserver-service
labels:
app: kubewebserver-service
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: kubewebserver
- Застосуйте сервіс
kubectl apply -f kubewebserver-service.yaml
Для отримання класу Ingress
Спочатку отримайте клас Ingress, який потрібно визначити у файлі YAML для Ingress
kubectl get ingressClass -A
Створення мінімального Ingress без хосту
vi minimal-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubewebserver-service
port:
number: 80
- Застосуйте Ingress
kubectl apply -f minimal-ingress.yaml
- Список Ingress
kubectl get ingress
Виведення
Перевірка
curl 192.168.10.0
Виведення
Створення Ingress з хостом
vi ingress-with-host.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-with-host
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: app1.kubelancer.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubewebserver-service
port:
number: 80
- Застосуйте Ingress
kubectl apply -f ingress-with-host.yaml
- Отримайте список Ingress
kubectl get ingress
Виведення
Перевірка
Спробуйте за допомогою IP-адреси
curl 192.168.10.0
Використання IP-адреси викликає помилку
Використовуйте ім’я хоста
curl --resolve app1.kubelancer.com:80:192.168.10.0 http://app1.kubelancer.com:80
Виведення
Сервіс
Перекладено з: Ingress on Local Kubernetes Cluster