← Назад к вопросам
Что нужно обязательно указать в Kubernetes Ingress?
2.0 Middle🔥 181 комментариев
#Kubernetes
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Обязательные элементы в Kubernetes Ingress
Ingress — это Kubernetes ресурс, который управляет внешним доступом к сервисам внутри кластера (обычно HTTP/HTTPS). Не все поля обязательны, но некоторые элементы являются критичными для функционирования.
Минимальная структура Ingress
Обязательные элементы:
- apiVersion — версия API
- kind — тип ресурса (Ingress)
- metadata — метаданные (имя, namespace)
- spec — спецификация, включая rules (правила маршрутизации)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Обязательные поля внутри spec
rules — это единственное обязательное поле в spec. Оно определяет:
- host — доменное имя (опционально для catch-all правил)
- http.paths — пути и их бэкенды
- backend — сервис, на который маршрутизировать трафик
Детальная структура
spec:
rules: # ОБЯЗАТЕЛЬНО
- host: api.example.com # опционально (если не указано = catch-all)
http: # ОБЯЗАТЕЛЬНО (или grpc для grpc трафика)
paths: # ОБЯЗАТЕЛЬНО
- path: /api # опционально
pathType: Prefix # ОБЯЗАТЕЛЬНО (Prefix, Exact, ImplementationSpecific)
backend: # ОБЯЗАТЕЛЬНО
service:
name: api-service # ОБЯЗАТЕЛЬНО
port:
number: 8080 # ОБЯЗАТЕЛЬНО
Полный практический пример
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls: # опционально для HTTPS
- hosts:
- example.com
- www.example.com
secretName: example-tls
rules:
- host: example.com # опционально
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
- host: api.example.com
http:
paths:
- path: /v1
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- path: /health
pathType: Exact
backend:
service:
name: api-service
port:
number: 8080
pathType — важный параметр
- Prefix — совпадение начала пути (example.com/api совпадает с /api, /api/v1, /api/users)
- Exact — точное совпадение пути (example.com/api совпадает только с /api)
- ImplementationSpecific — зависит от реализации (обычно Prefix)
TLS/HTTPS — обязательно для production
spec:
tls:
- hosts:
- example.com
- api.example.com
secretName: my-tls-secret # Secret с сертификатом
rules:
# ...
Частые ошибки
❌ Ошибка: забыли указать backend service
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
# backend не указан!
Результат: Ingress будет создан, но трафик не будет маршрутизироваться.
✅ Правильно:
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Проверка Ingress
# Создание
kubectl apply -f ingress.yaml
# Просмотр всех Ingress
kubectl get ingress
# Детальная информация
kubectl describe ingress my-ingress
# Проверка статуса и IP/hostname
kubectl get ingress my-ingress -o wide
Вывод
Обязательные элементы в Ingress:
- spec.rules — массив правил маршрутизации
- rules[].http.paths — пути и их бэкенды
- paths[].pathType — тип совпадения пути
- paths[].backend.service.name — имя сервиса
- paths[].backend.service.port.number — порт сервиса
Без этих элементов Ingress не будет функционировать должным образом. Дополнительно рекомендуется указывать tls для production и ingressClassName для явного выбора контроллера.