kkwen

命令式容器编排(3)部署Service对象
简单来说,一个Service对象可视作通过其标签选择器过滤出的以组Pod对象,并能够为此组Pod对象监听的套接字提...
扫描右侧二维码阅读全文
21
2019/01

命令式容器编排(3)部署Service对象

简单来说,一个Service对象可视作通过其标签选择器过滤出的以组Pod对象,并能够为此组Pod对象监听的套接字提供端口代理及调度服务

1. 创建Service对象(kubectl expose)

  • kubectl expose可用于创建Service对象以将应用程序"暴露"于网络中
    例:将myapp创建的Pod对象使用"Nodeport"类型的服务暴露到集群外部
    [root@ _43_ ~]# kubectl expose deployment/myapp --type="NodePort" --port=80 --name=myapp
    service/myapp exposed
    
    --type    用于指定Service的类型
    --port    用于指定要暴露的容器端口
    myapp     目标Service对象的名称为myapp
    
  • 访问测试:
    kubectl run client --image=busybox --restart=Never -it -- /bin/sh
    [root@ 48 ~]# kubectl run client --image=busybox --restart=Never -it /bin/sh
    If you don't see a command prompt, try pressing enter.
    / # wget -O - -q http://myapp.default:80
    Hello MyApp | Version: v1 | Pod Name
  • 说明:创建时,Service对象及其ClusterIP会由CoreDNS附件动态添加至名称解析库当中,因此解析服务在对象创建后即可直接使用

    使用kubectl get svc/myapp能列出Service对象的详细信息

    [root@ _49_ ~]# kubectl get svc/myapp
    NAME    TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    myapp   NodePort   10.96.86.21   <none>        80:31963/TCP   50m
    
    PORT(s)    该字段表示,集群中各工作节点会捕获发往本地的目标端口为31963的流量,并将其代理至当前Service对象的80端口
               于是集群外部的用户可以使用当前集群中任一节点的此端口来请求Service对象上的服务
    CLUSTER-IP 该字段为当前Service的IP地址,它是一个虚拟IP,并没有配置于集群中的任何主机的任何接口之上,但每个node之上的kube-proxy都会为CLUSTER-IP所在
               的网路创建用于转发的iptables或ipvs规则,此时,用户可于集群外部任一浏览器请求集群任一节点的相关端口来进行访问测试
    

    注:创建Service对象的另一种方式是kubectl create service,其中有对应子命令kubectl create service clusterip和kubectl create service nodeport等

2. 查看Service资源对象的描述(kubectl describe services)

  • kubectl describe services命令用于打印Service对象的详细信息
    通常包括Service对象的Cluster IP,关联Pod对象时使用的标签选择器以及关联到的Pod资源的端点

        [root@ _50_ ~]# kubectl describe services myapp
        Name:                     myapp
        Namespace:                default
        Labels:                   run=myapp
        Annotations:              <none>
        Selector:                 run=myapp
        Type:                     NodePort
        IP:                       10.96.86.21
        Port:                     <unset>  80/TCP
        TargetPort:               80/TCP
        NodePort:                 <unset>  31963/TCP
        Endpoints:                10.244.1.7:80
        Session Affinity:         None
        External Traffic Policy:  Cluster
        Events:                   <none>
    
  • 说明:

        Selector:     当前Service对象使用的标签选择器,用于选择关联的Pod对象
        Type:         即Service的类型,其值可以是ClusterIP、NodePort、和LoadBalancer其中之一
        IP:         当前Service对象的ClusterIP
        Port:         暴露的端口,即当前Service用于接收并相应请求的端口
        TargetPort: 容器中的用于暴露的目标端口,由Service Port路由请求至此端口
        NodePort:     当前Service的NodePort,它是否存在有效值与Type字段中的类型相关
        EndPoints: 后端端点,即被当前Service的Selector挑中的所有Pod的IP及其端口
        Session Affinity:     是否启用回话粘性
        External Traffic Policy: 外部流量的调度策略
最后修改:2019 年 01 月 21 日 10 : 02 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论