Napisałem usługę białej listy NGINX w moim klastrze K8. Ponieważ wszystko wchodzące do klastra przechodzi przez moduł równoważenia obciążenia, musiałem dodać do białej listy przekierowany adres IP zamiast bezpośrednio źródłowego adresu IP.

Podczas testów zakodowałem to na stałe w konfiguracji NGINX:

set_real_ip_from x.x.x.x;
real_ip_header X-Forwarded-For;

Gdzie x.x.x.x był adresem IP modułu równoważenia obciążenia.

To działało.

Nie mogę zakodować adresu IP na stałe w rzeczywistym wdrożeniu, więc miałem nadzieję skorzystać z usługi kube-dns, takiej jak w przypadku proxy_pass:

resolver kube-dns.kube-system.svc.cluster.local;
proxy_pass http://{service}.{namespace}.svc.cluster.local:$server_port;

Co też działa.

Jednak to wyszukiwanie DNS nie działa w przypadku set_real_ip_from:

resolver kube-dns.kube-system.svc.cluster.local;
set_real_ip_from {load balancer service}.kube-system.svc.cluster.local;
real_ip_header X-Forwarded-For;

Kiedy to uruchamiam, otrzymuję po prostu access forbidden by rule, client: x.x.x.x (nie ma go na białej liście), gdzie x.x.x.x to adres IP modułu równoważenia obciążenia. To trochę ma sens, ponieważ set_real_ip_from prawdopodobnie nie wie, jak szukać adresu IP.

Czy można zlecić NGINX wyszukanie w DNS adresu usługi przesyłania dalej?

Jeśli nie, może ktoś ma lepszy sposób, aby to zrobić.

Dzięki!

0
Mitchell Turner 17 grudzień 2019, 05:22
Czy możesz dołączyć pliki definicji yaml, np. usługi load balancera ? Czy kube-dns.kube-system.svc.cluster.local można rozpoznać z nginx pod?
 – 
mario
17 grudzień 2019, 19:32

1 odpowiedź

Chyba po prostu musiałem na tym spać. O wiele prostsze niż robiłem.

Znam zakres, w jakim powinien mieścić się system równoważenia obciążenia, więc mogę po prostu wykonać blok CIDR dla set_real_ip_from.

Na przykład:

set_real_ip_from 10.60.0.0/16;
real_ip_header X-Forwarded-For;

Nie ma potrzeby wyszukiwania DNS.

1
Mitchell Turner 18 grudzień 2019, 02:52