• Русский
  • Конфигурация инициализации сети кластера AWS EKS

    Содержание

    Обзор поддержки

    ФункцияСтатус поддержкиТребования
    LoadBalancer ServiceПоддерживаетсяОпционально развернуть AWS Load Balancer Controller. Без этого контроллера возможности LoadBalancer ограничены.
    IngressПоддерживаетсяОпционально развернуть AWS Load Balancer Controller. Опционально включить функциональность Ingress Class (после включения можно вручную выбирать классы ingress при создании ingress через форму).

    Предварительные требования

    • Убедитесь, что инструменты kubectl, Helm, AWS CLI и eksctl доступны перед развертыванием AWS Load Balancer Controller.

      Примечание: После установки инструментов настройте данные для входа, используя пользователя, создавшего кластер, через AWS CLI, и проверьте корректность установки AWS CLI и eksctl.

    • Заранее получите ACCOUNT_ID, REGION и CLUSTER_NAME, и замените <ACCOUNT_ID>, <REGION>, <CLUSTER_NAME> в документации на реальные значения.

      Примечание: ACCOUNT_ID — это идентификатор аккаунта пользователя, создавшего кластер, REGION — регион кластера, CLUSTER_NAME — имя кластера.

    • Обновите и проверьте конфигурационный файл Kubeconfig.

    Шаги конфигурации

    Развертывание AWS Load Balancer Controller

    Примечание: Подробную информацию о развертывании AWS Load Balancer Controller смотрите в официальной документации.

    Настройка OIDC Provider

    Кластеры Kubernetes используют OpenID Connect (OIDC) для управления идентификацией и связаны с URL издателя OIDC. Чтобы включить AWS Identity в кластере и разрешить IAM роли для Service Accounts, создайте IAM OIDC Provider, связанный с URL издателя OIDC кластера.

    Выполните следующую команду в eksctl для настройки OIDC Provider:

    eksctl utils associate-iam-oidc-provider --region=<REGION> --cluster=<CLUSTER_NAME> --approve
    Настройка Service Account

    Выполните следующие команды для создания IAM политики и создания Service Account с именем aws-load-balancer-controller, связанного с IAM ролью:

    curl -o aws-load-balancer-controller-iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json
    aws iam create-policy \
        --policy-name <CLUSTER_NAME>-AWSLoadBalancerControllerIAMPolicy \
        --policy-document file://aws-load-balancer-controller-iam-policy.json
    
    eksctl create iamserviceaccount \
      --cluster=<CLUSTER_NAME> \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --role-name AmazonEKSLoadBalancerControllerRole \
      --attach-policy-arn=arn:aws:iam::<ACCOUNT_ID>:policy/<CLUSTER_NAME>-AWSLoadBalancerControllerIAMPolicy \
      --approve

    Развертывание AWS Load Balancer Controller в кластере

    Выполните следующие команды в eksctl для развертывания AWS Load Balancer Controller:

    1. Добавьте репозиторий eks-charts:

      helm repo add eks https://aws.github.io/eks-charts
    2. Обновите локальный репозиторий:

      helm repo update eks
    3. Разверните Helm Chart AWS Load Balancer Controller в кластере:

      Примечание: aws-load-balancer-controller — это Service Account, созданный в разделе Настройка Service Account.

      helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
        -n kube-system \
        --version=v2.4.7 \
        --set ingressClassConfig.default=true \
        --set clusterName=<CLUSTER_NAME> \
        --set serviceAccount.create=false \
        --set serviceAccount.name=aws-load-balancer-controller

    Создание Ingress и LoadBalancer сервисов

    Вы можете создавать ingress и LoadBalancer сервисы одновременно или выбрать один из них в зависимости от потребностей.

    Создание Ingress

    1. В Container Platform перейдите в раздел Network > Ingress в левом меню.

    2. Нажмите Create Ingress и выберите EKS Ingress Class для поля Ingress Class.

    3. Выберите Protocol. По умолчанию — HTTP. Для HTTPS сначала создайте сертификат и выберите его.

    4. Переключитесь в режим YAML и добавьте следующие аннотации. Подробнее см. документацию по аннотациям:

      alb.ingress.kubernetes.io/scheme: internet-facing ## Указать публичный доступ
      alb.ingress.kubernetes.io/target-type: ip  ## Маршрутизация трафика напрямую к pod
    5. Нажмите Create.

    Создание LoadBalancer сервиса

    1. В Container Platform перейдите в раздел Network > Services в левом меню.

    2. Нажмите Create Service и выберите LoadBalancer для External Access.

    3. Нажмите Create.

    Связанные операции

    Проверка установки AWS CLI и eksctl

    • Выполните следующую команду. Если она возвращает список кластеров, AWS CLI установлен корректно:

      aws eks list-clusters
    • Выполните следующую команду. Если она возвращает список кластеров, eksctl установлен корректно:

      eksctl get clusters

    Получение ACCOUNT_ID

    Выполните команду aws sts get-caller-identity, чтобы получить ACCOUNT_ID. В ответе 651168850570 — это ACCOUNT_ID:

    {
    "ARN": "arn:aws:iam::651168850570:user/jwshi"
    }

    Конфигурационный файл Kubeconfig

    1. Выполните следующую команду для обновления файла Kubeconfig для указанного региона:

      aws eks --region <REGION>  update-kubeconfig --name <CLUSTER_NAME>
    2. Выполните следующую команду для проверки файла Kubeconfig. Если возвращается информация, конфигурация корректна:

      kubectl get svc -n cpaas-system

    Добавление тегов к подсетям

    1. Выполните следующую команду для получения подсетей кластера:

      eksctl get cluster --name <CLUSTER_NAME>
    2. Выполните следующую команду для получения деталей подсетей:

      aws ec2 describe-subnets
    3. Выполните следующие команды для добавления тегов к подсетям. Замените <subnet-id> на реальные значения. См. Автоматическое обнаружение подсетей:

      • Добавьте тег kubernetes.io/role/elb к подсетям:

        aws ec2 create-tags --resources <subnet-id> --tags Key=kubernetes.io/role/elb,Value="1"
      • Добавьте тег kubernetes.io/cluster/<CLUSTER_NAME>: shared к общим подсетям:

        aws ec2 create-tags --resources <subnet-id> --tags Key=kubernetes.io/cluster/<CLUSTER_NAME>,Value="shared"

    Создание сертификата

    При использовании протокола HTTPS заранее сохраните учетные данные HTTPS сертификата как Secret (типа TLS).

    1. В Container Platform перейдите в раздел Configuration > Secrets в левом меню.

    2. Нажмите Create Secret.

    3. Выберите тип TLS и импортируйте или заполните поля Certificate и Private Key по необходимости.

    4. Нажмите Create.