kubernetes组件Service入门
简介
简单来讲,Service对象就是工作节点点的一些iptables 或ipvs规则,用于将到达Service对象IP地址的流量调度转发至相应的Pod的IP地址和端口之上。创建Service资源对象时,ClusterDNS会自动创建资源记录用于名称解析和服务注册,Pod资源可以直接使用标准的DNS名称来访问这些Service资源。
Service 工作模型
- userspace (效率较低)
- Iptables
- IPVS
Service类型
CluSterIP: 默认此类型,仅在集群IP内部暴露端口服务,集群外部无法访问到。
NodePort: 在任意节点上暴露端口,能通过集群外部访问。
LoadBalancer: 建立在 NodePort类型上,通过云服务提供商的负载均衡将服务暴露到集群外部。
ExternalName: 把集群外部的服务以DNS CNAME记录的方式映射至集群内,让集群内的POD资源能够访问外部的Service的一种实现方式
无头Service: 直接解析至后端Pod,写法:
clusterIP: ""
资源记录
SVC_NAME.NS_NAME.DOMAIN.LTD.
svc.cluster.local
redis.default.svc.cluster.local.
创建Service资源示例
apiVersion: v1 kind: Service matadata: name: myapp-svc spec: selector: app: myapp ports: - protocol: TCP port: 80 targetPort: 80 nodePort:30080 type: NodePort
无头Service服务
apiVersion: v1 kind: Service matadata: name: myapp-svc spec: selector: app: myapp release: canary clusterIP: "None" ports: - protocol: TCP port: 80 targetPort: 80 nodePort:30080 type: NodePort
上面Service配置清单为:创建一个名称为myapp-svc的service资源。适用于app=myapp的标签。暴露的协议为TCP,端口为80
,暴露在集群节点之上,可在集群外部访问。
service 负载均衡调度
同一个或,随机调度
sessionAffinity :ClientIP None
kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}' #类似LVS Haship 模式
dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10
停留在世界边缘,与之惜别