보안 그룹 규칙, 리스너 또는 기타 파라미터에 대해 변경한 내용을 Amazon Elastic Kubernetes Service(Amazon EKS)의 로드 밸런서에 적용하고 싶습니다.
간략한 설명
참고: 다음 해결 방법에서 ‘로드 밸런서’는 로드 밸런싱 서비스 및 인그레스 리소스를 의미합니다. 예를 들어 Network Load Balancer는 로드 밸런싱 서비스이고 Application Load Balancer는 인그레스 리소스입니다.
로드 밸런서의 기본 파라미터를 변경하려면 매니페스트 파일의 주석에 변경 사항을 지정해야 합니다. 이러한 파라미터에는 상태 확인 경로, 기본 제한 시간 값, 인증서 Amazon 리소스 이름(ARN) 및 보안 그룹 규칙이 포함됩니다.
Amazon EKS의 로드 밸런서 변경 사항이 되돌아가면 다음과 같은 문제가 발생합니다.
- 로드 밸런서의 사용자 지정 보안 그룹 규칙이 0.0.0.0/0으로 되돌아가거나 사라집니다.
- 로드 밸런서가 리스너 규칙을 삭제하거나 추가합니다.
- 사용자 지정 유휴 타임아웃 값이 기본값으로 되돌아갑니다.
- SSL/TLS 인증서가 자동으로 이전 버전으로 되돌아갑니다.
- 상태 확인 경로를 업데이트할 수 없습니다.
- Amazon EKS에서 로드 밸런서의 속성을 통해 역할을 수정합니다.
- 서비스에 가동 중지 시간이 발생합니다.
이러한 문제를 해결하려면 먼저 리소스를 변경하는 API 작업과 직접 호출을 수행한 도구를 확인해야 합니다. 그런 다음 매니페스트 파일에서 변경 사항을 다시 구현합니다.
해결 방법
AWS API 작업으로 로드 밸런서의 기본 구성을 변경하면 컨트롤러가 다음 클러스터 조정 시 변경 사항을 되돌립니다. 컨트롤러는 AWS API 작업을 직접적으로 호출하는 Amazon Elastic Compute Cloud(Amazon EC2) 콘솔 및 AWS Command Line Interface(AWS CLI)와 같은 도구에서 사용자가 변경한 내용을 되돌립니다. 자세한 내용은 Kubernetes 웹 사이트의 Controllers를 참조하십시오.
다음 시나리오에서는 AWS 로드 밸런서 컨트롤러가 클러스터 조정을 활성화하고 aws-load-balancer-controller 포드를 다시 시작합니다.
- 컨트롤 플레인, 워커 노드 또는 플랫폼 업그레이드
- EC2 인스턴스 새로 고침을 유발하는 하드웨어 장애 또는 상태 문제와 같은 기본 문제
- 컨트롤러 포드에서 API 직접 호출을 업데이트, 삭제 또는 패치하는 활동
- 정기적인 자동 조정
참고: 컨트롤러 조정 기간의 기본값은 1시간입니다. Amazon EKS는 Amazon EKS 버전 2.4.7 및 이전 버전에서는 주기적 조정을 지원하지 않습니다.
컨트롤러가 변경 사항을 되돌렸는지 확인
업데이트된 리소스와 관련된 API 직접 호출을 찾습니다. AWS CloudTrail Event History에서 변경 사항이 발생한 기간과 일치하는 이벤트가 있는지 검토합니다. 모든 AWS 로드 밸런서 API 직접 호출에 대한 자세한 내용은 Elastic Load Balancing(ELB) API 참조를 참고하십시오. Amazon EC2 API 직접 호출에 대한 자세한 내용은 Amazon EC2 API 참조를 참고하십시오.
AWS 로드 밸런서 컨트롤러의 전용 역할을 사용하는 경우 API를 직접 호출한 서비스 AWS 계정의 AWS Identity and Access Management(IAM) 역할이 이벤트에 포함됩니다. 컨트롤러에서 WorkerNode 역할을 사용하는 경우 API 직접 호출을 실행한 노드 역할이 이벤트에 포함됩니다. 다음 예제 이벤트는 eksctl-mycluster-nodegr-NodeInstanceRole 사용자가 RevokeSecurityGroupIngress 작업을 직접적으로 호출하여 인스턴스의 파라미터를 업데이트했음을 나타냅니다.
...."type": "AssumedRole",
"arn": "arn:aws:sts::123456789012:assumed-role/eksctl-mycluster-NodeInstanceRole/i-0ab1c2d3e4f5a6b7c",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"arn": "arn:aws:iam::123456789012:role/eksctl-mycluster-nodegr-NodeInstanceRole",
"userName": "eksctl-mycluster-nodegr-NodeInstanceRole"
},
...
"eventName": "RevokeSecurityGroupIngress",
"userAgent": "elbv2.k8s.aws/v2.4.5 aws-sdk-go/1.42.27 (go1.19.3; linux; amd64)",
"requestParameters": {
"groupId": "sg-0ab1c2d3e4f5a6b7c",
"ipPermissions": {
"items": [{
"ipProtocol": "tcp",
"fromPort": 443,
"toPort": 443,
"groups": {},
"ipRanges": {
"items": [{
"cidrIp": "0.0.0.0/0"
}]
}
}]
}
}
}
주석을 업데이트하여 변경 사항 유지
API 작업으로 인한 변경 사항을 컨트롤러가 되돌린 것이 확인되면 매니페스트 파일의 인그레스 주석을 업데이트하여 변경 사항을 다시 만드십시오.
중요: 변경 사항을 다시 만들 때는 Amazon EKS에서 지원하는 매니페스트 파일의 주석만 사용하여 파라미터를 업데이트하십시오. Amazon EKS에서 지원하는 주석 목록은 AWS 로드 밸런서 컨트롤러 GitHub 웹 사이트의 Service annotations 및 Ingress annotations를 참조하십시오.