Балансировка нагрузки с помощью Angie
Автор Maksim Efanov, Last modified by Maksim Efanov на 30 мая 2024 02:52 PM

Предусловие

  • Развернутая система Indeed AM с основным и дополнительным серверами.
  • Развернутые две машины с ОС Linux, с обновленными компонентами.
  • Установленный Angie.
  • Настройка прозрачной аутентификации, если балансируется MC/UC с Windows аутентификацией.

Для серверов Indeed AM возможно использовать балансировщик нагрузок Angie. Для обеспечения отказоустойчивости самого сервера с Angie рекомендуется развернуть второй сервер с Angie и использовать конфигурацию Angie + Keepalived.

Настройка

Сертификат веб-сервера на имя балансировщика/общее имя Keepalived

Можно выписать Wild Card сертификат с *, либо сертификат с DNS всех Angie и общего имени Keepalived:


В данном примере angie.indeed.local - виртуальное имя Keepalived, angie1.indeed.local - первый сервер Angie, angie2.indeed.local - второй сервер Angie.

Конвертация сертификата из .pfx в .pem

  1. Извлечь из сертификата зашифрованный приватный ключ (Потребуется указать пароль, заданный при экспорте сертификата):
    openssl pkcs12 -in <Путь до вашего сертификата в формате pfx> -nocerts -out <Путь куда будет извлечен ключ>.
    Пример команды: openssl pkcs12 -in /etc/angie/angie.indeed.local.pfx -nocerts -out /etc/angie/angie.indeed.local.key

  2. Извлечь сертификат в формате crt: 
    openssl pkcs12 -in <Путь до вашего сертификата в формате pfx> -clcerts -nokeys -out <Путь куда будет извлечен сертификат в формате crt>
    Пример команды: openssl pkcs12 -in /etc/angie/angie.indeed.local.pfx -clcerts -nokeys -out /etc/angie/angie.indeed.local.crt

  3. Расшифровать приватный ключ (Потребуется указать пароль, заданный при экспорте сертификата): 
    openssl rsa -in <Путь до извлеченного ключа> -out <Путь куда будет извлечен расшифрованный ключ>.
    Пример команды: openssl rsa -in /etc/angie/angie.indeed.local.key -out /etc/angie/angie.indeed.local-descr.key

  4. Объединить расшифрованный ключ и сертификат в формате crt и скопировать в необходимую папку. В примере /etc/angie/. Для этого выполните команду: 
    sudo bash -c 'cat <Путь до извлеченного расшифрованного ключа> <Путь до сертификата в формате crt> >> /etc/angie/<Имя сертификата с форматом pem>'
    Пример команды: sudo bash -c 'cat /etc/angie/angie.indeed.local-descr.key /etc/angie/angie.indeed.local.crt >> /etc/angie/angie.indeed.local.pem'

Клиентский сертификат

Скопируйте сертификат eaclient.cer в /etc/angie. Пусть сертификата в дистрибутиве: Indeed AM 8.*.*\Indeed Access Manager Server\8.*.*\Misc\SourceCode_EA.Server_Certificates_ClientCertificate_eaclient.cer.

Настройка Angie

Пример конфига angie.conf

#include /etc/angie/http.d/*.conf;
#include /etc/angie/stream.d/*.conf;

user  angie;
worker_processes  auto;
worker_rlimit_nofile 65536;

error_log  /var/log/angie/error.log debug;
pid        /run/angie.pid;

events {
    worker_connections  65536;
}


http {
	resolver 127.0.0.53 status_zone=resolver_zone;
	proxy_cache_path /var/cache/angie/cache keys_zone=cache_zone:1m;
	limit_conn_zone $binary_remote_addr zone=limit_conn_zone:1m;
	limit_req_zone $binary_remote_addr zone=limit_req_zone:1m rate=1r/s;

	upstream backend {
		least_conn;
		zone backend 256k;
	
	   		server indeedam2.indeed.local:443 weight=10 max_fails=3 fail_timeout=30s;
    		server indeedame.indeed.local:443 weight=10 max_fails=3 fail_timeout=30s;
    	
			# Липкие сессии
        	sticky cookie IndeedIdProxy secure httponly samesite=Lax;
			# Для Windows Аутентификации
			keepalive 16;
    	}

	server{
		# Параметры нужны для корректной работы IDP
	    proxy_busy_buffers_size 	512k; 
	 	proxy_buffers				4 512k;
	 	proxy_buffer_size			256k;
 
		listen				443 ssl;
		#http2 				on;
		server_name			angie1.indeed.local;
		# RSA key + crt
		ssl_certificate		angie.indeed.local.pem;
		# RSA key
		ssl_certificate_key	angie.indeed.local-descr.key;

		ssl_client_certificate eaclient.cer;
		ssl_verify_client optional;		
		ssl_protocols		TLSv1.2;
		
		# headers
		add_header Content-Security-Policy "frame-ancestors 'self';" always;
		add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
		add_header Permissions-Policy "interest-cohort=()" always;
		add_header Referrer-Policy "no-referrer-when-downgrade" always;
		add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
		add_header X-Frame-Options "SAMEORIGIN";
		add_header X-XSS-Protection "1; mode=block" always;
	
		# SSL
		ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA;
		ssl_prefer_server_ciphers on;
		ssl_session_tickets off;
		ssl_session_timeout 5m;
	
		proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_429 non_idempotent;

		

		# Сбор метрик
		 status_zone http_server_zone;
	         proxy_cache cache_zone;

	        location / {
				proxy_buffering off;
				proxy_request_buffering off;
				proxy_set_header Upgrade $http_upgrade;
				proxy_set_header X-Forwarded_For $proxy_add_x_forwarded_for;
				proxy_ssl_verify off;
		        proxy_set_header Host $http_host;
	       		proxy_set_header X-Real_IP $remote_addr;
				real_ip_header X-Real-IP;
				proxy_connect_timeout 600s;
				proxy_read_timeout 600s;


				proxy_ignore_headers Expires;
				proxy_ignore_headers X-Accel-Expires;
				proxy_ignore_headers Cache-Control;
				proxy_ignore_headers Set-Cookie;

				proxy_hide_header X-Accel-Expires;
				proxy_hide_header Expires;
				proxy_hide_header Cache;
				proxy_hide_header Pragma;

				add_header X-Proxy-Cache $upstream_cache_status;

				proxy_redirect off;
				proxy_set_header X-Forwarded-Server $host;
				proxy_set_header X-Forwarded-Host $host;
				include ./eaclient.conf;

	    	
				proxy_pass https://backend;
				# Для Windows Аутентификации
				proxy_http_version 1.1;
				proxy_set_header Connection "";
        	}
        	
        
        	
        	location /status/ {
        		api /status/;
            		allow all;
    				#deny all;
		}
	
	
	
		# Light Консоль
		location /console/ {
    			allow all;
    			#deny all;
    			auto_redirect on;

    			alias /usr/share/angie-console-light/html/;
    			index index.html;

   			 location /console/api/ {
      			 	api /status/;
      			}
    		   			
    		
    			 location /console/api/config/ {
        			api /config/;
    			}    	
    			api_config_files on;
		}
 
   	}
}

