Управление правилами файрвола для балансировщиков нагрузки
При публикации приложения через балансировщик нагрузки (LoadBalancer) может потребоваться открыть входящий трафик на один или несколько портов балансировщика с помощью правил файрвола.
С помощью этого руководства вы создадите несколько типов балансировщиков для тестового приложения, а также изучите автоматически созданные правила файрвола.
Чтобы узнать, как работают правила:
Подготовьте окружение для работы с кластером Managed Kubernetes.
(опционально) Узнайте, как еще можно работать с правилами файрвола:
- Измените настройки правил для уже развернутого балансировщика.
Перед началом работы
Заголовок раздела «Перед началом работы»Создайте кластер Managed Kubernetes с публичным эндпоинтом и группу узлов для него.
Создайте NAT-шлюз для подсети, в которой будет развернут кластер Managed Kubernetes.
Для прохождения руководства вам понадобится устройство, поддерживающее работу с командной строкой. Используйте личный компьютер или создайте промежуточную ВМ в той же сети, где расположен кластер Managed Kubernetes.
1. Подготовьте окружение
Заголовок раздела «1. Подготовьте окружение»Подключитесь к терминалу на вашем компьютере или к промежуточной ВМ.
Установите и настройте утилиту MWS CLI:
Установите утилиту командной строки
kubectl.Получите kubeconfig:
bash mws mk8s get-kubeconfig <имя кластера>Убедитесь, что кластер доступен:
bash kubectl cluster-infoЕсли конфигурация настроена правильно, вы получите такой ответ:
bash Kubernetes control plane is running at https://<IP-адрес кластера>KubeDNS is running at https://<IP-адрес кластера>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
2. Разверните тестовое приложение
Заголовок раздела «2. Разверните тестовое приложение»Создайте файл
nginx-deployment.yaml, содержащий манифест для развертывания тестового приложения:Примените манифест:
bash kubectl apply -f nginx-deployment.yamlУбедитесь, что под приложения запущен и работает:
bash kubectl get pods -l app=nginxОжидаемый результат:
bash NAME READY STATUS RESTARTS AGEnginx-deployment-dc7b9b9d6-ddd7v 1/1 Running 0 28m
3. Создайте балансировщик
Заголовок раздела «3. Создайте балансировщик»Подготовьте манифест для балансировщика нагрузки. Выберите нужный вам вариант в зависимости от типа доступа: из внутренней сети или из интернета.
- Внутренний доступ
- Внешний доступ для определенных адресов
- Внешний доступ для всех адресов
Определите подсеть, для IP-адресов которой нужно открыть доступ к балансировщику.
В этом примере диапазон IP-адресов подсети —
10.0.0.0/8.Зарезервируйте внутренний статический IP-адрес с именем
lb-internal-ipв подсети, указанной при создании кластера Managed Kubernetes. В этом примере используется IP-адрес192.168.0.99.Создайте файл
lb-internal.yaml, содержащий манифест для внутреннего балансировщика:yaml apiVersion: v1kind: Servicemetadata:name: lb-internalannotations:mk8s.mws.ru/load-balancer-internal-ip-name: "lb-internal-ip"namespace: defaultspec:type: LoadBalancerloadBalancerSourceRanges:- 10.0.0.0/8selector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 80Примените манифест:
bash kubectl apply -f lb-internal.yamlУбедитесь, что балансировщик успешно создан:
bash kubectl get svc,endpoints lb-internal -n defaultОжидаемый результат:
bash NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/lb-internal LoadBalancer 10.222.71.208 192.168.0.99 80:32161/TCP 119sNAME ENDPOINTS AGEendpoints/lb-internal 10.222.13.164:80 119sВ этом примере:
CLUSTER-IP(10.222.71.208) — внутренний IP-адрес сервиса;EXTERNAL-IP(192.168.0.99) — внутренний целевой IP-адрес балансировщика, доступ на этот адрес разрешен из подсети10.0.0.0/8;ENDPOINTS(10.222.13.164:80) — внутренний IP-адрес и порт пода, на котором развернуто тестовое приложение.
4. Убедитесь, что правила созданы
Заголовок раздела «4. Убедитесь, что правила созданы»- В веб-консоли выберите нужный проект.
- В списке сервисов выберите VPC → Сети.
- Выберите сеть, в которой расположен кластер Managed Kubernetes и перейдите на вкладку Правила firewall.
В открывшемся списке вы увидите новые правила для балансировщика, созданного на предыдущем шаге:
- правила, разрешающие доступ согласно настройкам балансировщика;
(опционально) Измените настройки правил
Заголовок раздела «(опционально) Измените настройки правил»Вы можете изменить набор правил для балансировщика с помощью утилиты kubectl, например добавить новый диапазон IP-адресов. После внесения изменений правила файрвола будут обновлены автоматически.
Чтобы изменить список разрешенных IP-адресов для внешнего балансировщика:
bash kubectl patch svc lb-external \-n default \--type merge \-p '{"spec":{"loadBalancerSourceRanges":["8.8.8.8/32","178.248.238.27/32"]}}'Чтобы разрешить доступ со всех IP-адресов:
bash kubectl patch svc lb-external \-n default \--type merge \-p '{"spec":{"loadBalancerSourceRanges":["0.0.0.0/0"]}}'Чтобы отредактировать манифест балансировщика и изменить список правил вручную:
bash kubectl edit svc lb-external -n default
(опционально) Создайте правило вручную
Заголовок раздела «(опционально) Создайте правило вручную»При необходимости вы можете создать правила файрвола вручную. Такие правила не будут актуализироваться автоматически при обновлении кластера или сервиса.
В веб-консоли выберите нужный проект.
В списке сервисов выберите VPC → Сети.
Выберите сеть, в которой расположен кластер Managed Kubernetes.
Перейдите на вкладку Правила firewall и нажмите кнопку Создать правило.
Укажите параметры правила:
- Направление трафика, для которого будет применяться правило, —
Ingress. - Действие в рамках правила —
Allow. - Приоритет правила —
1000. - Источник трафика — IP-адреса или подсети, трафик из которых будет разрешать правило. Чтобы разрешить доступ с любых адресов в интернете, укажите
0.0.0.0/0. - Назначение трафика — один или несколько внутренних IP-адресов узлов кластера Managed Kubernetes в формате
<внутренний IP-адрес узла>/32. Узнать внутренние IP-адреса узлов можно с помощью командыkubectl get node -o wide, полеINTERNAL-IP. - Протокол и порт —
TCP:80.
Включите опцию Активировать правило после сохранения.
Нажмите кнопку Создать.
Удалите платные ресурсы
Заголовок раздела «Удалите платные ресурсы»Ресурсы, созданные в руководстве, тарифицируются. Если вы больше не планируете использовать их:
- Если вы создавали виртуальную машину, удалите ее.