Appearance
Service、Ingress 与网络访问
这篇笔记聚焦 Kubernetes 里最容易让人“对象都认识,但访问路径讲不清”的一条主线:
- Pod 为什么不能直接作为稳定入口
Service到底解决什么问题Ingress在入口流量里扮演什么角色- 集群内部和外部访问路径有什么区别
1. 为什么 Pod 不能直接作为服务入口
因为 Pod 本身是动态变化的。
它可能会:
- 被重建
- 被重新调度到别的节点
- 获得新的 IP
所以如果别的服务或者外部客户端直接依赖某个 Pod IP,系统会非常脆弱。
这就是 Service 存在的原因。
2. Service 到底是什么
Service 可以理解成 为一组满足标签选择条件的 Pod 提供稳定访问入口的一层抽象。
它解决的是:
- Pod IP 不稳定
- 调用方不应该感知底层实例变化
- 一组副本需要统一被访问
把分工拉开看:Pod 负责跑服务,Service 负责把一组会变动的 Pod 包装成一个相对稳定的服务地址。
3. 标签和选择器为什么很重要
label 是对象上的标记。selector 是按标签去选对象的规则。
Service 之所以能把请求导向某一组 Pod,本质上就是因为它会按 selector 找到对应 Pod。
例如:
yaml
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: demo-app
ports:
- port: 80
targetPort: 8080这份配置表达的是:
- 找到所有带有
app: demo-app标签的 Pod - 对外暴露 Service 端口
80 - 最终转发到 Pod 的
8080
4. Service 常见类型怎么理解
4.1 ClusterIP
ClusterIP 是最常见的默认类型。
它可以理解成 只在集群内部可访问的稳定服务地址。
它适合:
- 微服务之间互相调用
- 集群内部服务发现
4.2 NodePort
NodePort 可以理解成 在每个节点上打开一个端口,把外部请求转发到集群内部服务。
它适合:
- 测试环境
- 比较简单的对外暴露场景
但它通常不是生产环境最优雅的入口方式。
4.3 LoadBalancer
LoadBalancer 可以理解成 由云平台或底层基础设施提供一个外部负载均衡入口,再把流量接入到 Service。
它常见于云环境中。
5. Ingress 又是什么
Ingress 可以理解成 把集群外部的 HTTP/HTTPS 请求按域名、路径等规则路由到内部 Service 的入口规则。
它解决的是:
- 一个集群里有多个服务需要统一接入
- 不同域名、不同路径应该去不同服务
- HTTPS 证书和入口规则希望统一管理
这里要注意:
Ingress 本身更像规则定义,真正执行这些规则,通常还需要 Ingress Controller。
6. Ingress Controller 是什么
Ingress Controller 可以理解成 负责监听 Ingress 规则,并真正把流量按规则转发出去的入口控制器。
常见实现会基于:
Nginx- 云厂商网关
- 其他入口控制器方案
所以如果只创建了 Ingress 规则,却没有对应 Controller,这些规则通常不会真正生效。
7. 一个典型的访问链路长什么样
可以用一条常见路径理解:用户 -> 域名 -> Ingress Controller -> Service -> Pod
这条链路里每一层的职责分别是:
Ingress:定义入口路由规则Service:稳定暴露一组 PodPod:真正处理业务请求
8. DNS 和服务发现怎么理解
Kubernetes 通常会为 Service 提供集群内部 DNS 名称。
这意味着:
- 调用方不需要记具体 Pod IP
- 更倾向于按服务名访问
- 底层实例变动时,调用方式仍然保持稳定
例如一个服务常见会通过类似下面的名字被访问:demo-service.default.svc.cluster.local
这里可以不用死记全名,关键是理解:Kubernetes 会把服务访问从“找实例 IP”提升成“找服务名字”。
9. 网络访问里最常见的几个误区
9.1 误区一:Pod 能访问,就说明服务入口设计对了
不一定。
Pod 直连通常只能说明实例活着,不代表服务发现和稳定入口设计合理。
9.2 误区二:有 Ingress 就不需要 Service
通常不是这样。
Ingress 更常是把外部流量导入内部,而 Service 负责内部稳定服务抽象,这两层职责不同。
9.3 误区三:NodePort 就等于生产级入口方案
NodePort 能用,但很多生产场景会更倾向于结合 Ingress 或外部负载均衡来做统一入口。
10. 一句话总结
Service、Ingress 与网络访问这条主线,本质上是在解决:
动态变化的 Pod 如何对内形成稳定服务,对外形成统一入口,以及集群里的流量到底应该按什么路径流转。