Ingress
Об'єкт API, який керує зовнішнім доступом до сервісів у кластері, зазвичай через HTTP.
Ingress може забезпечити балансування навантаження, термінацію SSL та хостинг за іменем.
Типи Ingress
1. Ingress для одного сервісу:
Ingress, вказуючи стандартний бекенд без правил
2. Ingress з хостингом за іменем:
Підтримує маршрутизацію HTTP трафіку до кількох імен хостів на одній IP-адресі
3. Простий Fanout / Path Based ingress:
Маршрутизує трафік з однієї IP-адреси до кількох сервісів, залежно від HTTP URI.
Правило Ingress
Правила, визначені об'єктом Ingress
Передумови
Вам потрібно мати Ingress controller, щоб задовольнити Ingress.
Ingress
Об'єкт API, який керує зовнішнім доступом до сервісів у кластері, зазвичай через HTTP.
Ingress може забезпечити балансування навантаження, термінацію SSL та хостинг за іменем.
Типи Ingress
1. Ingress для одного сервісу:
Ingress, вказуючи стандартний бекенд без правил
2. Ingress з хостингом за іменем:
Підтримує маршрутизацію HTTP трафіку до кількох імен хостів на одній IP-адресі
3. Простий Fanout / Path Based ingress:
Маршрутизує трафік з однієї IP-адреси до кількох сервісів, залежно від HTTP URI.
Правило Ingress
Правила, визначені об'єктом Ingress
Передумови
Вам потрібно мати Ingress controller, щоб задовольнити Ingress.
Створення Namespace
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 в локальному Kubernetes
metallb
Але у нас є рішення для створення LoadBalancer у локальному кластері за допомогою metallb.
metallb — не пов'язано з екзаменом, використовується лише для наших лабораторних цілей
Встановлення metallb
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.3/config/manifests/metallb-native.yaml
Список pods
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-адреси LoadBalancer для nginx ingress сервісу
kubectl get svc -n ingress-nginx
Вихідні дані
IP-адресу було надано за допомогою Metallb.
Одиничний Ingress
Розгортання тестового застосунку.
Створення deployment
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
Застосування deployment
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
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
Вихідні дані
Перекладено з: Local Kubernetes Ingress LoadBalancer Solution