
1) 【一句话结论】:在Kubernetes中,通过Service资源实现服务发现与负载均衡(内部用ClusterIP,外部用NodePort/LoadBalancer或Ingress),结合Ingress处理复杂外部路由,利用Horizontal Pod Autoscaler(HPA)根据指标自动扩缩容,容器间通过Service的ClusterIP进行通信,确保服务间稳定访问。
2) 【原理/概念讲解】:
web-service)访问,K8s自动将请求路由到后端Pod。类型包括:
NodeIP:NodePort访问。3) 【对比与适用场景】:
| 资源/机制 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Service (ClusterIP) | 内部服务发现,分配私有IP | 内部访问,内置负载均衡 | 内部Pod间通信,后端Pod动态变化 | 不能从外部直接访问 |
| Service (NodePort) | 在Node端口暴露服务 | 外部可通过NodeIP:端口访问 | 需要简单外部访问,如测试 | 端口占用,可能冲突 |
| Service (LoadBalancer) | 云厂商负载均衡器 | 自动分配公网IP | 云环境,需要公网访问 | 依赖云厂商,成本可能较高 |
| Ingress | 复杂外部路由入口 | 路由规则(路径、主机)、支持TLS | 复杂外部访问,如多域名、路径路由 | 需配合Ingress Controller(如Nginx) |
| HPA | 自动扩缩容 | 根据CPU/内存指标调整副本 | 需要弹性伸缩的服务(如Web应用) | 指标选择影响效果 |
4) 【示例】(伪代码):
# 1. Deployment 部署Web应用
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-container
image: nginx:latest
ports:
- containerPort: 80
# 2. Service (ClusterIP) 用于内部服务发现
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web-app
ports:
- protocol: TCP
port: 80
targetPort: 80
# 3. Ingress (Nginx) 处理外部访问
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
- host: web.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
# 4. HPA 根据CPU自动扩缩容
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
5) 【面试口播版答案】:
“在Kubernetes部署Web服务时,服务发现和负载均衡主要通过Service资源实现,内部Pod通过服务名(如web-service)访问,K8s内置负载均衡。对于外部访问,可以用Service的NodePort或LoadBalancer,但更推荐用Ingress(如Nginx Ingress),通过路由规则(如路径、主机)处理复杂外部流量。自动扩缩容通过Horizontal Pod Autoscaler(HPA),根据CPU使用率(如70%阈值)自动调整Pod副本数。容器间通信通过Service的ClusterIP,Pod通过服务名解析为该IP,实现服务间稳定通信。比如,内部Pod访问web-service:80,外部通过Ingress的域名访问,HPA根据CPU负载自动扩容到更多副本。”
6) 【追问清单】:
NodeIP:NodePort)、LoadBalancer(云厂商负载均衡器)或Ingress(配合Ingress Controller)。/api)匹配所有主机,主机路由(如web.example.com)匹配特定主机,Ingress Controller(如Nginx)根据规则路由到后端Service。7) 【常见坑/雷区】:
/ vs /*),或主机名错误,导致外部访问无法路由到后端Service。