type
status
date
slug
summary
tags
category
icon
password
本文以 架构师视角,通俗讲解 Kubernetes 中的 Service 与 Ingress,结合 使用场景、示例和 Java 开发实践

🔹 为什么需要 Service 和 Ingress?

在 Kubernetes 中:
  • Pod 是最小运行单元,但 Pod 的 IP 是动态的,会因为重启或扩缩容而改变。
  • 直接访问 Pod IP 不可靠。
👉 所以 K8s 提供:
  • Service:集群内稳定访问入口。
  • Ingress:统一对外 HTTP/HTTPS 网关。

🔹 Service:集群内部的访问入口

使用场景

  • user-service 部署了 3 个副本,Pod IP 各不相同。
  • order-service 想调用 user-service。 👉 使用 Service 统一入口,避免依赖 Pod IP。

Service 类型

  1. ClusterIP(默认):仅集群内访问。
  1. NodePort:通过 NodeIP:Port 对外暴露(适合测试环境)。
  1. LoadBalancer:云厂商负载均衡器(生产常用)。

示例:user-service 的 Service

📌 集群内调用:

🔹 Ingress:对外网关

使用场景

  • 系统有多个微服务:user-service, order-service, product-service
  • 不可能每个都开一个 NodePort。 👉 使用 Ingress 统一管理外部访问。

功能

  • 基于域名/路径路由
    • http://myapp.com/user → user-service
    • http://myapp.com/order → order-service
  • 支持 TLS(HTTPS)
  • Ingress Controller:Nginx Ingress、Traefik、Istio Gateway

示例:Ingress 网关

📌 外部访问:

🔹 Java 开发人员视角

在 Spring Boot 项目中,微服务之间的调用不依赖 Pod IP,而是通过 Service 名称:
👉 核心点:在 K8s 中,Service 名即 DNS 域名,天然支持服务发现

🔹 总结

  • Service:解决 Pod 动态 IP 问题,保证集群内调用稳定。
  • Ingress:统一对外暴露 HTTP/HTTPS,管理网关入口。
📌 类比:
  • Service = 内部通讯录(固定电话簿)
  • Ingress = 前台总机(对外统一入口)

架构图

notion image