Kubernetes Services
Base
-
服务类型:
-
ClusterIP:
- 类型:内部服务
- 集群内部可访问的虚拟 IP。
- 仅在集群内部可路由。
- 默认服务类型。
- 使用选择器将流量路由到匹配的 Pod。
- 适用于在集群内部进行内部通信的服务。
-
NodePort
- 类型:外部服务
- 在每个节点上公开一个固定的端口。
- 外部流量可以通过节点的 IP 地址和 NodePort 访问服务。
- 使用选择器将流量路由到匹配的 Pod。
- 适用于需要从集群外部访问服务的情况。
- 端口范围:30000-32767
-
LoadBalancer:
- 类型:外部服务
- 在云平台上创建外部负载均衡器(如 AWS ELB、GCP Load Balancer 等)。
- 外部负载均衡器将流量路由到服务。
- 外部负载均衡器通常会分配一个外部 IP 地址。
- 使用选择器将流量路由到匹配的 Pod。
- 适用于需要负载均衡和从集群外部访问服务的情况。
-
ExternalName:
- 类型:外部服务
- 提供了对集群外部服务的访问。
- 将服务映射到集群外部的 CNAME 记录。
- 不执行任何代理或负载均衡功能。
- 适用于需要将集群内部服务与集群外部服务进行关联的情况。
-
- 服务选择器(Selectors):服务使用标签选择器来确定它所关联的后端 Pod。标签选择器允许您定义一组标签,并且只有带有匹配标签的 Pod 才会被服务路由到。
- Pod 发现:服务通过与后端 Pod 的标签选择器匹配来发现和管理 Pod。当新的 Pod 被创建或现有的 Pod 发生变化时,服务会自动更新其代理规则,确保流量正确路由到新的 Pod。
- 端口映射:服务将外部流量路由到后端 Pod 的特定端口上。您可以定义服务的端口和目标端口,其中端口是客户端访问服务的入口,目标端口是服务转发流量到后端 Pod 的端口。
- 会话亲和性:通过在服务上启用会话亲和性,可以确保来自同一客户端的请求始终被路由到相同的后端 Pod。这对于需要保持会话状态的应用程序非常有用。
- Headless 服务:Headless 服务允许直接访问后端 Pod 的 IP 地址,而不是通过虚拟 IP 进行访问。这对某些特定的应用程序和服务发现机制非常有用。
- 服务代理(Service Proxy):每个节点上的 kube-proxy 组件负责实现服务的代理功能,它维护了服务和 Pod 之间的网络规则,并将流量正确路由到后端 Pod。
Kubernetes 服务提供了一种抽象层,使得应用程序的网络访问更加灵活和可靠。通过使用标签选择器、端口映射和服务类型,您可以根据应用程序需求定义和配置服务,并将流量路由到后端 Pod。
Error
-
端口冲突错误:当您尝试创建一个服务时,如果所选的端口已经被其他服务占用,将会出现端口冲突错误。
- 解决方法:选择一个未被占用的端口或者检查是否存在重复的服务定义。确保每个服务都使用唯一的端口。
-
选择器错误:服务的选择器用于标识要与之关联的 Pod。如果选择器与 Pod 的标签不匹配,服务将无法正确路由流量。
- 解决方法:确保服务的选择器与 Pod 的标签匹配。检查服务和 Pod 的标签定义,确保它们具有相同的键和值。
-
缺少目标端口错误:在服务配置中,如果未正确指定目标端口,将无法将流量正确路由到 Pod。
- 解决方法:确保在服务配置中指定了正确的目标端口,以便流量正确路由到 Pod 上运行的应用程序。
-
防火墙或网络策略错误:如果防火墙或网络策略限制了对服务的访问,可能导致服务不可访问。
- 解决方法:检查防火墙规则和网络策略,确保允许对服务的访问。如果使用云平台,确保负载均衡器或入口控制器的配置正确。
-
服务类型错误:选择错误的服务类型可能会导致无法实现预期的流量路由或外部访问。
- 解决方法:根据需求选择正确的服务类型。ClusterIP 用于集群内部通信,NodePort 用于外部访问,LoadBalancer 用于云平台负载均衡,ExternalName 用于将服务映射到外部域名。
-
清单文件语法错误:在编写服务配置的清单文件时,语法错误可能导致服务无法正确部署。
- 解决方法:仔细检查清单文件的语法,确保正确使用缩进、冒号和连字符等符号。您可以使用
kubectl apply
命令的--dry-run
选项来检查清单文件的语法错误。
- 解决方法:仔细检查清单文件的语法,确保正确使用缩进、冒号和连字符等符号。您可以使用
This post is licensed under
CC BY 4.0
by the author.