Введение в Kubernetes Ingress: Полное руководство для начинающих

На список статей
Blog image

Защитите свои сайты с My-Sites-Guard.com!
Сервис обеспечивает надежную защиту ваших веб-ресурсов: мониторинг доступности сайта, контроль валидности сертификатов, а также возможность собирать и анализировать логи работы сервера. My-Sites-Guard.com — всё для сохранности вашего сайта и спокойствия в работе!

Что такое Kubernetes Ingress?

Ingress — это объект Kubernetes, который предоставляет правила для управления внешним доступом к сервисам в кластере. Он позволяет определить маршрутизацию HTTP/HTTPS трафика и обеспечивает такие функции, как балансировка нагрузки, управление SSL/TLS сертификатами и виртуальные хосты.

Если в простых словах, Ingress — это "входная дверь" для трафика, который приходит в кластер. Он позволяет настроить доступ к нескольким сервисам через один IP-адрес, распределяя трафик в зависимости от URL, доменного имени или других параметров.

Почему стоит использовать Ingress?

Ingress обладает рядом преимуществ перед другими способами маршрутизации трафика в Kubernetes, такими как NodePort или LoadBalancer:

  1. Балансировка нагрузки: Ingress обеспечивает распределение трафика между несколькими экземплярами сервиса.
  2. Маршрутизация на основе URL: Ingress позволяет направлять трафик в зависимости от пути в URL или доменного имени, что особенно полезно для микросервисных приложений.
  3. Управление SSL/TLS сертификатами: Ingress Controller может автоматически управлять сертификатами, обеспечивая безопасное соединение с помощью HTTPS.
  4. Меньшая зависимость от облачных провайдеров: Используя Ingress, вы можете организовать маршрутизацию в своем кластере, не полагаясь на специфические облачные LoadBalancer.

Основные компоненты Ingress

Для того чтобы Ingress работал, в Kubernetes используются следующие основные компоненты:

  1. Ingress Resource: Это объект Kubernetes, в котором описаны правила маршрутизации трафика к сервисам. Определяет, куда направлять запросы на основе URL, доменного имени и других параметров.
  2. Ingress Controller: Это программный компонент, который обрабатывает правила, указанные в Ingress Resource, и реализует их. Без Ingress Controller объект Ingress сам по себе не будет работать.

Наиболее популярные Ingress Controllers включают:

  • NGINX Ingress Controller
  • Traefik
  • HAProxy
  • Istio Gateway (если используется Istio для управления сервисами)
  • Contour

Установка и настройка Ingress Controller

Прежде чем можно будет использовать Ingress, необходимо установить Ingress Controller. В данном примере мы рассмотрим установку NGINX Ingress Controller, одного из самых популярных решений.


Шаг 1: Установка NGINX Ingress Controller

Используем команду kubectl для установки NGINX Ingress Controller с помощью манифеста YAML:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

Эта команда загрузит и установит необходимые компоненты для работы NGINX Ingress Controller в вашем кластере. После установки можно проверить статус подов:

kubectl get pods -n ingress-nginx

Вы должны увидеть несколько подов с именами, начинающимися на ingress-nginx.


Шаг 2: Создание простого Ingress Resource

После установки Ingress Controller, мы можем создать Ingress Resource, чтобы настроить маршрутизацию. Для этого нам потребуется:

  1. Создать приложение (сервис), к которому будем направлять трафик.
  2. Настроить Ingress Resource.

Давайте начнем с создания простого приложения на базе NGINX.

Пример настройки Ingress для NGINX


1. Создание деплоймента и сервиса

Создадим деплоймент с NGINX, который будет развернут в нашем кластере. Создайте файл nginx-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
 replicas: 2
 selector:
   matchLabels:
     app: nginx
 template:
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx
       ports:
       - containerPort: 80

Примените файл командой:

kubectl apply -f nginx-deployment.yaml

