1.32 릴리즈된 내용 검토 https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/kubernetes-versions-standard.html
버전 1.32에서 FlowSchema 및 PriorityLevelConfiguration의 flowcontrol.apiserver.k8s.io/v1beta3 API 버전이 제거 이 API를 사용하는 경우 업그레이드하기 전에 지원되는 최신 버전을 사용하도록 구성을 업데이트 ㄴ 영향도 없음 (해당 API 미사용)
# FlowSchema / PriorityLevelConfiguration 존재 여부 확인
# API 버전 상관없이 모든 리소스 확인
kubectl get flowschemas -o json | jq -r '.items[] | "\\(.metadata.name) - \\(.apiVersion)"'
kubectl get prioritylevelconfigurations -o json | jq -r '.items[] | "\\(.metadata.name) - \\(.apiVersion)"'
ㄴ 정상 출력 확인
# v1beta3 버전 사용하는 리소스가 있는지 확인
kubectl get flowschemas -o json | jq -r '.items[] | select(.apiVersion == "[flowcontrol.apiserver.k8s.io/v1beta3](<http://flowcontrol.apiserver.k8s.io/v1beta3>)") | .metadata.name'
kubectl get prioritylevelconfigurations -o json | jq -r '.items[] | select(.apiVersion == "[flowcontrol.apiserver.k8s.io/v1beta3](<http://flowcontrol.apiserver.k8s.io/v1beta3>)") | .metadata.name'
ㄴ v1beta3를 사용하는 FlowSchema가 없음
ServiceAccount metadata.annotations[kubernetes.io/enforce-mountable-secrets]는 버전 1.32에서 더 이상 사용되지 않으며 향후 Kubernetes 마이너 버전 릴리스에서 제거될 예정 ㄴ 영향도 없음 (ServiceAccount 리소스에서 해당 annotation 미사용)
# null이 아닌 annotations를 가진 SA 찾기
kubectl get serviceaccounts -A -o json | jq -r '.items[] | select(.metadata.annotations != null) | "\\(.metadata.namespace)/\\(.metadata.name)"' | head -10
ㄴ 정상 출력 확인
# 모든 네임스페이스의 ServiceAccount에서 해당 annotation 확인
kubectl get serviceaccounts -A -o json | \\
jq -r '.items[] | select(.metadata.annotations["[kubernetes.io/enforce-mountable-secrets](<http://kubernetes.io/enforce-mountable-secrets>)"] != null) |
"\\(.metadata.namespace)/\\(.metadata.name)"'
# 또는 상세 정보 포함
kubectl get serviceaccounts -A -o json | \\
jq '.items[] | select(.metadata.annotations["[kubernetes.io/enforce-mountable-secrets](<http://kubernetes.io/enforce-mountable-secrets>)"] != null) |
{namespace: .metadata.namespace, name: .metadata.name, annotation: .metadata.annotations["[kubernetes.io/enforce-mountable-secrets](<http://kubernetes.io/enforce-mountable-secrets>)"]}'
ㄴ 해당 annotation을 사용하는 ServiceAccount가 없음
Kubernetes 버전 1.32는 Amazon EKS가 Amazon Linux 2(AL2) AMI를 출시하는 마지막 버전 ㄴ 영향도 없음 ㄴ 사전에 AL2023 AMI 로 노드그룹 전환 완료
1.32 버전 추가 반영사항 (4-1)Memory Manager 기능은 Kubernetes 버전 1.32의 정식 버전(GA) 상태로 전환 (4-2) StatefulSets에서 생성한 PersistentVolumeClaims(PVC)에 자동 정리 기능이 포함 (4-3) 사용자 지정 리소스 필드 선택기(Field Selectors) 기능이 도입되어 개발자가 사용자 지정 리소스에 필드 선택기를 추가할 수 있음
익명 인증 관련 변경 사항 Amazon EKS 1.32부터 익명 인증은 다음 API 서버 상태 확인 엔드포인트로 제한 /healthz, /livez, /readyz ㄴ 해당 엔드포인트를 사용하지 않으면, 엔드포인트에 대한 요청은 401 Unauthorized HTTP 응답을 수신 ㄴ 노드 Target Group의 health check path가 /healthz ㄴ 영향도 없음 (/healthz는 1.32 이후에도 익명 접근 가능하므로 헬스체크는 정상 동작)
system:unauthenticated 권한 확인
ㄴ public-info-viewer RBAC 역할은 위에 나열된 상태 확인 엔드포인트에 계속 적용
# # kubectl get clusterrolebindings -o json | \\
> jq -r '.items[] | select(.subjects[]?.name == "system:unauthenticated" or .subjects[]?.name == "system:anonymous") | .metadata.name'
system:public-info-viewer
업그레이드할 EKS 버전에 맞는 Add-On(coredns, kube-proxy, vpc-cni) 버전 확인 및 검토
Cluster Version 및 Add-Ons 버전 확인 (1.31 > 1.32)
cluster_version = "1.31"
ㄴ 1.32
변경할 Add-On 버전 조사
coredns_version = "v1.11.3-eksbuild.1"
ㄴ "v1.11.4-eksbuild.2" # 1.32 default 버전
kube-proxy_version = "v1.31.2-eksbuild.3"
ㄴ "v1.32.6-eksbuild.12" # 1.32 default 버전
vpc-cni_version = "v1.19.0-eksbuild.1"
ㄴ "v1.20.4-eksbuild.1" # 1.32 default 버전
aws 명령어로 차세대 bastion 에서 확인함
$ eksctl utils describe-addon-versions --kubernetes-version 1.32 --name coredns |grep AddonVersion
aws eks describe-addon-versions --kubernetes-version 1.32 --addon-name coredns --output json
$ eksctl utils describe-addon-versions --kubernetes-version 1.32 --name kube-proxy |grep AddonVersion
aws eks describe-addon-versions --kubernetes-version 1.32 --addon-name kube-proxy --output json