云容器引擎 CCE-节点访问(NodePort):externalTrafficPolicy(服务亲和)

时间:2023-11-01 16:25:54

externalTrafficPolicy(服务亲和)

NodePort类型的Service接收请求时先从访问到节点,然后转到Service,再由Service选择一个Pod转发到该Pod,选择的Pod不一定在接收请求的节点上。默认情况下,从任意节点IP+服务端口都能访问到后端工作负载,当Pod不在接收请求的节点上时,请求会在跳转到Pod所在的节点,带来一定性能损失。

Service有一个配置参数externalTrafficPolicy,如下所示。

apiVersion: v1kind: Servicemetadata:  name: nginx-nodeportspec:  externalTrafficPolicy: local  ports:  - name: service    nodePort: 30000    port: 80    protocol: TCP    targetPort: 80  selector:    app: nginx  type: NodePort

当externalTrafficPolicy取值为local时,通过节点IP:服务端口的请求只会转发给本节点上的Pod,如果节点没有Pod的话请求会挂起。

externalTrafficPolicy还有一个取值是cluster,也是默认取值,就是前面说的请求会在集群内转发。

在CCE 控制台创建NodePort类型Service时也可以配置该参数。

总结externalTrafficPolicy两个取值。

  • cluster(集群级别):集群下所有节点的IP+访问端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。
  • local(节点级别):只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。
support.huaweicloud.com/usermanual-cce/cce_01_0142.html