Amazon EKS의 로드 밸런서에서 보안 그룹 규칙, 리스너, 기타 변경 사항이 되돌아가지 않도록 하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS)용 로드 밸런서를 변경했는데 변경 사항이 자동으로 되돌아갑니다.

간략한 설명

AWS Load Balancer 컨트롤러를 사용하여 로드 밸런싱 서비스나 수신 리소스를 생성할 때, 컨트롤러에서 기본 매개 변수를 많이 구성합니다. 여기에는 매니페스트 파일에서 지정하지 않은 상태 확인 경로, 기본 시간 제한, 보안 그룹 규칙 등과 같은 매개 변수가 있습니다.

하지만 AWS API 호출을 사용하여 기본 구성을 직접 변경할 수 있습니다. Amazon Elastic Compute Cloud(Amazon EC2) 콘솔, AWS Command Line Interface(AWS CLI), 다른 타사 도구에서 이 API 호출을 사용할 수 있습니다. 이 경우, 다음 클러스터 조정 중에 클러스터가 변경 사항을 원래 값으로 되돌립니다. 자세한 내용은 Kubernetes 클러스터 API 웹 사이트에서 컨트롤러 및 조정을 참고하세요.

Amazon EKS의 로드 밸런서 변경 사항이 되돌아가는 일반적인 문제에는 다음이 있습니다.

  • 로드 밸런서의 사용자 지정 보안 그룹 규칙이 자동으로 0.0.0.0/0으로 되돌아가거나 사라집니다.
  • 로드 밸런서가 리스너 규칙을 자동으로 삭제하거나 추가합니다.
  • 사용자 지정 유휴 시간 제한값이 자동으로 기본값으로 되돌아갑니다.
  • 인증서가 자동으로 이전 버전으로 되돌아갑니다.
  • Amazon EKS에서 값을 되돌려 상태 확인 경로를 업데이트할 수 없습니다.
  • Amazon EKS에서 로드 밸런서의 속성을 통해 역할을 수정합니다.

이와 같은 문제를 해결하려면 로드 밸런서에서 이와 같은 변경을 실행한 원인이 무엇인지 파악하세요. 구체적으로, 변경된 리소스와 관련된 API 호출 및 호출을 실행한 도구를 찾아야 합니다. 그런 다음 매니페스트 파일에서 변경 사항을 반영합니다.

참고: 다음 문제 해결 방법에서 “로드 밸런서”는 Network Load Balancer나 Classic Load Balancer와 같은 로드 밸런싱 서비스를 뜻합니다. 또는 Application Load Balancer와 같은 수신 리소스일 수 있습니다.

해결 방법

로드 밸런서에서 필요한 상태를 정의하려면 매니페스트 파일의 주석에 변경 사항을 지정해야 합니다. 그러지 않으면 주석 때문에 변경하지 않은 기본값으로 되돌아갑니다.

AWS API 호출을 사용해 이 값을 직접 변경하려고 하면 컨트롤러에서 이를 대역 외 변경으로 간주합니다. 다음 조정 중에 Kubernetes 서비스 매니페스트 구성과 동기화하기 위해 컨트롤러에서 변경 사항을 원래 값으로 되돌립니다. 컨트롤러에서 되돌리는 속성에 따라 서비스 다운타임이 길어질 수 있습니다.

AWS 로드 밸런서 컨트롤러에서는 로직 경로를 사용해 조정을 실행합니다. aws-load-balancer-controller가 재시작하는 시나리오에는 다음이 있습니다.

  • 컨트롤 플레인, 워커 노드, 플랫폼 업그레이드
  • 하드웨어 장애나 상태 문제와 같은 내부 문제로 인한 인스턴스 새로 고침
  • 컨트롤러 포드에서 업데이트, 삭제, 패치 API 호출을 유발하는 모든 활동
  • 정기적인 자동 조정
    **참고:**컨트롤러 조정 기간의 기본값은 1시간입니다. 그러나 이 기능은 Amazon EKS 버전 2.4.7 이하에서는 작동하지 않습니다.

이 경우 AWS 로드 밸런서 컨트롤러가 조정을 실행하며, 로드 밸런서에서는 최신 매니페스트 파일 구성을 참조합니다. 이전에 API 호출을 통해 로드 밸런서를 변경했다면, 이 변경 사항이 이전으로 되돌아갑니다.

변경된 원인 파악

업데이트된 리소스와 관련된 API 호출을 찾습니다. AWS CloudTrail에서 변경 사항이 발생한 시간대를 검색합니다. 모든 AWS 로드 밸런서 API 호출에 대한 자세한 내용은 Elastic Load Balancing(ELB) API 참조를 참고하세요. Amazon EC2 API 호출에 대해서는 Amazon EC2 API 참조를 참고하세요.

예를 들어, 컨트롤러에서 SecurityGroup 규칙을 되돌리면 API RevokeSecurityGroupIngress가 호출됩니다. 그러면 해당 CloudTrail 이벤트를 사용하여 API 사용자를 확인할 수 있습니다. 컨트롤러에서 WorkerNode 역할을 사용하는 경우, API 호출을 실행한 노드 역할이 표시됩니다.

....
"type": "AssumedRole",
"arn": "arn:aws:sts::***********:assumed-role/eksctl-mycluster-NodeInstanceRole/i-***********",
"sessionContext": {
    "sessionIssuer": {
        "type": "Role",
        "arn": "arn:aws:iam::***********: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-****",
        "ipPermissions": {
            "items": [{
                        "ipProtocol": "tcp",
                        "fromPort": 443,
                        "toPort": 443,
                        "groups": {},
                        "ipRanges": {
                            "items": [{
                                "cidrIp": "0.0.0.0/0"
                            }]
                        }]

AWS 로드 밸런서 컨트롤러 전용 역할을 사용하는 경우, 서비스 계정의 AWS Identity and Access Management(AWS IAM) 역할을 확인할 수 있습니다.

원치 않는 변경 방지

로드 밸런서의 매개 변수를 대역 외로 변경하지 마세요. 이 사항은 Amazon EC2 콘솔, AWS CLI, AWS API를 직접 호출하는 도구 모두에 적용됩니다.

예를 들어, 보안 그룹 규칙을 업데이트하고 싶다고 가정합시다. .spec.loadBalancerSourceRanges 또는 service.beta.kubernetes.io/load-balancer-source-ranges 주석을 사용하세요. 이 주석을 사용하여 로드 밸런서의 CIDR IP 주소를 제한할 수 있습니다. 이 같은 주석에 대한 자세한 정보는 AWS 로드 밸런서 컨트롤러 GitHub 웹 사이트에서 액세스 제어를 참고하세요.

매니페스트 파일에서 시간 제한 값, 상태 확인 경로, 인증서 ARN 등 기타 속성을 업데이트할 때 적절한 주석만 사용하세요. 지원되는 모든 서비스와 수신 주석에 대한 자세한 내용은 AWS 로드 밸런서 컨트롤러 GitHub 웹 사이트에서 서비스 주석수신 주석을 참고하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전