В моей производственной среде у меня есть конфигурация с двумя Nginx, и связь между двумя серверами защищена с помощью этой конфигурации следующим образом: https://docs.nginx.com/nginx/admin-guide/security-controls/securing-http-traffic-upstream/
INTERNET ---> NGINX reverse proxy ---TLS authentication---> NGINX upstream ---> Application
Conf работает, как и ожидалось, обратный поток принимает запросы только от доверенного сертифицированного.
Но мне нужно перенести исходящий сервер с сервера с нуля на кластер Kubernetes в Azure Kubernetes Service. Итак, conf на сервере, действующем в качестве обратного прокси-сервера, остается неизменным, и я переношу конфигурацию восходящего потока на NGINX Ingress Controller.
Я развернул этот образ Ingress Controller: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
и настроил ресурс следующим образом :
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-backend
namespace: dev
annotations:
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
nginx.ingress.kubernetes.io/auth-tls-secret: "dev/my-cert"
nginx.ingress.kubernetes.io/auth-tls-error-page: "https://google.com"
spec:
tls:
- hosts:
- my-backend.my-domain
secretName: my-cert
rules:
- host: my-backend.my-domain
http:
paths:
- path: /
backend:
serviceName: my-backend-service
servicePort: http
И секрет, называемый "my-cert", включает: ca.crt tls.crt tls.key, импортированный из NGINX вверх по течению. https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#client -certificate-authentication
Конфигурация в обратном прокси NGINX без изменений:
location / {
set $upstream my-upstream;
proxy_pass https://$upstream$request_uri;
proxy_set_header Host my-backend.my-domain;
proxy_set_header X-Request-ID $request_id;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_ssl_certificate /etc/nginx/ssl/client.pem;
proxy_ssl_certificate_key /etc/nginx/ssl/client.key;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
proxy_ssl_trusted_certificate /etc/nginx/CA/CA.pem;
proxy_ssl_session_reuse on;
}
Первой попыткой конфигурации был запрос curl от обратный прокси-сервер к Ingress Controller, передающий сертификат клиента:
curl --cacert /etc/nginx/CA/CA.pem --key /etc/nginx/ssl/client.key --cert /etc/nginx/ssl/client.pem https://my-backend.my-domain/health
{"status":"UP"}
Это работает!
Но при попытке отправить запрос через обратный прокси NGINX я перенаправлен в Google. Страница com, как настроено в Ingress Controller. Это примечание ожидаемого поведения, потому что.
Кто-нибудь может мне помочь исправить конфиг и заставить работать аутентификацию?