

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# 서비스 주석을 사용하여 Network Load Balancer 구성
<a name="auto-configure-nlb"></a>

Kubernetes 서비스 주석을 사용하여 Amazon EKS에서 Network Load Balancer(NLB)를 구성하는 방법을 알아봅니다. 이 주제에서는 인터넷 접근성, 상태 확인, SSL/TLS 종료, IP 대상 지정 모드를 포함하여 NLB 동작을 사용자 지정하기 위해 EKS Auto Mode에서 지원하는 주석에 대해 설명합니다.

EKS Auto Mode에서 `LoadBalancer` 유형의 Kubernetes 서비스를 생성하면 EKS는 사용자가 지정한 주석을 기반으로 AWS Network Load Balancer를 자동으로 프로비저닝하고 구성합니다. 이 선언적 접근 방식을 사용하면 Kubernetes 매니페스트를 통해 직접 로드 밸런서 구성을 관리하여 코드형 인프라 관행을 유지할 수 있습니다.

EKS Auto Mode는 기본적으로 LoadBalancer 유형의 모든 서비스에 대해 Network Load Balancer 프로비저닝을 처리합니다. 추가 컨트롤러 설치 또는 구성은 필요하지 않습니다. `loadBalancerClass: eks.amazonaws.com/nlb` 사양은 클러스터 기본값으로 자동 설정되므로 기존 Kubernetes 워크로드와의 호환성을 유지하면서 배포 프로세스를 간소화합니다.

**참고**  
EKS 자동 모드에서는 퍼블릭 및 프라이빗 서브넷을 식별하기 위해 서브넷 태그가 필요합니다.  
`eksctl`로 클러스터를 생성한 경우 이미 이러한 태그가 있는 것입니다.  
[EKS 자동 모드의 태그 서브넷](tag-subnets-auto.md) 방법에 대해 알아봅니다.

## 샘플 서비스
<a name="_sample_service"></a>

