Kubernetes的安装和使用(三)

Kubernetes的安装和使用(三)

💡 原文中文,约7000字,阅读约需17分钟。
📝

内容提要

本文介绍 Kubernetes Service 的用法:Service 解决 Pod 重启后 IP 变化及负载均衡问题。ClusterIP 为多个 Pod 提供集群内统一访问 IP,通过 selector 关联 Pod,请求轮询分发到各 Pod,扩容后 endpoints 自动更新。NodePort 在 ClusterIP 基础上支持通过集群节点固定端口(30000-32767)对外访问。文中以 Go 程序镜像和 Deployment 为例演示配置与验证。

🔎

延伸解读

Service 如何解决 Pod IP 变化与负载均衡

文章指出,直接使用 port-forward 会面临 Pod 重启后 IP 变化以及缺乏负载均衡的问题。Service 通过 selector 关联一组 Pod,并为其分配一个稳定的 ClusterIP,请求会轮询分发到各 Pod。这样即使 Pod 重建导致 IP 变化,Service 的访问入口保持不变,同时实现了基本的负载均衡。

ClusterIP 的访问范围与验证方式

ClusterIP 只能在集群内部访问。文中通过创建 nginx Pod 并进入其内部 curl ClusterIP 来验证服务,观察到每次请求返回不同的 Pod 主机名,说明请求被轮询到后端多个 Pod。这提示读者,ClusterIP 适合集群内服务间通信,外部访问需借助其他类型。

扩容后 Endpoints 自动更新

文章演示了将 Deployment 副本数从 3 扩展到 10 后,Service 的 Endpoints 列表自动增加,且 curl 测试显示请求打到了新创建的 Pod 上。这表明 Service 与 Pod 的关联是动态的,无需手动更新配置,适合弹性伸缩场景。

NodePort 的端口范围与测试限制

NodePort 在 ClusterIP 基础上,通过集群节点的固定端口(30000-32767)对外暴露服务,若指定范围外端口会报错。但作者使用 minikube 而非完整集群,因此未能实际测试 NodePort 的外部访问,读者需注意环境差异。

❓

Q&A

Kubernetes 中 Service 主要解决什么问题?

Service 主要解决两个问题:一是 Pod 重启后 IP 地址发生变化,导致访问困难;二是为多个 Pod 提供负载均衡。

ClusterIP 类型的 Service 有什么特点?

ClusterIP 为多个 Pod 提供一个统一的集群内访问 IP,该 IP 只能在集群内部访问。它通过 selector 关联 Pod,请求会轮询分发到各个 Pod,并且当 Pod 扩容时,endpoints 会自动更新。

如何创建一个 ClusterIP 类型的 Service?

创建 ClusterIP Service 需要编写 YAML 文件,指定 kind: Service,type: ClusterIP(可省略),并通过 selector 匹配 Pod 的标签,同时定义 ports 中的 port 和 targetPort。然后使用 kubectl apply 命令应用该文件。

NodePort 和 ClusterIP 有什么区别?

NodePort 在 ClusterIP 的基础上,还支持通过 Kubernetes 集群的节点进行外部访问。NodePort 会为服务分配一个节点上的固定端口(范围 30000-32767),而 ClusterIP 只能在集群内部访问。

NodePort 的端口范围有什么限制?

NodePort 类型中,Kubernetes 要求 nodePort 的值必须在 30000-32767 范围内,否则应用配置时会报错。

Service 如何实现负载均衡?

Service 通过 selector 关联一组 Pod,当访问 Service 的 ClusterIP 时,请求会轮询分发到后端的各个 Pod 上,从而实现负载均衡。

Pod 扩容后,Service 的 endpoints 会自动更新吗?

是的,当 Deployment 扩容后,Service 的 endpoints 会自动更新,包含新 Pod 的 IP 和端口,请求也会被分发到新的 Pod 上。

🏷️

标签

➡️

继续阅读