Service
Service的主要功能用提供服务网格功能,通过service能够为客户端应用提供稳定的访问地址和负载均衡能力,以及屏蔽后端Endpoint的变化,是k8s实现微服务的核心资源。下面给出案例:
pod集群
启动了两个tomcat副本
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 2
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
kubectl get pods -l app=webapp -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
webapp-5759bc56f7-9cbzl 1/1 Running 0 24m 192.168.61.30 scms01 <none> <none>
webapp-5759bc56f7-t8z62 1/1 Running 0 24m 192.168.61.31 scms01 <none> <none>
分别访问2个机器的地址
curl 192.168.61.30:80
...
curl 192.168.61.31:80
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/8.0.35</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
<body>
...
创建service
- expose
-
kubectl expose deployment webapp
- 使用yaml文件
-
apiVersion: v1 kind: Service metadata: name: webapp spec: ports: #通信协议 - protocol: TCP #service的端口 port: 8080 #目标端口 targetPort: 8080 selector: #选择对应的标签 app: webapp ~
[root@scms01 day10]# kubectl get svc |grep webapp webapp ClusterIP 10.97.164.74 <none> 8080/TCP 21m [root@scms01 day10]#
直接访问这个地址就可以实现负载均衡
curl 10.97.164.74:8080
如果pod列表出现变化,则k8s会实时更新service对应的后端pod列表。一个service对应的后端由pod和IP和容器端口号组成,即一个完整的IP:PORT访问地址,这在k8s中叫Endpoint
-
查看Endpoint列表
-
[root@scms01 day10]# kubectl describe svc webapp Name: webapp Namespace: default Labels: <none> Annotations: <none> Selector: app=webapp Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.97.164.74 IPs: 10.97.164.74 Port: <unset> 8080/TCP TargetPort: 8080/TCP Endpoints: 192.168.61.30:8080,192.168.61.31:8080 Session Affinity: None Events: <none>
实际上,k8s会自动创建service和Endpoint资源对象的关联关系,通过一下命令查看
[root@scms01 day10]# kubectl get endpoints |grep webapp
webapp 192.168.61.30:8080,192.168.61.31:8080