EKS · Amazon EKS

Como conectar um cluster EKS

Para conectar um cluster EKS na sua máquina, basta o aws eks update-kubeconfig. Para conectar no Kubepier Web, que roda fora da sua máquina, o caminho é outro: a conta AWS ou uma ServiceAccount. Esta página mostra os dois e o que liberar no endpoint do cluster.

IPs de saída do Kubepier Web

A lista de IPs aparece aqui e no app, no menu Rede e segurança.

Os mesmos IPs valem para todos os clientes do Kubepier Web. Libere todos os da lista.

1. Traga o EKS para o kubeconfig

O aws eks update-kubeconfig grava o cluster, o usuário e o contexto no ~/.kube/config. O contexto sai com o ARN do cluster; --alias dá um nome mais curto:

aws eks update-kubeconfig --region <regiao> --name <cluster> --alias <nome>
kubectl get nodes

2. O plugin exec: aws eks get-token e aws-iam-authenticator

O kubeconfig do EKS não leva token: ele chama o aws eks get-token (ou, em configurações antigas, o aws-iam-authenticator), um plugin exec que assina um pedido com a sua credencial IAM e gera um token de poucos minutos. Por isso o kubectl precisa do AWS CLI e da credencial na máquina.

Além da credencial, a identidade IAM precisa de acesso ao cluster: uma access entry no EKS ou, em clusters antigos, uma linha no ConfigMap aws-auth.

Conectar o cluster EKS no Kubepier Desktop

O desktop lê o mesmo ~/.kube/config e roda o plugin exec, como o kubectl. Depois do update-kubeconfig, o cluster aparece no catálogo, no cliente cuja palavra-chave bate com o nome.

Conectar o cluster EKS no Kubepier Web: conta AWS

A web conecta do servidor do Kubepier, onde não existem o seu AWS CLI nem a sua credencial. Por isso um contexto com plugin exec é recusado ao colar o kubeconfig, e o caminho é a aba Conta de nuvem, com uma chave de acesso IAM. O Kubepier varre as regiões, cadastra cada EKS encontrado e, a cada uso, gera o mesmo token que o aws eks get-token produz. Sincronizar relê a conta.

Na IAM, a chave precisa de eks:ListClusters e eks:DescribeCluster (ec2:DescribeRegions é opcional; sem ela, o Kubepier varre as regiões mais comuns). Em cada cluster, um administrador cria a access entry com a política de leitura:

aws eks create-access-entry --region <regiao> --cluster-name <cluster> \
  --principal-arn arn:aws:iam::<conta>:user/<usuario>
aws eks associate-access-policy --region <regiao> --cluster-name <cluster> \
  --principal-arn arn:aws:iam::<conta>:user/<usuario> \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy \
  --access-scope type=cluster

Se o cluster ainda autentica só pelo ConfigMap aws-auth, as access entries pedem o modo de autenticação API_AND_CONFIG_MAP (aws eks update-cluster-config --access-config authenticationMode=API_AND_CONFIG_MAP).

No cadastro, informe Access key ID e Secret access key; o session token e as regiões são opcionais. Uma credencial temporária, com session token, para de funcionar quando expira.

Ou um kubeconfig só leitura com ServiceAccount

Se você não quer cadastrar a conta AWS, crie no cluster uma ServiceAccount com o papel view e monte um kubeconfig com o token dela. Rode no seu terminal, com o contexto do EKS ativo, e cole o arquivo gerado em Colar kubeconfig. O papel view não lê Secrets, então a lista de Secrets e os releases do Helm ficam vazios.

kubectl create namespace kubepier
kubectl -n kubepier create serviceaccount kubepier-leitura
kubectl create clusterrolebinding kubepier-leitura \
  --clusterrole=view --serviceaccount=kubepier:kubepier-leitura
kubectl -n kubepier apply -f - <<'EOF'
apiVersion: v1
kind: Secret
metadata:
  name: kubepier-leitura-token
  annotations:
    kubernetes.io/service-account.name: kubepier-leitura
type: kubernetes.io/service-account-token
EOF

TOKEN=$(kubectl -n kubepier get secret kubepier-leitura-token -o jsonpath='{.data.token}' | base64 -d)
SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
CA=$(kubectl config view --minify --raw -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')
NOME=$(kubectl config current-context)

cat > kubepier.kubeconfig <<EOF
apiVersion: v1
kind: Config
clusters:
- name: $NOME
  cluster: { server: $SERVER, certificate-authority-data: $CA }
users:
- name: kubepier-leitura
  user: { token: $TOKEN }
contexts:
- name: $NOME
  context: { cluster: $NOME, user: kubepier-leitura }
current-context: $NOME
EOF

3. Public access CIDRs do endpoint do EKS

Se o endpoint público do cluster aceita só alguns IPs, inclua os IPs de saída do Kubepier Web (listados acima e em Rede e IPs de saída) junto com os que já estão liberados. O comando substitui a lista inteira:

aws eks describe-cluster --name <cluster> --query cluster.resourcesVpcConfig.publicAccessCidrs
aws eks update-cluster-config --name <cluster> \
  --resources-vpc-config endpointPublicAccess=true,publicAccessCidrs="<ip-1>/32,<ip-2>/32,<ips-ja-liberados>"

Cluster EKS só com endpoint privado a web não alcança. Para ele, use o Kubepier Desktop pela sua VPN.

Erros comuns ao conectar o EKS

  • "usa plugin exec" ao colar o kubeconfig na web: use a aba Conta de nuvem ou o kubeconfig com ServiceAccount.
  • "sem permissão eks:ListClusters": a política IAM da chave não tem a permissão, em todas ou em algumas regiões.
  • O cluster aparece, mas as listas dão 401 ou 403: falta a access entry da identidade IAM, ou a política associada.
  • Cluster inacessível: o endpoint público não aceita os IPs de saída do Kubepier, ou o cluster só tem endpoint privado.

Começar grátis