Aws-alb-controller: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 29: Строка 29:
 
=Установка и настройка=
 
=Установка и настройка=
   
=Policy=
+
==Policy==
  +
Создать политику (пример идет в комплекте с кодом)
 
<PRE>
 
<PRE>
 
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
 
curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
Строка 38: Строка 39:
 
--policy-document file://iam-policy.json
 
--policy-document file://iam-policy.json
 
</PRE>
 
</PRE>
  +
   
 
{{#spoiler:show=Прежде чем применять политику - проверить содержимое файла|
 
{{#spoiler:show=Прежде чем применять политику - проверить содержимое файла|

Версия 11:47, 23 июня 2025


Это заметка про настройку aws-load-balancer-controller
https://github.com/kubernetes-sigs/aws-load-balancer-controller/tree/main
Просто что бы не забыть шаги

Что такое aws-load-balancer-controller и зачем нужно

Так как блядский цирк AWS не позволяет использовать свои сертефикаты нигде кроме как
на своих ресурсах, то приходится вместо божественного nginx ingress controller
пользоваться ALB
Естественно, что создавать руками (накликивать) каждый раз балансер это не вариант, то хочется что бы
при создании ресурса типа Ingress балансер создавался автоматически.

Для этого и нужен aws-load-balancer-controller

Логика работы (коротко)

Устроено все, если смотреть обзорно, довольно просто

  • aws-load-balancer-controller следит за появлением ресурса типа Ingress
  • При появлении ресурса идет в API AWS и создает ALB
  • Для авторизации использует K8s Service account
    • Этот Service Account преднастроен заранее и связан с Trust Policy которая через привязанную IAM Role позволяет делать ограниченный набор запросов к code>API

Установка и настройка

Policy

Создать политику (пример идет в комплекте с кодом)

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json
aws iam create-policy \
  --policy-name AWSLoadBalancerControllerIAMPolicy \
  --policy-document file://iam-policy.json


role

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Principal": {
                "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012"
            },
            "Condition": {
                "StringEquals": {
                    "oidc.eks.us-east-1.amazonaws.com/id/12345678901285475EA0123456789012:sub": [
                        "system:serviceaccount:kube-system:aws-load-balancer-controller"
                    ],
                    "oidc.eks.us-east-1.amazonaws.com/id/123456789085475EA0123456789012:aud": [
                        "sts.amazonaws.com"
                    ]
                }
            }
        }
    ]
}

aws iam create-role \
  --role-name AWSLoadBalancerControllerIAMRole \
  --assume-role-policy-document file://trust-policy.json

Attach Plicy to Role

aws iam attach-role-policy \
  --role-name AWSLoadBalancerControllerIAMRole \
  --policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/AWSLoadBalancerControllerIAMPolicy

SA

apiVersion: v1
kind: ServiceAccount
metadata:
  name: aws-load-balancer-controller
  namespace: kube-system
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/<generated-role-name>

????

apiVersion: v1
kind: ServiceAccount
metadata:
  name: aws-load-balancer-controller
  namespace: kube-system
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::54XXXXXXXXXX:role/AWSLoadBalancerControllerIAMRole

helm

helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
  -n kube-system \
  --set clusterName=<CLUSTER_NAME> \
  --set serviceAccount.create=false \
  --set serviceAccount.name=aws-load-balancer-controller \
  --set region=<REGION> \
  --set vpcId=<VPC_ID> \
  --set ingressClass=alb


aws eks describe-cluster --name education-eks-1o3RFCvh --query "cluster.resourcesVpcConfig.vpcId" "vpc-0cc5209fbf68dXXXX"


Регион можно узнать например так

aws eks describe-cluster --name education-eks-1o3RFCvh --query "cluster.arn"
"arn:aws:eks:us-east-1:54XXXXXXXXXX:cluster/education-eks-1o3RFCvh"