Services

定义

​ Kubemetes 服务是一种为一组功能相同的pod 提供单一不变的接入点资源。默认情况下,您会获得稳定的集群IP地址,集群内部的客户端可以使用该IP地址与Service中的Pod通信。客户端向稳定IP地址发送请求,然后请求会被路由到Service的其中一个Pod。

​ Service通过选择器selector来识别器成员Pod。为使得Pod成为Service的成员,该Pod必须具有选择器中指定的所有标签label。如下资源清单yaml文件例子。需具备标签1和标签2的Pod才是该Service的成员。

apiVersion: v1
kind: Service
metadata:
 name: my-service
spec:
  #选择器对象
 selector: 
  app:metrics#标签1
  department:engineering#标签2
  #ports对象
 ports:
    name:
    port:#指定端口,该端口值可以任意
    targetPort:#转发到的Pod端口,该端口值不是任意的
    nodePort:
    protocol
使用Service的目的
  • 背景:每个Pod具有IP地址,当使用Deployment控制器时,Pod的IP地址往往动态变化。
  • 解决方法:通过Service可以获得稳定的IP地址,且在Service的生命周期有效,与Pod的IP地址变化与否无关。
5种Service类型
类型解释yaml文件注意字段
clusterIP(default)内部客户端向稳定的内部IP地址发送请求type:ClusterIP;
NodePort客户端向使用Service指定的一个或多个nodePort值的节点的IP地址发送请求type:NodePort
LoadBalancer客服端向网络负载均衡的IP地址发送请求type:LoadBalancer
ExternalName内部客户端使用Service的DNS名称作为外部DNS名称的别名type:ExternalName
Headless如果你需要对Pod分组,但是不需要稳定的IP地址,就可以使用Headless服务type:Headless
Endpoints对象

​ 创建Service时,kubernetes会创建一个与Service同名的EndPoints对象。kubernetes使用Endpoints对象来跟踪哪些Pod属于Service的成员。

创建服务

​ 通过命令kubectl expose 服务名字;另外也可以通过编写yaml文件来弄。
在这里插入图片描述

检测新的服务

在这里插入图片描述

从内部集群测试服务

  • 显而易见的方法是创建一个pod ,它将请求发送到服务的集群IP 并记录响应。可以通过查看pod 日志检查服务的响应。
  • 使用ssh 远程登录到其中一个Kubemetes 节点上,然后使用curl 命令。
  • 可以通过kubectl exec 命令在一个己经存在的pod 中执行curl 命令。

在运行的容器中远程执行命令
在这里插入图片描述

​ 配置服务上的会话亲和性需要在yaml文件中增加sessionAffinity 属性

同一个服务暴露多个端口

在这里插入图片描述

连接集群外部的服务

​ 后端是集群中运行的一个或多个pod 的服务。服务并不是和pod 直接相连的。相反,有一种资源介于两者之间一一它就是Endpoint 资源。

[apps@NM-ITC-RH5885V3-BSS-032 tyj]$ kubectl describe svc kubia
Name:              kubia
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=kubia
Type:              ClusterIP
IP:                10.0.0.180
Port:              <unset>  80/TCP
TargetPort:        8080/TCP
Endpoints:         172.10.0.103:8080,172.10.0.127:8080,172.10.0.128:8080 + 3 more...
Session Affinity:  None
Events:            <none>

​ Endpoint 资源就是暴露一个服务的IP 地址和端口的列表, Endpoint 资源和其他Kubernetes 资源一样,所以可以使用kubectl info 来获取它的基本信息。

[apps@NM-ITC-RH5885V3-BSS-032 tyj]$ kubectl get endpoints kubia
NAME    ENDPOINTS                                                           AGE
kubia   172.10.0.103:8080,172.10.0.127:8080,172.10.0.128:8080 + 3 more...   130m

手动配置服务的endpoint

创建没有选择器的服务。通过yaml文件启动。

在这里插入图片描述

为没有选择器的服务创建Endpoint 资源

在这里插入图片描述

列出服务

[apps@NM-ITC-RH5885V3-BSS-032 ~]$ kubectl get services#或者输入kubectl get svc
NAME             TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)           AGE
fan-app          NodePort       10.0.0.166   <none>        8222:25913/TCP    16h
kubernetes       ClusterIP      10.0.0.1     <none>        443/TCP           15d
kubia            ClusterIP      10.0.0.129   <none>        10009/TCP         3d14h
kubia-headless   ClusterIP      None         <none>        80/TCP            16h
kubia-http       LoadBalancer   10.0.0.10    <pending>     10010:30466/TCP   3d14h
kubia-nodeport   NodePort       10.0.0.173   <none>        80:30123/TCP      46h
Logo

开源、云原生的融合云平台

更多推荐