使用服务注释配置网络负载均衡器 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

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

使用服务注释配置网络负载均衡器

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

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

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

注意

EKS 自动模式需要子网标签来标识公有子网和私有子网。

如果使用 eksctl 创建集群,则已包含这些标签。

了解如何为 EKS 自动模式的子网添加标签

示例服务

有关 Kubernetes Service 资源的更多信息,请参阅 Kubernetes 文档

请参阅下面的示例 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

常用注释

下表列举了 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

来自 Amazon 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

要应用于负载均衡器和相关资源的其他 Amazon 标签。

Environment=prod,Team=platform

aws-load-balancer-ip-address-type

指定负载均衡器是使用 IPv4 还是双栈(IPv4 + IPv6)地址。

ipv4dualstack

注意事项

  • 您必须更新集群 IAM 角色才能支持将标签从 Kubernetes 传播到 Amazon 负载均衡器资源。有关更多信息,请参阅 EKS 自动模式资源的自定义 Amazon 标签

  • 有关将资源关联到 EKS 自动模式或自主管理型 Amazon 负载均衡器控制器的信息,请参阅迁移参考

  • 有关修复负载均衡器问题的信息,请参阅 EKS 自动模式故障排除

  • 有关使用 EKS 自动模式的负载均衡功能时的其他注意事项,请参阅负载均衡

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

服务注释

旧版 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-attributes

service.beta.kubernetes.io/aws-load-balancer-proxy-protocol

不支持

请改用 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
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: | proxy_protocol_v2.enabled=true

这种合并后的格式让您可以更加一致、灵活地配置负载均衡器属性,同时减少所需的单独注释数量。检查您现有的服务配置并进行更新以使用此合并后的格式。

TargetGroupBinding

旧版 New 描述

elbv2.k8s.aws/v1beta1

eks.amazonaws.com/v1

API 版本更改

spec.targetType 可选

spec.targetType 必需

显式目标类型规范

spec.networking.ingress.from

不支持

不再支持没有安全组的 NLB