Normalerweise wird TLS für HTTP-Anfragen auf dem eingebauten Reverse-Proxy terminiert. Wenn Sie die Anwendung jedoch über mehrere Hosts skalieren müssen, können Sie dieses Verhalten ändern.
Um einen externen Proxy zu verwenden und Anfragen zwischen den Knoten zu verteilen, führen Sie die folgenden Befehle aus.
Für den Authentication-Server-Dienst (NtkAS):
$ ntk cfg setc nas.external_proxy on
$ ntk redis start
$ ntk cfg set :nas.redis_url redis://10.0.1.98:6379/cache
$ ntk as restart
Ersetzen Sie die IP-Adresse 10.0.1.98 durch die Adresse des Knotens, auf dem der Redis-Beschleuniger laufen wird. Für die Hochverfügbarkeit des Redis-Beschleunigerdienstes empfiehlt es sich, den VRRP-Dienst zu konfigurieren. Siehe REDIS-Dienst mit VRRP einrichten.
Für den SSO-Dienst (NtkSSO):
$ ntk cfg setc sso.external_proxy on
$ ntk sso restart
Führen Sie die Befehle auf jedem Knoten aus, der zum Backend-Pool des externen Load Balancers gehören soll.
Die Dienste erwarten die tatsächliche Client-IP-Adresse im HTTP-Header
X-Real-IP. Das ist relevant, wenn Sie je nach Standort des Benutzers im
Netzwerk unterschiedliche Sicherheitsrichtlinien einsetzen.
Nach der Neukonfiguration ist der NtkAS-Dienst auf dem Knoten unter tcp/5000
erreichbar, der NtkSSO-Dienst unter tcp/7000. Fügen Sie diese Endpunkte dem
Pool des externen Load Balancers hinzu. Die interne IP-Adresse des Knotens
ermitteln Sie mit ntk net eth0 address.
Wenn der Management-Port nicht auf dem Standardwert steht und der
Dual-Instance-Modus aktiv ist (:nas.dual_instance_mode = on), ist
zusätzlich die Verwaltungsschnittstelle unter tcp/6000 erreichbar. Machen
Sie die administrative Schnittstelle öffentlich zugänglich, sollten Sie
diesen Dienst zusätzlich absichern. Andernfalls können Sie über den
eingebauten Proxy-Dienst direkt über die interne IP-Adresse des Knotens auf
die Verwaltung zugreifen. Sie können den VRRP-Dienst so konfigurieren, dass
alle Knoten eine einzige interne IP-Adresse verwenden. Weitere Details
finden Sie in der
Dokumentation.
Nachfolgend finden Sie Konfigurationsbeispiele für gängige Load-Balancing-Lösungen.
HAProxy-Konfiguration für einen NtkAS-Dienst
backend notakey-backend
mode http
balance roundrobin
option forwardfor
option httpchk
http-request set-header X-Forwarded-Port %[dst_port]
http-request set-header X-Real-IP %[src_addr]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
server node01 10.0.1.71:5000 check
server node02 10.0.1.72:5000 check
server node03 10.0.1.73:5000 check
Nginx-Konfiguration für einen NtkAS-Dienst
http {
include conf/mime.types;
index index.html index.htm index.php;
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
upstream ntkservers {
server 10.0.1.71:5000;
server 10.0.1.72:5000;
server 10.0.1.73:5000;
# Nginx open source monitors backends by analyzing requests
# If request times out, backend is marked as unavailable
# This may lead to unintended failures during appliance updates
}
; Nginx Plus config
match server_ok {
status 200;
}
server {
listen 443 ssl http2;
root /app/public;
ssl_certificate /etc/nginx/ssl/ntkchain.pem;
ssl_certificate_key /etc/nginx/ssl/ntk.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MySSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port $server_port;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 10;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_redirect off;
proxy_pass http://ntkservers;
# Nginx Plus config
health_check interval=10 uri=/api/health match=server_ok;
}
}
}