docs
http://kubernetes.io/docs/user-guide/services/
Service
- service是逻辑pods逻辑集合的抽象
- 解耦服务于pod间的关系,应用只关心服务,不关心pod,service内部保持相对稳定
- 服务对外隐蔽,内部保持稳定
- 保证pod label 唯一性,任何pod的label匹配到service的selector,都会被当做可以被接入的service port
ServicePort
containerPort
- 默认情况下和port相同
- 可以为string,代表pod的的port
- 可以和默认的port不相同
kube-proxy
userspace 代理模式
- 监听kube-master增加或者移除Service和Endpoint对象。针对每个Service,在node节点随机开启proxy-prot端口,从service 代理到proxy-port的流量都会转发到node节点的pod上。
- 默认流量是轮训转发.可以将service.spec.sessionAffinity设置成“ClientIp”(只有两个值“clientIp”或者None),基于IP亲和性转发
iptables 代理模式
- 监听kube-master增加或者移除Service和Endpoint对象。针对Service,本地安装防火墙规则,捕获到Service's clusterIp的流量,直接重定向到pod节点,不走kube-proxy
Headless services
Headless services 是指不需要通过ClusterIp负载均衡的需求,可以通过设置spec.clusterIP 为None,
提供服务到外部的ip
- ClusterIP
- NodePort
- LoadBalancer
- ExternalName 提供重定向服务到外部集群
- ExternalIPs
ClusterIP
提供一个集群内部的ip,集群内可以访问
NodePort
- 外部可以通过<NodeIP>:<NodePort> 访问服务
- Service’s spec.ports[*].nodePort 可以有系统分配或者手工指定
- 手工指定nodePort时必须考虑到冲突的情况,默认是(30000 - 32768)
- port指定ClusterIP服务访问的端口 docs
- 可以通过 <NodeIP>:<spec.ports[*].nodePort>或者<clusterIp>:<spec.ports[*].port> 访问服务
LoadBalancer
具体详细的支持,需要看cloud provider
ExternalIPs
- 不管ServiceType是什么类型,用户只要确保流量能够到达ExternalIPs,都可以通过externalIP:port 访问服务
- externalIp 不属于kubernetes-system管理,使用该选项时,用户必须要确保能够保证请求能够到达externalIp, 还必须保证没有port 冲突(访问服务:externalIp:port)
网友评论