6.2.1 创建Service资源
创建Service对象的常用方法有两种:一是直接使用“kubectl expose”命令,这在前面第三章中已经介绍过其使用方式;另一个的使用资源配置文件,它与此前使用资源清单配置其他资源的方法类似。定义Service资源对象时,spec的两个较为常用的内嵌字段分别是为selector和ports,分别用于定义使用的标签选择器和要暴露的端口。下面的配置清单是一个Service资源示例:
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 80
Service资源myapp-svc通过标签选择器关联至标签为“app=myapp”的各Pod对象,它会自动创建名为myapp-svc的Endpoints资源对象,并自动配置一个ClusterIP,暴露的端口由port字段进行指定,后端各Pod对象的端口则由targetPort给出,也可以使用同port字段的默认值。myapp-svc创建完成后,使用下面的命令既能获取相关信息输出以了解资源的状态:
**[terminal]
**[delimiter $ ]**[command kubectl get svc myapp-svc]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
myapp-svc ClusterIP 10.233.16.105 <none> 80/TCP 28s
上面命令中的结果显示,myapp-svc的类型为默认的ClusterIP,其使用的地址自动配置为10.107.208.93。此类型的Service对象仅能通过此IP地址接受来自于集群内部的客户端Pod中的请求。若集群上存在标签为“app=myapp”的Pod资源,则他们会被关联和创建,作为此Service对象的后端Endpoint对象,并负责接受相应的请求流量。类似下面的命令可用于获取Endpoint资源的端点列表,于其相关的端点是由第五章中的Deployment控制器创建的Pod对象的套接字信息组成:
**[terminal]
**[delimiter $ ]**[command kubectl get endpoints myapp-svc]
NAME ENDPOINTS AGE
myapp-svc 10.233.105.43:80,10.233.70.42:80,10.233.90.99:80 8m29s
也可以不为Service资源指定.spec.selector属性值,其关联的Pod资源可由用户手动创建Endpoints资源进行定义。