kubernetes service
1、service 定义
service 可以为一组相同功能的pod应用提供统一的入口地址,并将请求负载均衡分发到各个容器应用上。service的负载均衡功能由node节点上的kube-proxy提供。创建service模板如下:
apiVersion: v1
kind: Service
metadata:
labels:
app: peony
name: peony
spec:
ports:
- name: peony
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: peony
sessionAffinity: None
type: ClusterIP
2、service 基本用法
- 创建:
kubectl命令创建:kubectl expose rc rcname
yaml文件创建: kubectl create -f name.yaml - yaml关键字段:
port:service暴露的端口
targetport:当pod暴露的端口和service端口不一致时,可以通过targetport指定pod暴露的端口。
selector:后端pod所拥有的label - service负载分发策略
RoundRobin:轮寻模式,轮寻将请求转发到后端pod上面。
SessionAffinity:基于客户端ip地址进行会话保存,相同的客户端请求会转发到相同的pod上面。 - 多端口service:
spec:
ports:
- name: p-udp
port: 8080
protocol: TCP
targetPort: 8080
- name: p-tcp
port: 8081
protocol: UDP
targetPort: 8081
- 外部service
背景:应用需要一个外部数据库作为后端服务进行连接,或者将另一个集群或者namespace中的服务作为后端。
方法:通过创建一个无label selector的service,并手动创建一个与该service**同名的endpoint**,指向实际的后端访问地址。
3、无头服务 headless service (返回后端pod列表)
背景:开发人员不使用默认的负载均衡策略,自定义负载均衡;或者希望知道同组服务的其他实例。
方法:创建无头服务,不为service设置clusterIP,如下:
spec:
ports:
- name: peony
port: 8080
clusterIP: None #设置无头服务
selector:
app: peony
4、集群外部访问service
将容器应用端口映射到物理机
通过设置pod的spec.containers.ports:hostPort:8080将pod端口映射到物理机
通过设置pod的spec:hostNetwork:true将service端口映射到物理机
通过设置nodePort映射到物理机,同时设置service的类型为NodePort设置loadBalancer
设置loadBalancer 映射到云服务供应商的loadBalancer 地址,对service的访问通过loadBalancer 转发到后端pod上,负载均衡的分发方式依赖于云供应商loadBalancer的实现机制。
status.loadBalancer.ingress.ip设置外部loadBalancer的IP
5、service DNS服务搭建
DNS是kubernetes集群中服务发现的核心组件。kubernetes提供的虚拟DNS服务名为skydns,由四个组件组成:
- etcd:DNS存储
- kube2sky:将k8s master 中的服务注册到etcd
- skyDNS:提供DNS域名解析服务。
- healthz:提供skyDNS服务的健康检查。
DNS服务工作原理:
1.kube2sky容器通过调用kubernetes master api获得集群中所有service的信息,并持续监控新service的生成,写入到etcd中。
2.kubelet启动参数中设置,在每个新建的pod中设置DNS域名解析配置文件/etc/resolv.conf,在其中增加一条nameserver和search。
3. 最后,应用程序可以像访问网站一样,通过服务名称访问服务了。后续版本skydns不再使用etcd数据库。
6、自定义DNS
目前k8s的pod定义中支持两种类型的DNS策略(dnsPolicy):Default和ClusterFirst。
- dnsPolicy:deafult,解析配置从pod中的/etc/resolv.conf继承而来。
- dnsPolicy:ClusterFirst,dns查询会发到kube-dns服务进行解析。
7、Ingress
推荐阅读