Публикация приложений средствами Ingress NGINX Controller
Для публикации приложений администратор кластера должен создать Ingress-контроллер. Порядок настройки описан в разделе «Примеры настройки балансировки». Запросите у администратора имя ingressClass контроллера и укажите его в манифесте ресурса Ingress, который маршрутизирует входящий трафик к приложению.
- HTTP
- HTTPS
Пример базового Ingress для публикации приложения по HTTP:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: prod
spec:
ingressClassName: nginx # Имя IngressClass, предоставленное администратором кластера.
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: productpage
port:
number: 80
Для HTTPS укажите Secret с сертификатом в секции tls. Secret должен существовать в том же неймспейсе, что и Ingress. Сертификат может выпустить либо cert-manager, либо администратор вручную.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: prod
spec:
ingressClassName: nginx
tls:
- hosts:
- app.example.com
secretName: application-tls # Secret с tls.crt и tls.key в неймспейсе prod.
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: productpage
port:
number: 80
Дополнительные параметры маршрутизации задаются аннотациями Ingress. Полный список поддерживаемых аннотаций — в описании модуля ingress-nginx. Частые примеры:
nginx.ingress.kubernetes.io/rewrite-target— перезапись пути;nginx.ingress.kubernetes.io/whitelist-source-range— список разрешённых CIDR;nginx.ingress.kubernetes.io/backend-protocol: "GRPC"— протокол к бэкенду для gRPC, если имя порта Service не указывает на gRPC.
Проверка
После применения Ingress проверьте объект и адрес контроллера:
d8 k -n <NAMESPACE> get ingress
d8 k -n <NAMESPACE> describe ingress <INGRESS_NAME>
Убедитесь, что в статусе Ingress есть адрес и что DNS для host указывает на точку входа контроллера, которую сообщил администратор.
Проверьте доступность приложения, подставив адрес точки входа (успешный ответ — код 200 или другой ожидаемый код приложения):
curl -vk \
--resolve app.example.com:443:<ENTRY_POINT_ADDRESS> \
https://app.example.com/
Балансировка gRPC
Раздел относится к публикации gRPC через Ingress NGINX Controller (ingress-nginx). Для Gateway API используйте GRPCRoute.
Чтобы балансировка gRPC-сервисов за Ingress NGINX заработала автоматически, присвойте порту соответствующего объекта Service имя с префиксом или значением grpc. Если имя порта другое, добавьте аннотацию nginx.ingress.kubernetes.io/backend-protocol: "GRPC" к Ingress.