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 基本用法

  1. 创建:
    kubectl命令创建:kubectl expose rc rcname
    yaml文件创建: kubectl create -f name.yaml
  2. yaml关键字段:
    port:service暴露的端口
    targetport:当pod暴露的端口和service端口不一致时,可以通过targetport指定pod暴露的端口。
    selector:后端pod所拥有的label
  3. service负载分发策略
    RoundRobin:轮寻模式,轮寻将请求转发到后端pod上面。
    SessionAffinity:基于客户端ip地址进行会话保存,相同的客户端请求会转发到相同的pod上面。
  4. 多端口service:
spec:
  ports:
    - name: p-udp
      port: 8080
      protocol: TCP
      targetPort: 8080
    - name: p-tcp
      port: 8081
      protocol: UDP
      targetPort: 8081
  1. 外部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

  1. 将容器应用端口映射到物理机
    通过设置pod的spec.containers.ports:hostPort:8080

  2. 将pod端口映射到物理机
    通过设置pod的spec:hostNetwork:true

  3. 将service端口映射到物理机
    通过设置nodePort映射到物理机,同时设置service的类型为NodePort

  4. 设置loadBalancer
    设置loadBalancer 映射到云服务供应商的loadBalancer 地址,对service的访问通过loadBalancer 转发到后端pod上,负载均衡的分发方式依赖于云供应商loadBalancer的实现机制。
    status.loadBalancer.ingress.ip设置外部loadBalancer的IP

5、service DNS服务搭建

DNS是kubernetes集群中服务发现的核心组件。kubernetes提供的虚拟DNS服务名为skydns,由四个组件组成:

  1. etcd:DNS存储
  2. kube2sky:将k8s master 中的服务注册到etcd
  3. skyDNS:提供DNS域名解析服务。
  4. 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。

  1. dnsPolicy:deafult,解析配置从pod中的/etc/resolv.conf继承而来。
  2. dnsPolicy:ClusterFirst,dns查询会发到kube-dns服务进行解析。

7、Ingress

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值