

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

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **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 \$1 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 리소스 또는 클러스터가 삭제되면 컨트롤러가 대상 그룹을 삭제합니다.