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 버전을 사용하고 있는지 확인하세요.
환경 설정하기
환경을 설정하려면 다음 단계를 완료하세요.
- Amazon EKS 클러스터를 생성합니다.
- 워커 노드를 생성한 다음 실행합니다.
- kubectl을 설정합니다.
- AWS CLI를 설정합니다.
- 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 필드 추가
-
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"
-
다음 명령을 실행하여 svc.yaml 파일을 적용합니다.
$ kubectl apply -f svc.yaml
다음 명령을 실행하여 AWS Load Balancer Controller 포드 로그를 확인합니다.
$ kubectl logs -f <aws load balancer controller pod> -n <namespace>
-
AWS Load Balancer Controller는 구성된 로드 밸런서 소스 범위를 보안 그룹의 인바운드 규칙에 추가합니다. 다음 명령을 실행하여 보안 그룹의 인바운드 규칙이 수정되었는지 확인합니다.
$ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
...
"CidrIp": "143.231.0.0/16"
...
-
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개를 초과할 수 없습니다.
관련 정보
사용자가 클러스터에 액세스할 수 있도록 허용