You need to enable JavaScript to run this app.
导航

集群内访问(ClusterIP)

最近更新时间2023.11.22 14:29:00

首次发布时间2022.03.04 23:10:38

集群内访问(ClusterIP)是指将工作负载暴露给同一集群内其他工作负载访问的方式,可以通过 集群内部域名 访问。
例如创建一个名为 nginx 的 Service,端口号为 80,则集群内部访问时,直接通过 nginx:80 就可以访问到 Service,进而访问后台 Pod。

alt

在微服务相关场景,如果不需要负载均衡以及 Service IP,需要直通 Pod 的时候,可以配置 Headless Service。
Headless Service 不会为 Service 创建 ClusterIP,DNS 查询时会返回所有 Pod 的 DNS 记录,这样就可以访问到所有 Pod 的 IP 地址。相当于直接访问 Pod。
集群内访问(ClusterIP)和 Headless Service 的主要区别和应用场景如下。

差异项集群内访问(ClusterIP)Headless Service
ClusterIP
解析 Service 的 DNS 结果返回 Service 的 ClusterIP 地址。返回所有 Pod 的 Pod IP 地址。
其他应用访问 Service只能访问到 Service,具体的 Pod 由 iptables 决定,实现了针对 Pod 的负载均衡。能够直接访问到全部 Pod。

应用场景

需要 Service 为 Pod 进行负载均衡的场景。

  • 需要直接访问所有Pod的场景。例如在集群中部署 Kafka,无需 Service 来代理,客户端需要能够访问所有的 Pod。
  • Client 处理负载均衡的场景。例如在集群中部署两个应用负载,Client 负责处理负载均衡请求,此种场景下就无需 Serivce 来代理。

前提条件

已创建无状态或有状态工作负载。详细操作,请参见 创建无状态负载创建有状态负载

通过控制台使用

  1. 登录 容器服务控制台

  2. 单击左侧导航栏中的 集群

  3. 在集群列表页面,单击目标集群名称。

  4. 在集群管理页面的左侧导航栏中,选择 服务与路由 > 服务,单击 创建服务,配置服务。

    • 配置服务的基本信息。

      配置项说明
      名称根据系统提示,配置服务的名称。在同一个命名空间下,名称必须唯一。
      命名空间选择服务所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述
      标签单击 添加标签 图标,配置服务的标签。标签能够为服务定义不同的属性,方便批量筛选等需求。
      注解对应 Kubernetes 中的 Annotation。单击 添加注解,为服务添加注解并配置键值对。
    • 配置服务的访问规则。
      alt

      配置项说明
      访问类型配置服务的访问类型,本例中选择:集群内访问(ClusterIP)

      通信协议

      邀测·申请试用】针对 IPv4/IPv6 双栈集群,提供按需配置服务通信协议能力,兼容 IPv6 地址访问服务的业务场景。包括以下选项:

      • IPv4:表示仅支持 IPv4 地址访问服务。

      • IPv6:表示仅支持 IPv6 地址访问服务。

      • IPv4&IPv6:同时支持通过 IPv4 和 IPv6 访问服务,默认使用 IPv4。

      • IPv6&IPv4:同时支持通过 IPv6 和 IPv4 访问服务,默认使用 IPv6。

      说明

      IPv4/IPv6 双栈集群搭建方法参见:通过 VKE 搭建 IPv4/IPv6 双栈集群

      端口映射

      配置端口映射规则:

      • 名称:配置服务端口到容器端口映射的名称。
      • 服务端口:配置 Service 对外提供服务的端口。同一种协议的服务端口不允许重复。

        说明

        在 VPC-CNI 网络模型的集群中,不同协议的服务端口也不允许重复,即 TCP 和 UDP 协议不能用同一个服务端口号。

      • 协议:根据业务的协议类型,选择端口协议。当前支持 TCP 协议和 UDP 协议。
      • 容器端口:配置容器的端口,该端口为工作负载对外提供服务的端口号或端口名称。例如:Nginx 开放的默认端口号为 80。
      标签选择器Service 通过标签选择器与后端容器组实例(Pod)绑定:
      • 添加标签:输入添加工作负载的标签,关联 Service 到指定工作负载。您可以在集群管理页面左侧导航栏单击 工作负载,找到目标工作负载,获取工作负载标签。
      • 关联工作负载:直接选择工作负载,关联到 Service。当前仅支持关联 无状态负载(Deployment)、有状态负载(Statefulset)。

      会话保持

      默认不配置。您可根据实际需求,勾选 配置超时时间,启用会话保持功能,并配置会话保持的持续时间。启用后 Service 将来自同一个 IP 地址的访问请求转发到同一台后端服务器上。

      建议设置超时时间数值大于 120 秒。

      说明

      Headless Service 不支持会话保持,超时时间配置不会生效。

  5. 单击 确定,完成配置。

通过 kubectl 命令行使用

说明

通过 kubectl 命令行配置 ClusterIP 访问类型的 Service 前请确保:

  • 已安装 kubectl 工具到本地。具体操作说明,请参见 安装和设置 kubectl
  • 已通过 kubectl 连接目标集群。具体操作说明,请参见 连接集群
  1. 创建工作负载的 YAML 文件。示例文件service-demo.yaml代码如下:
    apiVersion: v1
    kind: Service
    metadata:
      name: service-demo # 服务的名称。
    spec:
      selector:
        app: nginx # 通过标签选择器将服务与后段容器组(Pod)绑定。
      ipFamilyPolicy: PreferDualStack  # 通信协议类型。SingleStack 表示单栈,PreferDualStack 表示双栈。
      ipFamilies: # 具体使用的通信协议。单栈场景支持 IPv4、IPv6;双栈场景支持 IPv4&IPv6、IPv6&IPv4。
      - IPv6
      - IPv4
      ports:
      - name: rule # 端口映射规则名称。
        protocol: TCP # 服务协议,支持 TCP 或 UDP。
        port: 8080 # 服务端口。
        targetPort: 80 # 容器端口,即工作负载对外提供服务的端口号或端口名称,例如:Nginx 开放的默认端口号为 80。
      type: ClusterIP # 服务的类型。
    
  2. 执行以下命令,创建服务。
    kubectl apply -f service-demo.yaml