Skip to main content

EKS


Create

VPC & Subnet

kubernetes.io/cluster/<cluster-name>: <shared|owned> 태그를 추가해주세요.

Role

const roleName = "eks-role";
const role = new aws.iam.Role(
roleName,
{
namePrefix: `${roleName}-`,
assumeRolePolicy: {
Statement: [
{
Action: "sts:AssumeRole",
Effect: "Allow",
Principal: {
Service: "eks.amazonaws.com",
},
},
],
Version: "2012-10-17",
},
tags: {
Name: roleName,
"loliot.net/stack": variable.stackName,
},
},
{ protect: true }
);

const clusterPolicyARNs = {
"0": "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy",
};

const rpas = Object.entries(clusterPolicyARNs).map(
([i, arn]) =>
new aws.iam.RolePolicyAttachment(
`eks-rpa-${i}`,
{
policyArn: arn,
role: role.name,
},
{ protect: true }
)
);

Cluster

const clusterName = "eks";
export const cluster = new aws.eks.Cluster(
clusterName,
{
name: clusterName,
version: "1.24",
roleArn: role.arn,
vpcConfig: {
endpointPublicAccess: true,
subnetIds: [
vpc.privateSubnet1.id,
vpc.privateSubnet2.id,
vpc.privateSubnet3.id,
vpc.privateSubnet4.id,
],
},
kubernetesNetworkConfig: { serviceIpv4Cidr: "10.96.0.0/16" },
tags: {
Name: clusterName,
"loliot.net/stack": variable.stackName,
},
},
{ dependsOn: [...rpas], protect: true }
);
info

Cluster를 생성할 때 설정하는 subnetIds는 EKS 마스터와 워커가 통신하기 위해 2~4 개의 ENI를 추가할 서브넷을 선택하기 위한 설정입니다. 해당 ENI의 설명은 Amazon EKS <clusterName>로 표시됩니다.

워커와 통신을 위해 설정하는 서브넷일 뿐, 워커가 배포될 서브넷 전체를 설정하는 것은 아닙니다.

aws eks list-clusters
aws eks update-kubeconfig \
--name <cluster-name> \
--region <region> \
--kubeconfig ~/.kube/<cluster-name>_config
export KUBECONFIG=<config-path>[:<config-path>]

OIDC


  • EKS - 클러스터 - 개요 - 세부 정보
    • OpenID Connect 공급자 URL 복사
  • IAM - 액세스 관리(Access management) - 자격 증명 공급자(Identity Providers) - 공급자 추가
    • OpenID Connect
    • 공급자 URL 붙여넣기
    • 지문 가져오기
const oidcProviderName = "eks-oidc-provider";
export const oidcProvider = new aws.iam.OpenIdConnectProvider(
oidcProviderName,
{
url: cluster.identities[0].oidcs[0].issuer,
clientIdLists: ["sts.amazonaws.com"],
thumbprintLists: ["**********"],
tags: {
Name: oidcProviderName,
"loliot.net/stack": variable.stackName,
},
},
{ protect: true }
);

VPC CNI increases pods per node limits

kubectl set env daemonset aws-node -n kube-system \
ENABLE_PREFIX_DELEGATION=true
kubectl set env daemonset aws-node -n kube-system \
WARM_PREFIX_TARGET=1
danger

pulumi를 사용할 때, NodeGroup 생성 전에 이 작업을 진행해야 UserData의 --kubelet-extra-args가 자동으로 설정됩니다.

Reference