# 服务概述
在Kubernetes中，服务（Service）用于将运行在一组Pod上的应用程序公开为网络服务。它不仅为这些Pod提供了一个统一的DNS名称，还实现了Pod之间的负载均衡。本文将为您介绍Kubernetes Service的基本概念以及不同类型Service的对比介绍。
#### 基本概念
关于服务（Service），您需要了解以下基本概念。
#### Service
Pod创建完成后，如果直接访问Pod会存在如下几个问题：
- Pod会随时被Deployment这样的控制器删除重建，那访问Pod的结果就会变得不可预知。
- Pod的IP地址是在Pod启动后才被分配，在启动前并不知道Pod的IP地址。
- 应用往往都是由多个运行相同镜像的一组Pod组成，逐个访问Pod也变得不现实。
举个例子，假设有这样一个应用程序，使用Deployment创建了前台和后台，前台会调用后台做一些计算处理，如[图1]所示。后台运行了3个Pod，这些Pod是相互独立且可被替换的，当Pod出现状况被重建时，新建的Pod的IP地址是新IP，前台的Pod无法直接感知。
图1Pod间访问   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002341856450.png "点击放大")
为了解决上述问题，Kubernetes引入了Service对象，为Pod提供了一个稳定的网络接口和持久的IP地址（在创建CCE集群时通过"服务网段"进行设置，该网段专门用于给Service分配IP地址）。Service通过标签选择器来识别一组目标Pod，并使用负载均衡机制在这些Pod之间均匀分配流量。这不仅有效解决了直接访问Pod时存在的问题，还保障了应用的高可用性和运行效率。
对于上面的例子，如果为后台添加一个Service，并通过Service来访问Pod，这样前台Pod就无需感知后台Pod的变化，如[图2]所示。
图2通过Service访问Pod   
![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002342016274.png "点击放大")
#### Endpoint和EndpointSlice
在Kubernetes中，Endpoint和EndpointSlice都是用于管理服务后端Pod网络端点的资源对象。
- Endpoint：Endpoint是Kubernetes中用于服务发现的传统资源对象，用于表示一个Service对应的所有Pod的网络端点集合。每个带选择器（selector）的Service都会自动创建一个对应的Endpoint资源，记录匹配该选择器的所有Pod的IP地址和端口。当Pod被删除或重建导致IP地址变化时，Endpoint会自动更新存储的Pod IP地址和端口信息，确保Service能够将流量定向到最新的Pod。 Endpoint的主要特点如下：
  - 一个Service对应一个Endpoint资源。
  
  - 包含该Service所有后端Pod的IP地址和端口信息。
  
  - 当任何Pod发生变化时，整个Endpoint对象需要重新计算和存储。
  
  - 默认情况下，Endpoint资源最多包含1000个端点，超过部分会被截断。
   
- EndpointSlice：EndpointSlice是Kubernetes v1.16引入的alpha特性，在v1.21后稳定，是旧版Endpoints API的替代方案，旨在解决Endpoint在大规模集群中的性能问题。它通过分片（sharding）的方式管理端点：
  - 一个Service对应多个EndpointSlice
  
  - 每个EndpointSlice默认包含不超过100个端点，超过时Kubernetes就会创建一个新的EndpointSlice
  
  - 端点按协议、端口和服务名称分组
  
  - 支持IPv4、IPv6和FQDN（完全限定域名）三种地址类型
   
Endpoint与EndpointSlice的主要差异如下：
| 比较项         | Endpoint                                                                            | EndpointSlice                 | 差异说明                           |
|:---|:---|:---|:---|
| 设计架构          | 单对象存储所有端点                                                                            | 分片存储端点                       | EndpointSlice将端点分散在多个对象中         |
| 默认端点数量限制      | 1000个                                                                                | 每个Slice包含100个端点             | EndpointSlice通过分片支持更多端点   |
| 更新粒度           | 全量更新                                                                                | 增量更新                           | Pod变更时，EndpointSlice只需更新受影响的分片 |
| 网络流量         | 高（传输整个对象）                                                                            | 低（只传输变更分片）                   | 大规模集群中差异显著                      |
| API资源消耗     | 高                                                                                      | 低                            | EndpointSlice可减少etcd存储压力      |
| Kubernetes版本 | 所有版本 （Kubernetes社区将在v1.33中弃用该对象，并全面使用EndpointSlice进行替换） | Kubernetes v1.16+（稳定版v1.21+） | 旧版本集群可能不支持EndpointSlice      |
| 适用场景        | 小规模集群                                                                                 | 大规模集群                        | EndpointSlice专为高性能设计            |
   
