
TKE Service Controller 默认不会将以下节点作为负载均衡后端:TKE Service Controller 可以绑定状态为 Unschedulable 的节点。Unschedulable 的节点也可以作为流量的入口,因为流量进入到节点之后,会再做一层容器网络里的流量转发,流量在 Unschedulable 的节点里面不会被丢弃,如上图所示。service.kubernetes.io/qcloud-loadbalancer-backends-label 注解指定一部分节点进行绑定。service.kubernetes.io/qcloud-loadbalancer-backends-label 的内容是一个标签选择器,用户可以通过在集群节点上标记 Label,然后在 Service 中通过该注解描述的标签选择器,选择匹配的节点进行绑定。这个同步会持续进行,当节点发生变化导致其被选择或是不再被选择时,Service Controller 会对应添加或删除负载均衡上的对应后端。详情请参见 Kubernetes 标签与选择器。service.kubernetes.io/qcloud-loadbalancer-backends-label 的选择器没有选取到任何节点的时候,服务的后端将会被排空,会使得服务中断。使用此功能时,需要对集群节点的 Label 有一定的管理。apiVersion: v1kind: Servicemetadata:annotations:service.kubernetes.io/qcloud-loadbalancer-backends-label: "group=access-layer"name: nginx-servicespec:ports:- name: 80-80-noport: 80protocol: TCPtargetPort: 80selector:app: nginxtype: LoadBalancer
service.kubernetes.io/qcloud-loadbalancer-backends-label 注解声明了后端选择器,仅支持集群节点上有 group=access-layer Label 的节点才会作为这个负载均衡的后端。ExternalTrafficPolicy。当 ExternalTrafficPolicy 设置为 Local 时,可以避免流量通过 NAT 在节点间的转发,减少了 NAT 操作也使得源 IP 得到了保留。NodePort 仅会将流量转发到当前节点的 Pod。Local 模式特点如下:apiVersion: v1kind: Servicemetadata:name: nginx-servicespec:externalTrafficPolicy: Localports:- name: 80-80-noport: 80protocol: TCPtargetPort: 80selector:app: nginxtype: LoadBalancer
service.kubernetes.io/local-svc-only-bind-node-with-pod: "true" 注解,在 Local 模式下指定绑定有工作负载节点作为后端。更多信息请参考 Kubernetes Service Local。apiVersion: v1kind: Servicemetadata:annotations:service.kubernetes.io/local-svc-only-bind-node-with-pod: "true"name: nginx-servicespec:externalTrafficPolicy: Localports:- name: 80-80-noport: 80protocol: TCPtargetPort: 80selector:app: nginxtype: LoadBalancer
service.cloud.tencent.com/local-svc-weighted-balance: "true" 进行加权平衡。使用此注解时,NodePort 后端的权重将由节点上工作负载的数量决定,从而避免不同节点上工作负载数量不同带来的负载不均的问题。其中,Local 加权平衡必须和 Local 绑定同时使用。示例如下:apiVersion: v1kind: Servicemetadata:annotations:service.kubernetes.io/local-svc-only-bind-node-with-pod: "true"service.cloud.tencent.com/local-svc-weighted-balance: "true"name: nginx-servicespec:externalTrafficPolicy: Localports:- name: 80-80-noport: 80protocol: TCPtargetPort: 80selector:app: nginxtype: LoadBalancer
文档反馈