每天进步一点点

2020-05-20【Kubernetes Service】

2020-05-20  本文已影响0人  桢桢claire
All is Love

今日鸡汤:

人生就是一列开往坟墓的列车,
路途上具有很多站口,
没有一个人可以至始至终陪着你走完,
你会看到来来往往、上上下下的人。
如果幸运,会有人陪你走过一段,
当这个人要下车的时候,即使不舍,
也该心存感激,然后挥手道别。
因为,说不定下一站,
会有另外一个人会陪你走得更远。

520,祝大家都有陪你一起的人。

今天来学习Kubernetes重要的概念
——Service。

Kubernetes Service

通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。

为什么需要Service?

直接通过Pod的IP地址和端口号就能够访问容器应用内的服务,但Pod的IP地址是不可靠的。另外,如果容器应用本身是分布式的部署方式,通过多个实例提供服务,就需要在这些实例前端设置一个负载均衡器实现请求的分发,也就是serivce。

Service支持哪几种访问方式?

可以通过在service定义的spec.type选择如下三种访问方式:

  1. ClusterIP:虚拟的服务IP地址,用于集群内部Pod的访问。
  2. NodePort:使用宿主机的端口,使能够访问各个Node的外部客户端通过Node的IP地址和端口号就能访问服务。
  3. LoadBalancer:使用外接负载均衡器完成到服务的负载分发。

有几种创建Service的方式?

第一种,通过kubectl expose命令创建:比如kubectl expose rc webapp(其中,webapp是一个RC资源)
第二种,通过配置文件定义service,再通过kubectl create命令创建:如kubectl create -f webapp-svc.yaml。(注意:需要用targetPort指定后端Pod的端口号)

通过kubectl get svc查看创建好的service,通过Service的ClusterIP和port访问。

Kubernetes提供几种Service到Pod的负载分发策略?

两种,RoundRobin和SessionAffinity。

  1. RoundRobin(默认):轮询模式,轮询将请求发送给后端Pod。
  2. SessionAffinity:基于客户端IP地址进行会话保持。

如何从集群外部访问Pod?

将Pod的端口号映射到宿主机,以使客户端能够通过物理机访问容器应用。

  1. 设置Container级别的hostPort,将Pod端口号映射到物理机上。
spec:
 containers:
 - name: webapp
   ports:
   - containerPort: 8080
      hostPort: 8081

这样,通过物理机IP和8081就可以访问Pod内的container。

  1. 设置Pod级别的hostNetwork=true,该Pod所有容器的端口号都直接映射到物理机上。
spec:
 hostNetwork: true
 containers:
 - name: webapp
   ports:
   - containerPort: 8080

这样,通过物理机IP和8080就可以访问Pod内的container。

如何从集群外部访问Service?

将Service的端口号映射到宿主机,以使客户端能够通过物理机访问Service。

  1. 设置Service类型为NodePort,设置nodePort映射到物理机上。
spec:
 type: NodePort
 ports:
 - port: 8080
    targetPort: 8080
    nodePort: 8081

这样,通过物理机IP和nodePort 8081就可以访问Service。

  1. 设置LoadBalancer映射到云厂商的LoadBalancer地址。
spec:
 type: LoadBalancer
 loadBalancerIP: 78.11.24.19
 ports:
 - protocol: TCP
    port: 80
    targetPort: 9376
    nodePort: 30061
 clusterIP: 10.0.171.239
status: 
 loadBalancer: 
  ingress: 
  - ip: 146.148.47.155

这样,通过146.148.47.155就可以访问负载均衡器,由它来转发请求到后端Pod上。
这样,通过IP和8080就可以访问Pod内的container。

上一篇 下一篇

猜你喜欢

热点阅读