Kubernetes `Service` 리소스에 대한 자세한 내용은 [the Kubernetes Documentation](https://kubernetes.io/docs/concepts/services-networking/service/)를 참조하세요.

아래의 샘플 `Service` 리소스를 검토합니다.

```
apiVersion: v1
kind: Service
metadata:
  name: echoserver
  annotations:
    # Specify the load balancer scheme as internet-facing to create a public-facing Network Load Balancer (NLB)
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
  selector:
    app: echoserver
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
  type: LoadBalancer
  # Specify the new load balancer class for NLB as part of EKS Auto Mode feature
  # For clusters with Auto Mode enabled, this field can be omitted as it's the default
  loadBalancerClass: eks.amazonaws.com/nlb
```

## 일반적으로 사용되는 주석
<a name="_commonly_used_annotations"></a>

다음 표에는 EKS Auto Mode에서 지원하는 일반적으로 사용되는 주석이 나열되어 있습니다. EKS Auto Mode가 일부 주석을 지원하지 않을 수 있습니다.

**작은 정보**  
다음 주석은 모두 `service.beta.kubernetes.io/` 접두사로 지정해야 합니다.


| 필드 | 설명 | 예제 | 
| --- | --- | --- | 
|  `aws-load-balancer-type`  | 로드 밸런서 유형을 지정합니다. 새 배포에 `external`을 사용합니다. |  `external`  | 
|  `aws-load-balancer-nlb-target-type`  | 트래픽을 노드 인스턴스로 라우팅할지 아니면 포드 IP로 직접 라우팅할지 지정합니다. 표준 배포에 `instance` 또는 직접 포드 라우팅에 `ip`를 사용합니다. |  `instance`  | 
|  `aws-load-balancer-scheme`  | 로드 밸런서가 내부인지 인터넷 연결인지를 제어합니다. |  `internet-facing`  | 
|  `aws-load-balancer-healthcheck-protocol`  | 대상 그룹에 대한 상태 확인 프로토콜입니다. 일반적인 옵션은 `TCP`(기본값) 또는 `HTTP`입니다. |  `HTTP`  | 
|  `aws-load-balancer-healthcheck-path`  | HTTP/HTTPS 프로토콜을 사용할 때 상태 확인을 위한 HTTP 경로입니다. |  `/healthz`  | 
|  `aws-load-balancer-healthcheck-port`  | 상태 확인에 사용되는 포트입니다. 특정 포트 번호 또는 `traffic-port`일 수 있습니다. |  `traffic-port`  | 
|  `aws-load-balancer-subnets`  | 로드 밸런서를 생성할 서브넷을 지정합니다. 서브넷 ID 또는 이름일 수 있습니다. |  `subnet-xxxx, subnet-yyyy`  | 
|  `aws-load-balancer-ssl-cert`  | HTTPS/TLS용 AWS Certificate Manager의 SSL 인증서 ARN입니다. |  ` arn:aws:acm:region:account:certificate/cert-id`  | 
|  `aws-load-balancer-ssl-ports`  | SSL/TLS를 사용해야 하는 포트를 지정합니다. |  `443, 8443`  | 
|  `load-balancer-source-ranges`  | 로드 밸런서에 액세스할 수 있는 CIDR 범위입니다. |  `10.0.0.0/24, 192.168.1.0/24`  | 
|  `aws-load-balancer-additional-resource-tags`  | 로드 밸런서 및 관련 리소스에 적용할 추가 AWS 태그입니다. |  `Environment=prod,Team=platform`  | 
|  `aws-load-balancer-ip-address-type`  | 로드 밸런서가 IPv4 또는 듀얼 스택(IPv4 \+ IPv6)을 사용할지 여부를 지정합니다. |  `ipv4` 또는 `dualstack`  | 

## 고려 사항
<a name="_considerations"></a>
+ Kubernetes에서 AWS 로드 밸런서 리소스로 태그 전파를 활성화하려면 클러스터 IAM 역할을 업데이트해야 합니다. 자세한 내용은 [EKS Auto 리소스에 대한 사용자 지정 AWS 태그](auto-cluster-iam-role.md#tag-prop) 섹션을 참조하세요.
+ EKS Auto Mode 또는 자체 관리형 AWS 로드 밸런서 컨트롤러와 리소스를 연결하는 방법에 대한 자세한 내용은 [마이그레이션 참조](migrate-auto.md#migration-reference) 섹션을 참조하세요.
+ 로드 밸런서 관련 문제 해결에 대한 자세한 내용은 [EKS Auto Mode 문제 해결](auto-troubleshoot.md) 섹션을 참조하세요.
+ EKS Auto Mode의 로드 밸런싱 기능 사용에 대한 자세한 고려 사항은 [로드 밸런싱](auto-networking.md#auto-lb-consider) 섹션을 참조하세요.

로드 밸런싱을 위해 EKS Auto Mode로 마이그레이션할 때 서비스 주석 및 리소스 구성을 여러 번 변경해야 합니다. 다음 표에는 지원되지 않는 옵션과 권장 대안을 포함하여 이전 구현과 새 구현 간의 주요 차이점이 요약되어 있습니다.

### 서비스 주석
<a name="_service_annotations"></a>


| 이전 | New | 설명 | 
| --- | --- | --- | 
|  `service.beta.kubernetes.io/load-balancer-source-ranges`  | 지원되지 않음 | 서비스에서 `spec.loadBalancerSourceRanges` 사용 | 
|  `service.beta.kubernetes.io/aws-load-balancer-type`  | 지원되지 않음 | 서비스에서 `spec.loadBalancerClass` 사용 | 
|  `service.beta.kubernetes.io/aws-load-balancer-internal`  | 지원되지 않음 | `service.beta.kubernetes.io/aws-load-balancer-scheme` 사용  | 
|  `service.beta.kubernetes.io/aws-load-balancer-proxy-protocol`  | 지원되지 않음 | 대신 `service.beta.kubernetes.io/aws-load-balancer-target-group-attributes` 사용 | 
| 다양한 로드 밸런서 속성 | 지원되지 않음 | `service.beta.kubernetes.io/aws-load-balancer-attributes` 사용  | 
|  `service.beta.kubernetes.io/aws-load-balancer-access-log-enabled`  | 지원되지 않음 | 대신 `service.beta.kubernetes.io/aws-load-balancer-attributes` 사용 | 
|  `service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-name`  | 지원되지 않음 | 대신 `service.beta.kubernetes.io/aws-load-balancer-attributes` 사용 | 
|  `service.beta.kubernetes.io/aws-load-balancer-access-log-s3-bucket-prefix`  | 지원되지 않음 | 대신 `service.beta.kubernetes.io/aws-load-balancer-attributes` 사용 | 
|  `service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled`  | 지원되지 않음 | 대신 `service.beta.kubernetes.io/aws-load-balancer-attributes` 사용 | 

더 이상 사용되지 않는 로드 밸런서 속성 주석에서 마이그레이션하려면 이러한 설정을 `service.beta.kubernetes.io/aws-load-balancer-attributes` 주석으로 통합합니다. 이 주석은 다양한 로드 밸런서 속성에 대해 쉼표로 구분된 키-값 페어 목록을 허용합니다. 예를 들어 액세스 로깅, 교차 영역 로드 밸런싱을 지정하려면 다음 형식을 사용합니다.

```
service.beta.kubernetes.io/aws-load-balancer-attributes: access_logs.s3.enabled=true,access_logs.s3.bucket=my-bucket,access_logs.s3.prefix=my-prefix,load_balancing.cross_zone.enabled=true
```

이 통합 형식은 필요한 개별 주석 수를 줄이면서 로드 밸런서 속성을 구성하는 더욱 일관되고 유연한 방법을 제공합니다. 기존 서비스 구성을 검토하고 이 통합 형식을 사용하도록 업데이트합니다.

### TargetGroupBinding
<a name="_targetgroupbinding"></a>


| 이전 | New | 설명 | 
| --- | --- | --- | 
|  `elbv2.k8s.aws/v1beta1`  |  `eks.amazonaws.com/v1`  | API 버전 변경 | 
|  `spec.targetType` 선택 사항 |  `spec.targetType` 필수 | 명시적 대상 유형 사양 | 
|  `spec.networking.ingress.from`  | 지원되지 않음 | 보안 그룹 없이 더 이상 NLB를 지원하지 않음 | 

참고: 사용자 지정 TargetGroupBinding 기능을 사용하려면 대상 그룹에 클러스터 이름을 포함하는 `eks:eks-cluster-name` 태그를 지정하여 컨트롤러에 필요한 IAM 권한을 부여해야 합니다. TargetGroupBinding 리소스 또는 클러스터가 삭제되면 컨트롤러가 대상 그룹을 삭제합니다.