Whitelisting adresów IP dla OpenStack Load Balancer przy użyciu Horizon i CLI w NSIS
W tym przewodniku wyjaśniono, jak skonfigurować białą listę adresów IP (allowed_cidrs) na istniejącym load balancerem OpenStack przy użyciu Horizon i poleceń CLI. Ta konfiguracja ograniczy dostęp do klastra za pośrednictwem load balancera.
Co zostanie omówione?
Przygotowanie środowiska
Whitelista load balancera za pośrednictwem interfejsu CLI
Wymagania wstępne
Nr 1 Konto
Jest wymagane konto hostingowe NSIS z dostępem do interfejsu Horizon: https://horizon.cloudferro.com.
Nr 2 Lista adresów IP / zakresów adresów, które mają być umieszczone na białej liście
Jest to lista adresów IP, które mają być nasłuchiwane przez load balancera.
W tym artykule użyjemy następujących dwóch adresów, które zostaną umieszczone na białej liście:
10.0.0.0.0/8
10.95.255.0/24
Nr 3 Klient Python Octavia
Do obsługi load balancerów za pomocą CLI wymagany jest klient Python Octavia (python-octaviaclient). Jest to klient wiersza poleceń dla usługi równoważenia obciążenia OpenStack. Zainstaluj wtyczkę load balancer (Octavia) za pomocą następującego polecenia z okna terminala na Ubuntu 22.04:
pip install python-octaviaclient
Ewentualnie, jeśli masz zainstalowany virtualenvwrapper:
mkvirtualenv python-octaviaclient
pip install python-octaviaclient
Przygotowanie środowiska
Przede wszystkim należy znaleźć id load balancera i jego listenera.
Horizon:
Aby znaleźć id load balancera, przejdź do sekcji Project >> Network >> Load Balancers i znajdź load balancer, który jest powiązany z twoim klastrem (jego nazwa będzie miała jako prefiks nazwę twojego klastra).
Kliknij nazwę load balancera (w tym przypadku lb-testing-ih347dstxyl2-api_lb_fixed-w2im3obvdv2p-loadbalancer_with_flavor-ykcmf6vvphld), a następnie przejdź do panelu Listeners. Tam znajdziesz listenera powiązanego z tym load balancerem.
CLI
Aby użyć interfejsu CLI do wyszukania listenera, musisz znać następujące dwa parametry klastra:
Stack ID
Cluster ID
Można je znaleźć za pomocą poleceń Horizon Container Infra –> Clusters, a następnie kliknąć nazwę klastra:
W dolnej części okna znajdź identyfikator stacka:
Teraz wykonaj polecenia:
openstack coe cluster show <your_cluster_id> \
-f value -c stack_id \
<stack_id for example 12345678-1234-1234-1234-123456789011>
Znajdywanie LB_ID
openstack stack resource list <your_stack_id> \
-n 5 -c resource_name -c physical_resource_id \
| grep loadbalancer_with_flavor \
| loadbalancer_with_flavor \
| <flavor_id for example 12345678-1234-1234-1234-123456789011>
Mając te informacje, możemy teraz sprawdzić nasz listener_id; to właśnie do tego komponentu dołączymy białą listę:
openstack loadbalancer \
show 2d6b335f-fb05-4496-8593-887f7e2c49cf \
-c listeners \
-f value \
<listener_id for example 12345678-1234-1234-1234-123456789011>
Biała lista load balancera za pośrednictwem interfejsu CLI
Mamy teraz listener i adresy IP, które zostaną umieszczone na białej liście. Polecenie, które skonfiguruje białą listę jest następujące:
openstack loadbalancer listener set \
--allowed-cidr 10.0.0.0/8 \
--allowed-cidr 10.95.255.0/24 \
<listener_id for example 12345678-1234-1234-1234-123456789011>
Stan bezpieczeństwa: przed i po
Przed wdrożeniem białej listy adresów IP load balancer akceptuje ruch ze wszystkich źródeł. Po zakończeniu procedury:
Tylko określone adresy IP mogą uzyskać dostęp do load balancera.
Nieautoryzowane próby dostępu są odrzucane.
Narzędzia weryfikacyjne
Różne narzędzia mogą zapewnić, że zabezpieczenie jest zainstalowane i działa:
- livez
Punkt końcowy monitorowania Kubernetes.
- nmap
(bezpłatny): Narzędzie do skanowania portów i weryfikacji dostępu.
- curl
(bezpłatny): Narzędzie do potwierdzanie kontroli dostępu z określonych adresów IP.
- Wireshark
(bezpłatny): Narzędzie do analizy na poziomie pakietów.
Testowanie przy użyciu curl i livez
Test można wykonać za pomocą polecenia
curl -k https://<KUBE_API_IP>:6443/livez?verbose
To polecenie zakłada, że masz:
- curl
który jest zainstalowany i działa
- <KUBE_API_IP>
który można zobaczyć za pomocą poleceń Horizon API Access –> View Credentials.
- livez
oprogramowanie, które pokaże, co dzieje się z load balancerem.
Typowa odpowiedź przed zmianami byłaby następująca:
curl -k https://<KUBE_API_IP>:6443/livez?verbose
[+]ping ok
[+]log ok
[+]etcd ok
[+]poststarthook/start-kube-apiserver-admission-initializer ok
[+]poststarthook/generic-apiserver-start-informers ok
[+]poststarthook/priority-and-fairness-config-consumer ok
[+]poststarthook/priority-and-fairness-filter ok
[+]poststarthook/storage-object-count-tracker-hook ok
[+]poststarthook/start-apiextensions-informers ok
[+]poststarthook/start-apiextensions-controllers ok
[+]poststarthook/crd-informer-synced ok
[+]poststarthook/start-system-namespaces-controller ok
[+]poststarthook/bootstrap-controller ok
[+]poststarthook/rbac/bootstrap-roles ok
[+]poststarthook/scheduling/bootstrap-system-priority-classes ok
[+]poststarthook/priority-and-fairness-config-producer ok
[+]poststarthook/start-cluster-authentication-info-controller ok
[+]poststarthook/start-kube-apiserver-identity-lease-controller ok
[+]poststarthook/start-deprecated-kube-apiserver-identity-lease-garbage-collector ok
[+]poststarthook/start-kube-apiserver-identity-lease-garbage-collector ok
[+]poststarthook/start-legacy-token-tracking-controller ok
[+]poststarthook/aggregator-reload-proxy-client-cert ok
[+]poststarthook/start-kube-aggregator-informers ok
[+]poststarthook/apiservice-registration-controller ok
[+]poststarthook/apiservice-status-available-controller ok
[+]poststarthook/kube-apiserver-autoregistration ok
[+]autoregister-completion ok
[+]poststarthook/apiservice-openapi-controller ok
[+]poststarthook/apiservice-openapiv3-controller ok
[+]poststarthook/apiservice-discovery-controller ok
livez check passed
Typowa odpowiedź po zmianach byłaby jak poniżej:
curl -k https://<KUBE_API_IP>:6443/livez?verbose -m 5
curl: (28) Connection timed out after 5000 milliseconds
Bała lista blokuje ruch ze wszystkich adresów IP poza tymi, które są dozwolone przez --allowed-cidr.
Testowanie za pomocą nmap
Aby wykonać test za pomocą nmap, wykonaj polecenie:
nmap -p <PORT> <LOAD_BALANCER_IP>
Testowanie bezpośrednio za pomocą curl
Aby wykonać test za pomocą curl, wykonaj polecenie:
curl http://<LOAD_BALANCER_IP>
Co można zrobić dalej?
Procedurę tę można wykonać za pomocą Terraform i zastosować do większej liczby load balancerów. Zobacz artykuł Konfiguracja białej listy adresów IP dla OpenStack Load Balancer przy użyciu Terraform na NSIS.
Dla porównania zobacz również artykuł Wdrażanie whitelistingu listy adresów IP dla load balancerów z grupami zabezpieczeń w NSIS Cloud