Теперь создадим сервис, чтобы сделать наш деплоймент доступным внутри кластера:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 selector:
   app: nginx
 ports:
 - protocol: TCP
   port: 80
   targetPort: 80
 type: ClusterIP

Сохраните файл как nginx-service.yaml и примените его:

kubectl apply -f nginx-service.yaml

2. Настройка Ingress Resource

Создадим Ingress Resource, который будет направлять трафик на наш сервис. Для этого создайте файл nginx-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: nginx-ingress
 annotations:
   nginx.ingress.kubernetes.io/rewrite-target: /
spec:
 rules:
 - host: nginx.example.com
   http:
     paths:
     - path: /
       pathType: Prefix
       backend:
         service:
           name: nginx-service
           port:
             number: 80

Давайте разберем файл подробнее:

  • annotations: В данном примере используется аннотация для перенаправления трафика на корневой путь.
  • rules: Правила маршрутизации. В данном случае правило говорит, что все запросы на nginx.example.com будут перенаправляться на сервис nginx-service.

Примените файл командой:

kubectl apply -f nginx-ingress.yaml

Проверка работы Ingress

Чтобы протестировать настройки, добавьте запись в файл /etc/hosts на вашем локальном компьютере, чтобы привязать доменное имя nginx.example.com к IP-адресу вашего Ingress Controller. Найдите IP-адрес, выполнив:

kubectl get services -o wide -w -n ingress-nginx

В файле /etc/hosts добавьте строку:

<IP-адрес Ingress Controller> nginx.example.com

Теперь вы можете открыть в браузере http://nginx.example.com и увидеть страницу приветствия NGINX.

Использование TLS/SSL с Ingress

Для того чтобы включить HTTPS, нужно настроить TLS в Ingress. Это достигается с помощью секретов Kubernetes, содержащих сертификат и ключ. Вот пример настройки:

  1. Создайте секрет с TLS сертификатом:kubectl create secret tls nginx-tls --cert=/path/to/tls.crt --key=/path/to/tls.key
  2. Обновите файл nginx-ingress.yaml, чтобы добавить поддержку TLS:apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
     name: nginx-ingress
     annotations:
       nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
     tls:
     - hosts:
       - nginx.example.com
       secretName: nginx-tls
     rules:
     - host: nginx.example.com
       http:
         paths:
         - path: /
           pathType: Prefix
           backend:
             service:
               name: nginx-service
               port:
                 number: 80
  3. Примените обновленный файл:kubectl apply -f nginx-ingress.yaml

Теперь Ingress будет поддерживать HTTPS соединение с сертификатом, указанным в секрете.

Заключение

Kubernetes Ingress — это мощный инструмент для управления внешним доступом к сервисам внутри кластера. С его помощью можно настроить балансировку нагрузки, маршрутизацию на основе доменных имен и URL, а также поддержку HTTPS. В данной статье мы рассмотрели основные шаги по настройке Ingress, от установки Ingress Controller до создания и настройки Ingress Resource.

Часто задаваемые вопросы


1. Чем отличается Ingress от LoadBalancer и NodePort?

LoadBalancer создает внешний балансировщик нагрузки для каждого сервиса, NodePort открывает порт на каждом узле кластера, а Ingress позволяет управлять внешним доступом к нескольким сервисам через один балансировщик.


2. Можно ли использовать несколько Ingress Controllers в одном кластере?

Да, можно, но они должны быть настроены так, чтобы работать с разными правилами или ресурсами.


3. Какие Ingress Controllers лучше использовать?

Самые популярные — это NGINX, Traefik и Istio. Выбор зависит от потребностей и требований кластера.


4. Можно ли настроить Ingress без Ingress Controller?

Нет, Ingress Resource не будет работать без Ingress Controller, который управляет маршрутизацией.


5. Как автоматически управлять сертификатами в Ingress?

Для этого можно использовать cert-manager, который автоматически генерирует и обновляет SSL/TLS сертификаты.

Комментарии

Пока нет комментариев

Добавить комментарий