Amazon EKS의 LoadBalancer 유형 서비스에 대한 CIDR IP 주소를 제한하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS)의 LoadBalancer 유형 서비스에 대한 CIDR IP 주소를 제한하고 싶습니다.

간략한 설명

LoadBalancer 유형 서비스를 생성하는 경우 기본적으로 소스 0.0.0.0/0의 요청이 허용됩니다. 로드 밸런서가 퍼블릭 서브넷에 있는 경우 인터넷의 어느 곳에서나 요청이 워커 노드로 라우팅됩니다.

**0.0.0.0/0 ** 대신 소스를 제한하려면 loadBalancerSourceRanges를 사용하세요.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

환경 설정하기

환경을 설정하려면 다음 단계를 완료하세요.

  1. Amazon EKS 클러스터를 생성합니다.
  2. 워커 노드를 생성한 다음 실행합니다.
  3. kubectl을 설정합니다.
  4. AWS CLI를 설정합니다.
  5. AWS Load Balancer Controller 설정.
    참고: LoadBalancer 유형 서비스의 경우, AWS Load Balancer Controller는 Network Load Balancer(NLB) IP 모드 버전 2.0.0 이상과 NLB 인스턴스 모드 2.2.0 이상을 지원합니다.

중요: LoadBalancer 유형 서비스에 새 Network Load Balancer를 할당하려면 Kubernetes 서비스 로드 밸런서 컨트롤러 대신 AWS Load Balancer Controller를 사용하는 것이 좋습니다. AWS Balancer Controller의 최신 버전은 GitHub 웹 사이트에서 aws-load-balancer-controller를 참조하세요.

CIDR IP 주소 제한

다음 방법 중 하나를 선택하여 loadBalancerSourceRanges를 지정합니다.

주석 사용

해당 서비스 매니페스트 파일(svc.yaml)에서 주석을 사용하세요.

주석 예제:

service.beta.kubernetes.io/load-balancer-source-ranges: 143.231.0.0/16

자세한 내용은 Kubernetes 웹사이트의 액세스 제어를 참조하세요.

loadBalancerSourceRanges 필드 추가

  1. svc.yaml 파일에 .spec.LoadBalancerSourceRanges 필드를 추가합니다.

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerSourceRanges:
      - "143.231.0.0/16"
  2. 다음 명령을 실행하여 svc.yaml 파일을 적용합니다.

    $ kubectl apply -f svc.yaml

    다음 명령을 실행하여 AWS Load Balancer Controller 포드 로그를 확인합니다.

    $ kubectl logs -f <aws load balancer controller pod> -n <namespace>
  3. AWS Load Balancer Controller는 구성된 로드 밸런서 소스 범위를 보안 그룹의 인바운드 규칙에 추가합니다. 다음 명령을 실행하여 보안 그룹의 인바운드 규칙이 수정되었는지 확인합니다.

    $ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
    ...
        "CidrIp": "143.231.0.0/16"
    ...
  4. IP 모드에서 네트워크 로드 밸런서를 사용하는 경우, .spec.LoadBalancerSourceRanges 필드는 기본적으로 무시됩니다. 이 경우 다음 주석을 사용하여 client IP preservation을 켭니다.

    service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true

    Network Load Balancer 유형의 서비스의 경우 최대 보안 그룹 제한을 늘려야 할 수 있습니다. 컨트롤러는 각 노드 포트 및 서브넷 CIDR 범위에 대해 워커 노드의 보안 그룹에 규칙을 생성합니다. 자세한 내용은 Kubernetes 웹사이트의 인그레스 트래픽을 참조하세요.

    참고: Network Load Balancer 유형의 서비스의 경우 최대 보안 그룹 할당량을 늘려야 할 수 있습니다. 컨트롤러는 각 노드 포트 및 서브넷 CIDR 범위에 대해 워커 노드의 보안 그룹에 규칙을 생성합니다. 예를 들어, 세 개의 가용 영역에 워커 노드가 있습니다. loadBalancerSourceRange를 추가합니다. 상태 확인 규칙 3개(서브넷당 하나) 및 loadBalancerSourceRange 규칙 1개가 워커 노드 보안 그룹에 생성됩니다. 보안 그룹의 기본 제한은 60개입니다. 이 할당량을 늘릴 수 있지만 네트워크 인터페이스당 총 보안 그룹 수는 1,000개를 초과할 수 없습니다.

관련 정보

사용자가 클러스터에 액세스할 수 있도록 허용

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