【k8s】什么是Service
在 Kubernetes(K8s)中,Service(服务) 是一个非常核心、关键的抽象概念。它的主要作用是: ✅ 为一组 Pod 提供稳定的网络访问入口(IP + Port),实现服务发现和负载均衡。 为什么需要 Service? 在 Kubernetes 中: Pod 是临时的、动态的 —— 它们随时可能被调度、重启、扩缩容,IP 会变 如果其他应用或用户直接访问 Pod IP,一旦 Pod 重建,连接就会失败 我们需要一个稳定的访问端点(Service),无论后端 Pod 如何变化 Service 的核心功能为: 功能 说明 服务发现 通过 Service 名称(在集群内 DNS 可解析)访问后端应用 负载均衡 自动将请求分发到后端多个 Pod 实例 解耦访问与实现 用户访问 Service,无需关心后端是哪些 Pod、IP 是多少 支持多种暴露方式 可在集群内访问、节点上暴露、或对外暴露公网访问 Service 如何工作? 创建一个 Service,并指定“选择器(selector)”来匹配一组 Pod(如 app: my-app) Kubernetes 为 Service 分配一个集群内唯一的虚拟 IP(ClusterIP) kube-proxy 组件在每个节点上设置 iptables/IPVS 规则,实现流量转发和负载均衡 当请求发送到 Service 的 IP:Port,流量会被自动转发到后端健康的 Pod Service 的 4 种类型 1️⃣ ClusterIP(默认) 只在集群内部可访问 为 Service 分配一个集群内虚拟 IP 适用于微服务之间互相调用 spec: type: ClusterIP ports: - port: 80 targetPort: 8080 selector: app: my-app 2️⃣ NodePort 在每个节点上开放一个端口(默认 30000-32767) 外部用户可通过 http://<NodeIP>:<NodePort> 访问服务 适合开发、测试或没有 LoadBalancer 的环境 spec: type: NodePort ports: - port: 80 targetPort: 8080 nodePort: 30007 # 可选,不填则自动分配 selector: app: my-app 3️⃣ LoadBalancer 适用于云平台(AWS、GCP、Azure、阿里云等) 云平台会自动创建一个外部负载均衡器,并分配公网 IP 用户通过公网 IP 访问服务 最适合生产环境对外暴露服务 spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: my-app 在 Minikube 或本地环境,可以使用 minikube service <service-name> 来模拟 LoadBalancer。 ...