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

    Support Overview

    FeatureSupport StatusRequirements
    LoadBalancer ServiceSupportedOptionally deploy AWS Load Balancer Controller. Without this controller, LoadBalancer capabilities are limited.
    IngressSupportedOptionally deploy AWS Load Balancer Controller. Optionally enable Ingress Class functionality (once enabled, you can manually select ingress classes when creating ingress through the form interface).

    Prerequisites

    • Подготовьте две подсети с тегом kubernetes.io/role/elb. Для общих подсетей добавьте тег kubernetes.io/cluster/<cluster-name>: shared. См. Добавление тегов к подсетям.

    • Если у вас уже создан кластер EKS, импортируйте кластер Amazon EKS.

    • Убедитесь, что инструменты 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.

    Configuration Steps

    Deploy 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

    Create Ingress and LoadBalancer Services

    Вы можете создавать 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 ## Направлять трафик напрямую на поды
    5. Нажмите Create.

    Создание LoadBalancer Service

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

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

    3. Разверните раздел annotations и при необходимости заполните аннотации для LoadBalancer сервиса.

    4. Нажмите Create.

    Test AWS CLI and eksctl Installation

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

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

      eksctl get clusters

    Get ACCOUNT_ID

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

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

    Kubeconfig Configuration File

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

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

      kubectl get svc -n cpaas-system

    Add Tags to Subnets

    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"

    Create Certificate

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

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

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

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

    4. Нажмите Create.