IRSA를 사용하도록 Amazon VPC CNI 플러그인 구성
Kubernetes용 Amazon VPC CNI 플러그인
-
AWS ID 및 액세스 관리(IAM) 권한이 필요합니다. 클러스터가
IPv4
패밀리를 사용하는 경우 권한은 ` AmazonEKS _CNI_Policy` AWS 관리형 정책에 지정됩니다.클러스터가IPv6
패밀리를 사용하는 경우 생성한 IAM 정책에 권한을 추가해야 합니다. 지침은 IPv6 패밀리를 사용하는 클러스터에 대한 IAM 정책 생성을 참조하세요. 정책을 Amazon EKS 노드 IAM 역할 또는 별도의 IAM 역할에 연결할 수 있습니다. 정책을 Amazon EKS 노드 IAM 역할에 연결하는 지침은 Amazon EKS 노드 IAM 역할을 참조하세요. 이 주제에 설명된 대로 별도의 역할에 할당하는 것이 좋습니다. -
배포되면
aws-node
라는 Kubernetes 서비스 계정을 생성하고 해당 계정을 사용하도록 구성됩니다. 이 서비스 계정은aws-node
라는 Kubernetesclusterrole
에 바인딩되어 있습니다. 이 역할에는 필요한 Kubernetes 권한이 할당되어 있습니다.
참고
IMDS에 대한 액세스 권한을 차단하지 않는 한 Amazon VPC CNI plugin for Kubernetes의 Pods은 Amazon EKS 노드 IAM 역할에 할당된 권한에 액세스 권한이 있습니다. 자세한 내용은 작업자 노드에 할당된 인스턴스 프로파일에 대한 액세스 제한
-
기존 Amazon EKS 클러스터. 배포하려면 Amazon EKS 시작하기 섹션을 참조하세요.
-
클러스터의 기존 AWS ID 및 액세스 관리(IAM)OpenID Connect (OIDC) 공급자입니다. 이미 있는지 아니면 생성해야 하는지 확인하려면 클러스터에 대한 IAM OIDC 공급자 생성 부분을 참조하세요.
1단계 - Amazon VPC CNI plugin for Kubernetes IAM 역할 생성
-
클러스터의 IP 패밀리를 확인합니다.
aws eks describe-cluster --name my-cluster | grep ipFamily
예제 출력은 다음과 같습니다.
"ipFamily": "ipv4"
출력에서 대신
ipv6
가 반환될 수 있습니다. -
IAM 역할을 생성합니다.
eksctl
또는kubectl
및 AWS CLI를 사용하여 IAM 역할을 생성할 수 있습니다.- eksctl
-
-
IAM 역할을 생성하고 클러스터의 IP 패밀리와 일치하는 명령을 사용하여 역할에 IAM 정책을 연결합니다. 명령은 IAM 역할을 생성하는 AWS CloudFormation 스택을 생성 및 배포하고, 여기에 지정한 정책을 연결하고, 생성된 IAM 역할의 ARN으로 기존
aws-node
Kubernetes 서비스 계정에 주석을 추가합니다.-
IPv4
my-cluster
를 원하는 값으로 바꿉니다.eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --override-existing-serviceaccounts \ --approve
-
IPv6
my-cluster
를 원하는 값으로 바꿉니다.111122223333
을 계정 ID로 바꾸고AmazonEKS_CNI_IPv6_Policy
를IPv6
정책 이름으로 바꿉니다.IPv6
정책이 없는 경우 IPv6 패밀리를 사용하는 클러스터에 대한 IAM 정책 생성 섹션을 참조하여 생성합니다. 클러스터에서IPv6
를 사용하려면 여러 요구 사항을 충족해야 합니다. 자세한 내용은 클러스터, pods, 및 서비스에 대한 IPv6 주소에 대해 알아보기 단원을 참조하십시오.eksctl create iamserviceaccount \ --name aws-node \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKSVPCCNIRole \ --attach-policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --override-existing-serviceaccounts \ --approve
-
-
- kubectl 및 AWS CLI
-
-
클러스터의 OIDC 공급자 URL을 확인합니다.
aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
예제 출력은 다음과 같습니다.
https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
출력이 반환되지 않은 경우 해당 클러스터에 대한 IAM OIDC 공급자를 생성해야 합니다.
-
다음 콘텐츠를
vpc-cni-trust-policy.json
이라는 파일에 복사합니다.111122223333
을 이전 단계에서 반환된 출력의 계정 ID 및EXAMPLED539D4633E53DE1B71EXAMPLE
로 바꿉니다.region-code
를 클러스터가 있는 AWS 리전으로 바꿉니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
-
역할을 생성합니다.
AmazonEKSVPCCNIRole
을 선택한 이름으로 바꿀 수 있습니다.aws iam create-role \ --role-name AmazonEKSVPCCNIRole \ --assume-role-policy-document file://"vpc-cni-trust-policy.json"
-
필요한 IAM 정책을 역할에 연결합니다. 클러스터의 IP 패밀리와 일치하는 명령을 실행합니다.
-
IPv4
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSVPCCNIRole
-
IPv6
111122223333
을 계정 ID로 바꾸고AmazonEKS_CNI_IPv6_Policy
를IPv6
정책 이름으로 바꿉니다.IPv6
정책이 없는 경우 IPv6 패밀리를 사용하는 클러스터에 대한 IAM 정책 생성 섹션을 참조하여 생성합니다. 클러스터에서IPv6
를 사용하려면 여러 요구 사항을 충족해야 합니다. 자세한 내용은 클러스터, pods, 및 서비스에 대한 IPv6 주소에 대해 알아보기 단원을 참조하십시오.aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSVPCCNIRole
-
-
다음 명령을 실행하여 이전에 생성한 IAM 역할의 ARN을 사용하여
aws-node
서비스 계정에 주석을 추가합니다.예제 값
을 사용자의 값으로 바꿉니다.kubectl annotate serviceaccount \ -n kube-system aws-node \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole
-
-
(선택 사항) Kubernetes 서비스 계정에서 사용하는 AWS 보안 토큰 서비스 엔드포인트 유형을 구성합니다. 자세한 내용은 서비스 계정의 AWS 보안 토큰 서비스 엔드포인트 구성 단원을 참조하십시오.
2단계: Amazon VPC CNI plugin for KubernetesPods 재배포
-
서비스 계정에 연결된 기존 Pods를 삭제하고 다시 생성하여 보안 인증 정보 환경 변수를 적용합니다. 주석은 현재 주석 없이 실행 중인 Pods에는 적용되지 않습니다. 다음 명령은 기존의
aws-node
DaemonSet Pods를 삭제하고 서비스 계정 주석을 사용하여 배포합니다.kubectl delete Pods -n kube-system -l k8s-app=aws-node
-
모든 Pods가 다시 시작되었는지 확인합니다.
kubectl get pods -n kube-system -l k8s-app=aws-node
-
Pods 중 하나를 설명하고
AWS_WEB_IDENTITY_TOKEN_FILE
및AWS_ROLE_ARN
환경 변수가 있는지 확인합니다.cpjw7
을 이전 단계의 출력에서 반환된 Pods 중 하나의 이름으로 바꿉니다.kubectl describe pod -n kube-system aws-node-cpjw7 | grep 'AWS_ROLE_ARN:\|AWS_WEB_IDENTITY_TOKEN_FILE:'
예제 출력은 다음과 같습니다.
AWS_ROLE_ARN: arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token AWS_ROLE_ARN: arn:aws:iam::111122223333:role/AmazonEKSVPCCNIRole AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
Pod에 두 개의 컨테이너가 포함되어 있으므로 두 세트의 중복 결과가 반환됩니다. 두 컨테이너의 값이 같은 경우입니다.
Pod에서 AWS 리전 엔드포인트를 사용하고 있는 경우 이전 출력에서 다음 줄도 반환됩니다.
AWS_STS_REGIONAL_ENDPOINTS=regional
3단계: 노드 IAM 역할에서 CNI 정책 제거
현재 Amazon EKS 노드 IAM 역할에 AmazonEKS_CNI_Policy
IAM(IPv4
) 정책 또는 IPv6 정책이 첨부되어 있고 별도의 IAM 역할을 생성하여 대신 정책을 첨부한 후 aws-node
Kubernetes 서비스 계정에 할당했다면 클러스터의 IP 제품군과 일치하는 AWS CLI 명령으로 노드 역할에서 정책을 제거하는 것이 좋습니다. AmazonEKSNodeRole
을 노드 역할의 이름으로 바꿉니다.
-
IPv4
aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
-
IPv6
111122223333
을 계정 ID로 바꾸고AmazonEKS_CNI_IPv6_Policy
를IPv6
정책 이름으로 바꿉니다.aws iam detach-role-policy --role-name AmazonEKSNodeRole --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy
IPv6
패밀리를 사용하는 클러스터에 대한 IAM 정책 생성
IPv6
패밀리를 사용하는 클러스터를 생성했고 클러스터에 버전 1.10.1
이상의 Amazon VPC CNI plugin for Kubernetes 추가 기능이 구성되어 있으면 IAM 역할에 할당할 수 있는 IAM 정책을 생성해야 합니다. 생성할 때 IPv6
패밀리로 구성하지 않은 기존 클러스터가 있는 경우 IPv6
을 사용하려면 새 클러스터를 생성해야 합니다. 클러스터에서 IPv6
사용에 대한 자세한 내용을 알아보려면 클러스터, pods, 및 서비스에 대한 IPv6 주소에 대해 알아보기 섹션을 참조하세요.
-
다음 텍스트를 복사해
vpc-cni-ipv6-policy.json
파일에 저장합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
-
IAM 정책을 생성합니다.
aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json