Как я могу безопасно получить доступ к своему кластеру EKS с помощью SSM?

Вопрос или проблема

Я успешно установил aws ssm и хотел бы использовать его для доступа к моему частному кластеру eks. Мне приходится заходить на хост-бастион в публичной подсети с установленными командами kubectl. Я хотел бы избавиться от этого хоста-бастиона.

Я могу открыть туннель с помощью ssm, используя следующую команду

aws ssm start-session --target <идентификатор рабочего узла> --region <регион eks> --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["443"],"localPortNumber":["8443"]}'

Я также обновил свой локальный kubeconfig, который показывает мой контекст aws eks, когда я запускаю kubectl config get-contexts. Теперь я могу войти по ssh на рабочий узел из другого терминала, когда сессия ssm открыта, но я не хочу устанавливать kubectl на рабочем узле, но мне все еще хочется получить доступ к моему кластеру eks.

Мой кластер EKS находится в частной подсети с частным конечным пунктом. Есть ли способ запускать мои команды kubectl локально после открытия сессии ssm и запрашивать мои частные кластеры eks?

В данный момент я получаю

немогу получить текущий список групп API сервера: Get "https://<endpoint eks>.<регион>.eks.amazonaws.com/api?timeout=32s": dial tcp <ip-адрес>:443: connect: connection refused

Ответ или решение

Для безопасного доступа к вашему EKS-кластеру через SSM (AWS Systems Manager) без необходимости использовать Bastion host, вы можете воспользоваться функцией портового перенаправления, которая позволяет вашему локальному компьютеру взаимодействовать с кластером Kubernetes в частной сети. В следующем руководстве я подробно описываю, как это сделать.

Этап 1: Убедитесь, что у вас настроен SSM

  1. Проверьте, что у вас правильно настроен AWS SSM Agent на узлах вашего EKS-кластера. Также убедитесь, что IAM роль узла EKS имеет все необходимые разрешения для использования SSM.
  2. Изучите и выполните команды, чтобы убедиться, что вы можете получить доступ к SSM:
    aws ssm describe-instance-information

Этап 2: Настройка конфигурации kubeconfig

Убедитесь, что ваш файл kubeconfig настроен правильно и указывает на ваш кластер EKS. Это можно сделать с помощью команды:

aws eks update-kubeconfig --name <имя-кластера> --region <регион>

Этап 3: Создание SSM-сессии с портовым перенаправлением

Теперь вы можете открыть SSM-сессию с портовым перенаправлением, используя следующую команду:

aws ssm start-session --target <идентификатор-узла> --region <регион-eks> --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["443"],"localPortNumber":["8443"]}'

Это перенаправит локальный порт 8443 на порт 443 к вашему EKS-кластеру через указанный рабочий узел.

Этап 4: Проверка соединения

Теперь у вас открыта сессия SSM, и вы можете проверить соединение с вашим кластером, отправив запрос к API сервера:

curl https://localhost:8443/version --insecure

Если запрос успешен, вы увидите версию Kubernetes, что подтверждает корректное перенаправление трафика.

Этап 5: Использование kubectl

Теперь вы можете выполнять команды kubectl, не устанавливая их на рабочий узел. Например:

kubectl get pods --kubeconfig ~/.kube/config

Ваши команды kubectl теперь будут маршрутизироваться через SSM и доступны к вашему EKS-кластеру, что позволяет вам взаимодействовать с кластером в частной сети.

Устранение проблем

Если вы столкнулись с ошибкой:

couldn't get current server API group list: Get "https://<eks-endpoint>.<region>.eks.amazonaws.com/api?timeout=32s": dial tcp <ip-address>:443: connect: connection refused

Это может означать, что ваш локальный kubeconfig неправильно настроен или что есть проблемы с портовым перенаправлением. Проверьте, верно ли указан адрес API и открыт ли порт.

Заключение

Используя AWS SSM для доступа к вашему EKS-кластеру без добавления Bastion host, вы значительно упростите свою архитектуру с точки зрения безопасности и управления. Этот метод минимизирует количество сетевых компонентов, что делает вашу инфраструктуру более защищенной и управляемой.

Оцените материал
Добавить комментарий

Капча загружается...