--- title: 服务内部流量策略 content_type: concept weight: 45 --- {{< feature-state for_k8s_version="v1.21" state="alpha" >}} _服务内部流量策略_ 开启了内部流量限制,只路由内部流量到和发起方处于相同节点的服务端点。 这里的”内部“流量指当前集群中的 Pod 所发起的流量。 这种机制有助于节省开销,提升效率。 ## 使用服务内部流量策略 {#using-service-internal-traffic-policy} 一旦你启用了 `ServiceInternalTrafficPolicy` 这个 [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/), 你就可以通过将 {{< glossary_tooltip text="Services" term_id="service" >}} 的 `.spec.internalTrafficPolicy` 项设置为 `Local`, 来为它指定一个内部专用的流量策略。 此设置就相当于告诉 kube-proxy 对于集群内部流量只能使用本地的服务端口。 {{< note >}} 如果某节点上的 Pod 均不提供指定 Service 的服务端点, 即使该 Service 在其他节点上有可用的服务端点, Service 的行为看起来也像是它只有 0 个服务端点(只针对此节点上的 Pod)。 {{< /note >}} 以下示例展示了把 Service 的 `.spec.internalTrafficPolicy` 项设为 `Local` 时, Service 的样子: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 internalTrafficPolicy: Local ``` ## 工作原理 {#how-it-works} kube-proxy 基于 `spec.internalTrafficPolicy` 的设置来过滤路由的目标服务端点。 当它的值设为 `Local` 时,只选择节点本地的服务端点。 当它的值设为 `Cluster` 或缺省时,则选择所有的服务端点。 启用[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/) `ServiceInternalTrafficPolicy` 后, `spec.internalTrafficPolicy` 的值默认设为 `Cluster`。 ## 限制 {#constraints} * 在一个Service上,当 `externalTrafficPolicy` 已设置为 `Local`时,服务内部流量策略无法使用。 换句话说,在一个集群的不同 Service 上可以同时使用这两个特性,但在一个 Service 上不行。 ## {{% heading "whatsnext" %}} * 请阅读[启用拓扑感知提示](/zh/docs/tasks/administer-cluster/enabling-topology-aware-hints) * 请阅读[Service 的外部流量策略](/zh/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip) * 请阅读[用 Service 连接应用](/zh/docs/concepts/services-networking/connect-applications-service/)