集群内访问(ClusterIP)允许通过服务将工作负载暴露给同一集群内其他工作负载访问。本文介绍如何配置 ClusterIP 类型的服务。
当在集群中创建一个集群内访问(ClusterIP)类型的服务时,系统会为该服务生成内部访问域名,格式为服务名称.命名空间.svc.cluster.local:端口号
。例如:在 default 命名空间,创建一个名为 nginx 的 Service,端口号为 80 时,则集群内部直接通过域名nginx:80
或nginx.default:80
就可以访问到该 Service 和后端 Pod。
在不需要负载均衡以及 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 进行负载均衡的场景。 |
|
已创建集群,详情请参见 创建集群。
已创建工作负载,详情请参见 创建无状态负载、创建有状态负载、创建守护进程。
说明
当前仅支持关联无状态负载(Deployment)、有状态负载(Statefulset)和守护进程(DaemonSet)。
登录 容器服务控制台。
单击左侧导航栏中的 集群。
在集群列表页面,单击目标集群名称。
在集群管理页面的左侧导航栏中,选择 服务与路由 > 服务,单击 创建服务,配置服务。
基本信息
配置项 | 说明 |
---|---|
名称 | 根据系统提示,配置服务的名称。在同一个命名空间下,名称必须唯一。 |
命名空间 | 选择服务所属的命名空间。建议选择您自定义的命名空间,或系统默认创建的 default 命名空间。命名空间相关介绍,请参见 命名空间概述。 |
标签 | 单击 添加标签 图标,配置服务的标签。标签能够为服务定义不同的属性,方便批量筛选等需求。 |
注解 | 对应 Kubernetes 中的 Annotation。单击 添加注解,为服务添加注解并配置键值对。 |
访问配置
配置项 | 说明 |
---|---|
访问类型 | 配置服务的访问类型,本例中选择:集群内访问(ClusterIP)。 |
通信协议 | 【邀测·申请试用】针对 IPv4/IPv6 双栈集群,提供按需配置服务通信协议能力,兼容 IPv6 地址访问服务的业务场景。包括以下选项:
说明 IPv4/IPv6 双栈集群搭建方法参见:通过 VKE 搭建 IPv4/IPv6 双栈集群。 |
端口映射 | 配置端口映射规则:
说明 在 VPC-CNI 网络的集群中,不同协议的服务端口也不允许重复,即 TCP 和 UDP 协议不能用同一个服务端口号。
|
标签选择器 | Service 通过标签选择器与后端容器组实例(Pod)绑定:
|
会话保持 | 是否启用会话保持功能。
说明 Headless Service 不支持会话保持,超时时间配置不会生效。 |
单击 确定,完成配置。
说明
通过 kubectl 命令行配置 ClusterIP 访问类型的 Service 前请确保:
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 # 服务的类型。
kubectl apply -f service-demo.yaml
配置完成后,您可以在服务列表中查看已创建的服务,包括集群 IP(即 ClusterIP)和内部端点(内部访问域名)。
服务创建完成后,在集群内的容器或节点上访问该服务的方法如下:
ClusterIP:Port
,可以访问到该服务。service-demo:80
,可以访问到该服务。service-demo.default:80
,可以访问到该服务。