

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 使用服务注释配置网络负载均衡器
<a name="auto-configure-nlb"></a>

了解如何使用 Kubernetes 服务注释在 Amazon EKS 中配置网络负载均衡器（NLB）。本主题介绍 EKS 自动模式支持的用于自定义 NLB 行为的注释，包括互联网可访问性、运行状况检查、SSL/TLS 终止和 IP 目标模式。

在 EKS 自动模式下创建类型为 `LoadBalancer` 的 Kubernetes 服务时，EKS 会根据您指定的注释自动预置和配置 AWS 网络负载均衡器。借助这种声明式方法，您可以直接通过 Kubernetes 清单来管理负载均衡器配置，确保遵循基础设施即代码实践。

对于所有 LoadBalancer 类型的服务，EKS 自动模式会默认处理网络负载均衡器预置，无需额外的控制器安装或配置。`loadBalancerClass: eks.amazonaws.com/nlb` 规范会自动设置为集群的默认值，这不仅简化了部署过程，同时也保持了与现有 Kubernetes 工作负载的兼容性。

**注意**  
EKS 自动模式需要子网标签来标识公有子网和私有子网。  
如果使用 `eksctl` 创建集群，则已包含这些标签。  
了解如何[为 EKS 自动模式的子网添加标签](tag-subnets-auto.md)。

## 示例服务
<a name="_sample_service"></a>

有关 Kubernetes `Service` 资源的更多信息，请参阅 [Kubernetes 文档](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 自动模式支持的常用注释。请注意，EKS 自动模式可能并非支持所有注释。

**提示**  
以下所有注释都需要加上前缀 `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`   |  来自 AWS Certication Manager 的适用于 HTTPS/TLS 的 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>
+ 您必须更新集群 IAM 角色才能支持将标签从 Kubernetes 传播到 AWS 负载均衡器资源。有关更多信息，请参阅 [EKS 自动模式资源的自定义 AWS 标签](auto-cluster-iam-role.md#tag-prop)。
+ 有关将资源关联到 EKS 自动模式或自主管理型 AWS 负载均衡器控制器的信息，请参阅[迁移参考](migrate-auto.md#migration-reference)。
+ 有关修复负载均衡器问题的信息，请参阅 [EKS 自动模式故障排除](auto-troubleshoot.md)。
+ 有关使用 EKS 自动模式的负载均衡功能时的其他注意事项，请参阅[负载均衡](auto-networking.md#auto-lb-consider)。

将负载均衡模式迁移到 EKS 自动模式进时，需要对服务注释和资源配置进行一些更改。下表总结了旧版和新版实现之间的主要区别，包括不支持的选项和建议的替代方案。

### 服务注释
<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 资源或集群被删除时，控制器将删除目标组。