#### 服务转发模式（nftables、iptables和IPVS）
kube-proxy是Kubernetes集群的关键组件，负责Service和其后端容器Pod之间进行负载均衡转发。CCE支持nftables（1.35及以上版本）、iptables和IPVS的服务转发模式：
- **nftables** ：nftables是Linux内核内置的新一代数据包过滤与管理框架，旨在替代传统iptables，解决其性能瓶颈与扩展难题，提供更高效、灵活的网络流量管控能力。它基于Netfilter Hook机制构建，采用统一的配置框架，可整合IPv4、IPv6、ARP等多种协议的规则管理，无需为不同协议单独配置，同时通过哈希表等优化数据结构提升规则匹配效率，适配高并发场景。
  nftables模式下，kube-proxy使用nftables替代iptables配置数据包转发与NAT规则。与iptables模式相比，nftables模式具备更简洁的语法、更灵活的规则组织方式，可动态更新规则且无需替换整个规则集，能有效优化大规模服务场景下的规则管理性能，更好地适配Kubernetes集群的扩展需求。详情请参见[nftables代理模式](https://kubernetes.io/zh-cn/docs/reference/networking/virtual-ips/#proxy-mode-nftables)。
  
- **iptables** ：iptables是一个Linux内核功能，提供了大量的数据包处理和过滤方面的能力。它可以在核心数据包处理管线上用Hook挂接一系列的规则。iptables模式中kube-proxy 在NAT pre-routing Hook中实现NAT和负载均衡功能。对于每个Service，kube-proxy都会添加一个iptables规则，这些规则捕获流向Service的ClusterIP和Port的流量，并将这些流量重定向到Service后端的其中之一。默认情况下，iptables模式下的kube-proxy会随机选择一个Service后端。详情请参见[iptables代理模式](https://kubernetes.io/zh-cn/docs/reference/networking/virtual-ips/#proxy-mode-iptables)。
- **IPVS** ：IPVS（IP Virtual Server）是在Netfilter上层构建的，并作为Linux内核的一部分，实现传输层负载均衡。IPVS可以将基于TCP和UDP服务的请求定向到真实服务器，并使真实服务器的服务在单个IP地址上显示为虚拟服务。
  IPVS模式下，kube-proxy使用IPVS负载均衡代替了iptables。这种模式同样有效，IPVS的设计就是用来为大量服务进行负载均衡的，它有一套优化过的API，使用优化的查找算法，而不是简单的从列表中查找规则。详情请参见[IPVS代理模式](https://kubernetes.io/zh-cn/docs/reference/networking/virtual-ips/#proxy-mode-ipvs)。
  
更多关于服务转发模式的对比请参见[nftables、iptables与IPVS如何选择](https://support.huaweicloud.com/usermanual-cce/cce_10_0349.html)。
#### 服务亲和（externalTrafficPolicy）
NodePort类型及LoadBalancer类型的Service接收请求时，会先访问到节点，然后转到Service，再由Service选择一个Pod转发到该Pod，但Service选择的Pod不一定在接收请求的节点上。默认情况下，从任意节点IP+服务端口都能访问到后端工作负载，当Pod不在接收请求的节点上时，请求会再跳转到Pod所在的节点，带来一定性能损失。
您可以通过控制台或YAML配置服务亲和。
- **通过控制台配置** ：在CCE控制台创建NodePort类型及LoadBalancer类型Service时，可以通过"服务亲和"选项配置该参数。
  ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002355926448.png "点击放大")
  
  
 
- **通过YAML配置** ：Service有一个配置参数（externalTrafficPolicy），用于设置Service是否希望将外部流量路由到节点本地或集群范围的端点，示例如下：
  ```
  apiVersion: v1
  kind: Service
  metadata:
    name: nginx-nodeport
  spec:
    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**时，请求会在集群内转发，从任意节点IP+服务端口都能访问到后端工作负载。
  
  - 如不设置externalTrafficPolicy，默认取值为**Cluster**。
   
总结服务亲和（externalTrafficPolicy）的两个选项对比如下：
表1服务亲和特性对比 
| 对比维度     | 集群级别（Cluster）                             | 节点级别（Local）                                                                                         |
|:---|:---|:---|
| 使用场景      | 适用于对性能要求不高，无需保留客户端源IP场景，此方式能为集群各节点带来更均衡的负载。 | 适用于客户端源IP需要保留且对性能要求较高的业务，但是流量仅会转发至容器所在的节点，不会做源地址转换。                                                 |
| 访问方式   | 集群下所有节点的IP+访问端口均可以访问到此服务关联的负载。            | 只有通过负载所在节点的IP+访问端口才可以访问此服务关联的负载。                                                                   |
| 获取客户端源IP | 无法获取到客户端源IP。                                  | 可以获取到客户端源IP。                                                                                       |
| 访问性能  | 服务访问会因路由跳转导致一定性能损失，可能导致第二跳到另一个节点。          | 服务访问没有因路由跳转导致的性能损失。                                                                                 |
| 负载均衡性     | 流量传播具有良好的整体负载均衡性。                          | 流量传播存在潜在的不均衡风险。                                                                                     |
| 其他特殊情况 | -                                           | 在不同容器网络模型和服务转发模式下，可能出现集群内无法访问Service的情况，详情请参见[集群内无法访问Service的说明]。 |
   
#### Service的类型
您可以在集群中创建指定类型的Service，不同类型Service的描述及适用场景如下：
| Service类型                                                                              | 描述                                                                                                                                                                    | 适用场景                                                                                                                                                                                 | 计费说明                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| [集群内访问（ClusterIP）](https://support.huaweicloud.com/usermanual-cce/cce_10_0011.html)  | ClusterIP是默认的服务类型，从集群的服务网段中分配一个仅在集群内部可访问的虚拟IP。                                                                                                                        | 如果只需要在集群内部进行服务间的通信，而不需要将服务暴露给集群外部，可以使用ClusterIP类型的服务。 例如，集群中部署的前端应用Pod需要访问同一集群中部署的后端数据库，此时后端数据库可以配置为ClusterIP类型，以确保仅在集群内部可访问。                           | 创建该类型的Service不涉及计费                                                                                                                                                                                                              |
| [节点访问（NodePort）](https://support.huaweicloud.com/usermanual-cce/cce_10_0142.html)    | NodePort会在集群中的每个节点上开放一个端口，从而允许从集群外部通过 \<NodeIP\>:\<NodePort\> 来访问服务。                                                                                                 | 在业务需要临时或低流量访问的场景中，您可以通过NodePort类型服务暴露节点端口进行访问。 例如，在测试环境中，当您部署和调试一个Web应用服务时，可以使用NodePort类型。                                                            | 创建该类型的Service不涉及计费。 若需要通过公网访问NodePort服务，您可以为节点绑定EIP。关于EIP的计费说明，请参见[EIP费用组成](https://support.huaweicloud.com/price-eip/eip_billing_0003.html)。                                                       |
| [负载均衡（LoadBalancer）](https://support.huaweicloud.com/usermanual-cce/cce_10_0014.html) | LoadBalancer类型在NodePort的基础上添加了外部负载均衡器，支持将外部流量向集群内的多个Pod进行分发。Service会自动分配一个外部IP地址，允许客户端通过该IP访问服务。该类型服务不仅支持在OSI模型的第四层（传输层）处理TCP和UDP流量，还能扩展至第七层（应用层），支持HTTP和HTTPS流量的管理。 | 在云上提供应用访问时，若需提供一个稳定且易于管理的对外访问入口，可以使用LoadBalancer类型的服务。 例如生产环境中需从互联网访问的公共服务，这些服务需承受大量外部流量并确保高可用性，如Web应用和API服务等。                                      | 涉及负载均衡实例的费用，计费详情请参见[ELB计费模式](https://support.huaweicloud.com/price-elb/elb_billing_0001.html)。                                                                                                                                    |
| [DNAT网关（DNAT）](https://support.huaweicloud.com/usermanual-cce/cce_10_0058.html)     | DNAT类型的服务可以为集群内的所有节点提供网络地址转换服务，使多个节点可以共享使用弹性IP。                                                                                                                      | 在业务需要通过公网进行临时或低流量访问的场景中，您可以通过DNAT类型服务进行访问。DNAT类型与节点访问类型相比增强了可靠性，弹性IP无需与单个节点绑定，任何节点状态的异常不影响其访问。                                                                                       | 涉及NAT网关的费用，计费详情请参见[NAT网关计费模式](https://support.huaweicloud.com/price-natgateway/nat_billing_0001.html)。 涉及EIP的费用，计费详情请参见[EIP费用组成](https://support.huaweicloud.com/price-eip/eip_billing_0003.html)。 |
| [Headless Service](https://support.huaweicloud.com/usermanual-cce/cce_10_0398.html) | Headless Service不会分配ClusterIP。当访问后端Pod时，服务的DNS查询会直接返回Pod的IP地址列表，客户端可以直接与特定的Pod进行通信。                                                                                 | 应用需要直接与后端的具体Pod进行通信，而不是通过代理或负载均衡器。 例如，当您部署有状态应用（如ClickHouse数据库服务）时，可以使用Headless Service，使应用Pod直接访问每个ClickHouse Pod，并且能够均衡地读取数据或针对性地写入数据，从而提升数据处理效率。 | 创建该类型的Service不涉及计费                                                                                                                                                                                                               |
   
 #### 集群内无法访问Service的说明
当Service设置了服务亲和为节点级别，即externalTrafficPolicy取值为Local时，在使用中可能会碰到从集群内部（节点上或容器中）访问不通的情况，回显类似如下内容：
```
upstream connect error or disconnect/reset before headers. reset reason: connection failure
或：
curl: (7) Failed to connect to **.**.**.** port 900: Connection refused
或：
curl: (28) Failed to connect to **.**.**.** port 1122: Connection timed out
```
在集群中访问ELB地址时出现无法访问的场景较为常见，这是由于Kubernetes在创建Service时，kube-proxy会把ELB的访问地址作为外部IP（即External-IP，如下方回显所示）添加到iptables或IPVS中。如果客户端从集群内部发起访问ELB地址的请求，该地址会被认为是服务的外部IP，被kube-proxy直接转发，而不再经过集群外部的ELB。
```
# kubectl get svc nginx
NAME    TYPE           CLUSTER-IP      EXTERNAL-IP                   PORT(S)        AGE
nginx   LoadBalancer   10.247.76.156   123.**.**.**,192.168.0.133   80:32146/TCP   37s
```
当externalTrafficPolicy的取值为Local时，在不同容器网络模型和服务转发模式下访问不通的场景如下：
![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
- 多实例的工作负载需要保证所有实例均可正常访问，否则可能出现概率性访问不通的情况。
- 表格中仅列举了可能存在访问不通的场景，其他不在表格中的场景即表示可以正常访问。
 
- 使用**IPVS转发模式** 的集群，Service亲和级别支持配置为节点级别（即externalTrafficPolicy的取值为Local）的场景，其中未开启Dataplane V2的CCE Turbo集群仅当Service的后端对接使用主机网络（HostNetwork）的Pod时，亲和级别支持配置为节点级别。
  展开详情
  - 
    | 服务端发布服务类型       | 访问类型   | 客户端请求发起位置        | 容器隧道网络集群                                                                                                                                                 | VPC网络集群（未开启Dataplane V2，开启Dataplane V2后的场景请参见[开启Dataplane V2的集群]）                                                                                                                   | CCE Turbo集群（未开启Dataplane V2，开启Dataplane V2后的场景请参见[开启Dataplane V2的集群]） |
    |:---|:---|:---|:---|:---|:---|
    | 节点访问类型Service   | 公网/私网 | 与服务Pod同节点        | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                 | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                                                                            | 正常访问                                                                                                    |
    | 节点访问类型Service   | 公网/私网 | 与服务Pod不同节点     | 访问服务端所在节点IP+NodePort --- 正常访问 访问其他节点IP+NodePort --- 无法访问                                                                    | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问客户端所在节点公网IP+NodePort --- 无法访问 访问其他节点IP+NodePort ------无法访问 | 正常访问                                                                                                   |
    | 节点访问类型Service   | 公网/私网 | 与服务Pod同节点的其他容器 | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                 | 访问服务端所在节点公网IP+NodePort --- 正常访问 访问服务端所在节点私网IP+NodePort --- 无法访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                            | 正常访问                                                                                                 |
    | 节点访问类型Service   | 公网/私网 | 与服务Pod不同节点的其他容器 | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问其他节点IP+NodePort ------无法访问 | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问其他节点IP+NodePort ------无法访问                                                                | 正常访问                                                                                                  |
    | 独享型负载均衡类型Service | 私网      | 与服务Pod同节点       | 无法访问                                                                                                                                                       | 无法访问                                                                                                                                                                                                                  | 正常访问                                                                                               |
    | 独享型负载均衡类型Service | 私网      | 与服务Pod同节点的其他容器   | 无法访问                                                                                                                                                      | 无法访问                                                                                                                                                                                                                  | 正常访问                                                                                                 |
       
    
    
- 使用**IPTABLES转发模式** 的集群，Service亲和级别支持配置为节点级别（即externalTrafficPolicy的取值为Local）的场景，其中未开启Dataplane V2的CCE Turbo集群仅当Service的后端对接使用主机网络（HostNetwork）的Pod时，亲和级别支持配置为节点级别。
  展开详情
  - 
    | 服务端发布服务类型         | 访问类型 | 客户端请求发起位置         | 容器隧道集群                                                                                                                                                                                                                   | VPC集群（未开启Dataplane V2，开启Dataplane V2后的场景请参见[开启Dataplane V2的集群]）                                                                                                                      | CCE Turbo集群（未开启Dataplane V2，开启Dataplane V2后的场景请参见[开启Dataplane V2的集群]） |
    |:---|:---|:---|:---|:---|:---|
    | 节点访问类型Service   | 公网/私网 | 与服务Pod同节点         | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                                                                            | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                                                                           | 正常访问                                                                                                     |
    | 节点访问类型Service   | 公网/私网 | 与服务Pod不同节点       | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问客户端所在节点公网IP+NodePort --- 无法访问 访问其他节点IP+NodePort ------无法访问 | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问客户端所在节点公网IP+NodePort --- 无法访问 访问其他节点IP+NodePort ------无法访问 | 正常访问                                                                                                   |
    | 节点访问类型Service   | 公网/私网 | 与服务Pod同节点的其他容器   | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                                                                             | 访问服务端所在节点公网IP+NodePort --- 正常访问 访问服务端所在节点私网IP+NodePort --- 无法访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                         | 正常访问                                                                                                  |
    | 节点访问类型Service   | 公网/私网 | 与服务Pod不同节点的其他容器 | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                                                                              | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点IP+NodePort --- 无法访问                                                                                                                           | 正常访问                                                                                                  |
    | 独享型负载均衡类型Service | 私网   | 与服务Pod同节点          | 无法访问                                                                                                                                                                                                                     | 无法访问                                                                                                                                                                                                                | 正常访问                                                                                                  |
    | 独享型负载均衡类型Service | 私网   | 与服务Pod同节点的其他容器  | 无法访问                                                                                                                                                                                                                    | 无法访问                                                                                                                                                                                                                | 正常访问                                                                                                   |
       
    
    
- 开启**Dataplane V2** 的集群，Service亲和级别支持配置为节点级别（即externalTrafficPolicy的取值为Local）的场景。
  ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
  仅VPC集群和CCE Turbo集群支持开启Dataplane V2，开启后集群内不再使用kube-proxy，无需选择服务转发模式。详情请参见[DataPlane V2网络加速说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0945.html)。
  展开详情
  - 
    | 服务端发布服务类型       | 访问类型   | 客户端请求发起位置      | VPC集群（开启DataPlane V2替换kube-proxy）                                                                                                                            | CCE Turbo集群（开启DataPlane V2替换kube-proxy）                                                                                                                      |
    |:---|:---|:---|:---|:---|
    | 节点访问类型Service  | 公网/私网 | 与服务Pod同节点         | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点私网IP+NodePort --- 正常访问 访问非服务端所在节点公网IP+NodePort --- 无法访问 | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点私网IP+NodePort --- 正常访问 访问非服务端所在节点公网IP+NodePort --- 无法访问  |
    | 节点访问类型Service  | 公网/私网 | 与服务Pod不同节点       | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点私网IP+NodePort --- 正常访问 访问非服务端所在节点公网IP+NodePort --- 无法访问 | 访问服务端所在节点IP+NodePort --- 正常访问 访问非服务端所在节点私网IP+NodePort --- 正常访问 访问非服务端所在节点公网IP+NodePort --- 无法访问 |
    | 节点访问类型Service  | 公网/私网 | 与服务Pod同节点的其他容器  | 访问服务端所在节点IP+NodePort --- 正常访问 访问其他节点IP+NodePort --- 无法访问                                                                           | 访问服务端所在节点IP+NodePort --- 正常访问 访问其他节点IP+NodePort --- 无法访问                                                                        |
    | 节点访问类型Service  | 公网/私网 | 与服务Pod不同节点的其他容器 | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问其他节点IP+NodePort ------无法访问        | 访问服务端所在节点IP+NodePort --- 正常访问 访问客户端所在节点私网IP+NodePort --- 正常访问 访问其他节点IP+NodePort ------无法访问      |
    | 独享型负载均衡类型Service | 私网    | 与服务Pod同节点       | 无法访问                                                                                                                                                          | 无法访问                                                                                                                                                         |
    | 独享型负载均衡类型Service | 私网    | 与服务Pod同节点的其他容器  | 无法访问                                                                                                                                                        | 正常访问                                                                                                                                                         |
       
    
    
 
解决这个问题通常有如下办法：
- （**推荐**）在集群内部访问使用Service的ClusterIP或服务域名访问。
- 将Service的externalTrafficPolicy设置为Cluster，即集群级别服务亲和。不过需要注意这会影响源地址保持。 假设Service名称为*my-service* ，命名空间为*default*，则对应的kubectl命令示例如下：
  ```
  kubectl patch service my-service -n default --type='merge' -p '{"spec":{"externalTrafficPolicy":"Cluster"}}'
  ```
  
- 使用Service的pass-through特性，使用ELB地址访问时绕过kube-proxy，先访问ELB，经过ELB再访问到负载。具体请参见[LoadBalancer类型Service使用pass-through能力](https://support.huaweicloud.com/usermanual-cce/cce_10_0355.html)。
  ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
  - 在CCE Standard集群中，当使用独享型负载均衡配置pass-through后，从工作负载Pod所在节点或同节点的其他容器中访问ELB的私网IP地址，会出现无法访问的问题。
  
  - v1.19及以上集群版本支持。
  
  - IPVS网络模式下，对接同一个ELB的Service需保持pass-through设置情况一致。
  
  - 使用节点级别（Local）的服务亲和的场景下，会自动设置kubernetes.io/elb.pass-through为onlyLocal，开启pass-through能力。
    
 
#### 相关文档
- 创建并使用不同类型的Service：
  - [集群内访问（ClusterIP）](https://support.huaweicloud.com/usermanual-cce/cce_10_0011.html)
  
  - [节点访问（NodePort）](https://support.huaweicloud.com/usermanual-cce/cce_10_0142.html)
  
  - [负载均衡（LoadBalancer）](https://support.huaweicloud.com/usermanual-cce/cce_10_0014.html)
  
  - [DNAT网关（DNAT）](https://support.huaweicloud.com/usermanual-cce/cce_10_0058.html)
  
  - [Headless Service](https://support.huaweicloud.com/usermanual-cce/cce_10_0398.html)
   
- 在容器场景中，访问请求会经过多个代理层，获取客户端的真实IP地址需要在服务中进行适当的配置，详情请参见[不同场景下容器内获取客户端源IP](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_00035.html)。
- 如果您需要保证同一客户端的请求在会话期间始终被转发到同一后端服务器，可通过负载均衡配置会话保持，详情请参见[通过负载均衡配置实现会话保持](https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_00231.html)。
 
