- README.md: перепиcан как компактный обзор (98 строк) с навигацией по docs/ - docs/: 13 файлов — getting-started, architecture, configuration, addons, storage, security, cicd, observability, networking, operations, make-reference, molecule-testing, troubleshooting - addons/*/README.md: 31 новый файл — описание, параметры, примеры кода для каждого из 34 аддонов (vault и external-secrets уже существовали)
3.4 KiB
3.4 KiB
ingress-nginx
HTTP/S Ingress controller. Устанавливается как LoadBalancer сервис, получает IP от kube-vip. Включает кастомную страницу ошибок и поддерживает все стандартные аннотации nginx-ingress.
Быстрый старт
# group_vars/all/addons.yml
addon_ingress_nginx: true
make addon-ingress-nginx
Параметры
| Переменная | Умолч. | Описание |
|---|---|---|
ingress_nginx_service_type |
LoadBalancer |
LoadBalancer | NodePort |
ingress_nginx_load_balancer_ip |
"" |
Статический IP (авто если пусто) |
ingress_nginx_replica_count |
1 |
Количество реплик |
ingress_nginx_use_daemonset |
false |
DaemonSet вместо Deployment |
ingress_nginx_class_name |
nginx |
IngressClass имя |
ingress_nginx_custom_errors_enabled |
true |
Кастомная страница ошибок |
Кастомная страница ошибок
ingress_nginx_custom_errors_enabled: true
ingress_nginx_error_cluster_name: "Production K3S"
ingress_nginx_error_cluster_domain: "cluster.example.com"
Основные аннотации
metadata:
annotations:
# TLS через cert-manager
cert-manager.io/cluster-issuer: "letsencrypt-prod"
# Размер загружаемых файлов
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
# Таймауты
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
# CORS
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://app.example.com"
# Basic Auth
nginx.ingress.kubernetes.io/auth-type: basic
nginx.ingress.kubernetes.io/auth-secret: basic-auth
nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"
# Rate limiting
nginx.ingress.kubernetes.io/limit-rps: "10"
# WebSocket
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Redirect HTTP → HTTPS
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
# SSL passthrough (для TCP-приложений)
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
Пример Ingress с TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app
namespace: my-app
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/proxy-body-size: "50m"
spec:
ingressClassName: nginx
tls:
- hosts:
- myapp.example.com
secretName: myapp-tls
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
number: 80
Basic Auth Secret
htpasswd -c auth admin
kubectl create secret generic basic-auth \
--from-file=auth \
-n my-app
NodePort (без kube-vip)
ingress_nginx_service_type: "NodePort"
ingress_nginx_http_nodeport: 30080
ingress_nginx_https_nodeport: 30443
DaemonSet (для edge/RPi кластеров)
ingress_nginx_use_daemonset: true