В server_name укажите имя необходимого сервера Angie.

Конфиг eaclient.conf. Сертификат eaclient находится в дистрибутиве: Indeed AM 8.*.*\Indeed Access Manager Server\8.*.*\Misc\SourceCode_EA.Server_Certificates_ClientCertificate_eaclient.cer.

proxy_set_header X-IndeedAM-ClientCert "<base64 значение eaclient сертификата>";

Зайти в консоль статистики: https://angie.indeed.local/console.

Установка и настройка Keepalived

Данную установку необходимо произвести на каждом сервере с Angie.

  1. Введите команду для установки Keepalived: sudo apt-get install keepalived
  2. Откройте файл /etc/sysctl.conf и добавьте строки:

    net.ipv4.ip_forward=1
    net.ipv4.ip_nonlocal_bind=1

  3. Выполните команду sudo sysctl -p для проверки добавленных изменений
  4. Создайте файл конфигурации /etc/keepalived/keepalived.conf
  5. Настройте файл конфигурации согласно примеру ( config-keepalived-base.cfg ):
    global_defs {
    # Keepalived process identifier
    lvs_id angie_DH
    }
    # Script used to check if Angie is running
    vrrp_script check_angie {
    script "killall -0 angie"
    interval 2
    weight 2
    }
    # Virtual interface
    # The priority specifies the order in which the assigned interface to take over in a failover
    vrrp_instance VI_01 {
    state MASTER # MASTER для основного сервера, BACKUP для резевного
    interface ens33 # Имя интерфейса можно узнать с помощью команды ifconfig
    virtual_router_id 51
    priority 101 # Для основного сервера с angie 101, для резевного 100
    # The virtual ip address shared between the two loadbalancers
    virtual_ipaddress {
    192.168.1.89 # Виртуальный IP, по которому будет доступен keepalived
    }
    track_script {
    check_angie
    }
    }
    1. На дополнительном сервере конфигурационный файл будет отличаться параметрами: "state BACKUP" и "priority 100". ( config-keepalived-backup.cfg )
      global_defs {
      # Keepalived process identifier
      lvs_id angie_DH
      }
      # Script used to check if Angie is running
      vrrp_script check_angie {
      script "killall -0 angie"
      interval 2
      weight 2
      }
      # Virtual interface
      # The priority specifies the order in which the assigned interface to take over in a failover
      vrrp_instance VI_01 {
      state BACKUP # MASTER для основного сервера, BACKUP для резевного
      interface ens33 # Имя интерфейса можно узнать с помощью команды ifconfig
      virtual_router_id 51
      priority 100 # Для основного сервера с angie 101, для резевного 100
      # The virtual ip address shared between the two loadbalancers
      virtual_ipaddress {
      192.168.1.89 # Виртуальный IP, по которому будет доступен keepalived
      }
      track_script {
      check_angie
      }
      }
  6. Для виртуального адреса из примера: 192.168.1.89 создайте A-запись в DNS (В данной инструкции используется и настраивается для angie.indeed.local). DNS Manager>Forward Lookup Zones>New Host (A or AAAA). По этому адресу в дальнейшем будут доступны сервера c балансировщиком нагрузок Angie.

  7. Запустите keepalived командой /etc/init.d/keepalived start. Проверить работоспособность сервиса можно командой: sudo service keepalived status, а команой ip addr show ens33 (имя сетевого интерфейса) можно проверить поднялся ли виртуальный IP адрес.
    Для перезагрузки службы используйте команду: sudo service keepalived restart



Вложения 
 
 angie.conf (4.52 кБ)
 config-keepalived-base.cfg (0.87 кБ)
  config-keepalived-backup.cfg (0.87 кБ)
(5 голос(а))
Эта статья полезна
Эта статья бесполезна

Комментарии (0)
Добавить новый комментарий
 
 
Полное имя:
Email:
Комментарии: