云容器引擎 CCE-节点访问(NodePort):externalTrafficPolicy(服务亲和)
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。