Ingress Controller в Kubernetes — это компонент, который управляет доступом к сервисам в кластере через HTTP и HTTPS. Он обрабатывает входящие запросы и направляет их к соответствующим сервисам на основе правил, определенных в ресурсах типа Ingress. Ingress Controller позволяет управлять маршрутизацией трафика, обеспечивать SSL-терминацию, а также реализовывать другие функции, такие как аутентификация и ограничение по IP.
Разные Ingress контроллеры предоставляют разные возможности и преимущества.
Существует множество таблиц сравнения Ingress Controller, одна из самых известных и полных находится по следующей ссылке: тык
Если это требуется, в Kubernetes кластер можно установить сразу несколько Ingress контроллеров и написать под каждый свои правила.
В вашем кластере должен быть установлен Helm.
Ниже приведена установка двух контроллеров (выберите тот, который вам больше нравится).
Выполните установку из Helm-чарта:
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
Проверьте, что контроллер установлен:
kubectl get service -n ingress-nginx
Установите Traefik с помощью Helm:
helm repo add traefik https://helm.traefik.io/traefik
helm repo update
helm install traefik traefik/traefik \
--create-namespace \
--namespace ingress-traefik
Проверьте, что контроллер установлен:
kubectl get service -n ingress-traefik
Желательно назначить один из контроллеров дефолтным для кластера. Для этого выполните:
kubectl get ingressclass
kubectl edit ingressclass <ingress_class_name>
И добавьте аннотацию:
metadata:
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
После установки Ingress Controller, вы можете создать ресурс Ingress для маршрутизации трафика к вашим сервисам.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: example
spec:
ingressClassName: "nginx" # Какой именно Ingress вы используете
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Чтобы вывести под через Ingress, он должен иметь подключенный service типа ClusterIP:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: my-app