CKA [Networking] – Service的使用
Kubernetes Service 是一层抽象,用来将一组具有相同功能的 Pod(通常由 Deployment、StatefulSet 等控制器管理)暴露为一个稳定的网络端点,提供服务发现、负载均衡和跨 Pod 通信能力。Service 拥有一个持久的 ClusterIP(对集群内部)或可选的外部访问方式(NodePort、LoadBalancer),从而屏蔽 Pod 的动态扩缩与重建,让客户端无需关心 Pod 的具体 IP 和副本数变化即可稳定访问应用 。

Service的种类

使用案例1 – 手动绑定
制作一个前端和后端的pod,然后使用前端访问service,然后把流量带到后端pod当中。
手动绑定service和pod的ip。

1. 运行backend pod
kubectl run backend-pod --image=nginx
2. 运行frontend pod
-- sleep 36000
的作用就是让容器内直接执行 Linux 的 sleep
命令,并让它“暂停”或“挂起”自身运行 36000 秒(约 10 小时)。这样做的目的,是让这个 Pod 一直保持“运行”状态,而不会因为主进程(没有其它命令)立即退出而导致容器终止。
kubectl run frontend-pod --image=ubuntu --command -- sleep 36000
3. 查看创建的结果
kubectl get pods

4. 进入frontend pod然后安装curl
【进入frontend pod】
kubectl exec -it frontend-pod -- bash
【安装curl】
apt-get update && apt-get install -y curl
5. 查看backend pod的ip , 查到的ip是10.244.0.79
kubectl get pods -o wide

6. 创建service
kubectl apply -f service.yaml
apiVersion: v1
kind: Service
metadata:
name: simple-service
spec:
ports:
- port: 80
targetPort: 80
ClusterIp: none
7. 查看创建的service
kubectl describe service simple-service

7. 创建endpoint,把pod的ip和service绑定在一起
kubectl apply -f endpoint.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: simple-service
subsets:
- addresses:
- ip: 10.244.0.79
ports:
- port: 80
8. 查看service endpoint的结果
kubectl describe service simple-service

9. 进入frontend pod 然后对准service的ip来访问测试
【进入frontend pod】
kubectl exec -it frontend-pod -- bash
【curl backend pod】
curl 10.96.125.158
【curl service dns】
curl simple-service



8. 清理,删除service, 当你删除service的时候,endpoint也会跟着一起删除,所以需要再次手动删除endpoint
【删除service】
kubectl delete service simple-service
【查看endpoint】
kubectl get endpoints

域名访问service

使用案例2 – Selector绑定
根据以上的使用案例1我们需要手动创建endpoint绑定service和pod,接下来这个使用案例是使用selector,让service和pod自动绑定

1. 创建service , 这个service是有selector的
kubectl apply -f service.yaml
apiVersion: v1
kind: Service
metadata:
name: simple-service
spec:
selector:
app: backend
ports:
- port: 80
targetPort: 80
2. 创建service之后我们查看这个service的endpoint是空的,因为pod还没上label

3. 为backend pod加上label
kubectl label pod backend-pod app=backend

4. 查看service是有绑定了endpoint

5. 从frontend pod curl查看service
【进入frontend pod】
kubectl exec -it frontend-pod -- bash
【curl backend pod】
curl simple-service.default

6. 如果我们把backend pod的label给去除掉的话,那么service的endpoint再次解绑,再次清空
【backend pod 解绑label】
kubectl label pod backend-pod app-
【查看service】
kubectl describe service simple-service
