美文网首页
Kubernetes学习笔记(五)--- Service

Kubernetes学习笔记(五)--- Service

作者: CaiGuangyin | 来源:发表于2019-04-18 19:20 被阅读0次

    目录

    Service的三种工作模式:
    Service的类型:
    Service的会话粘性:
    无头Service (Headless Service)
    

    Service名词解释--中文文档

    Service的三种工作模式:

    • userspace: k8s 1.1之前;
    • iptables : k8s 1.10之前;
    • ipvs : k8s 1.11+

    Service的类型:

    • ClusterIP: 只能被集群内部的应用访问,没指定类型时,默认就是ClusterIP;
    • NodePort:可以被集群外部的应用访问;
    • LoadBalancer: 参考https://blog.csdn.net/cleverfoxloving/article/details/79186574
    • ExternalName: 当Service类型是ExternalName时,Service所关联的不是本地Pod应用,而是集群外部的服务。从而实现集群内部的Pod应用调用集群外部的服务,可以把集群外部的服务当作内部服务一样去调用它。当Service类型是ExternalName时,spec.externalName字段才生效。这个字段值应该是一个CNAME记录。

    Service的会话粘性:

    • Service的spec下还有一个sessionAffinity字段,就是用来设定会话粘性的。此字段有ClientIPNone两个值可选。默认是None,表示不具有会话粘性。ClientIP表示同一个源IP的访问请求都调度到同一个后端Pod上去(类似于Nginx的ip_hash负载调度算法)。

    下面是一个完整的Service资源清单示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: redis-svc
      namespace: default
      labels:
        group: redis
    spec:
      clusterIP: 10.106.106.106       # clusterIP就是给service分配的IP,如果不定这个字段,K8S会自动给service分配一个IP。
      selector:
        app: redis
        role: log_storage
      ports:
      - name: redis               # 给端口取个名称
        protocol: TCP             # 协议,默认就是TCP
        port: 6379                # service的端口
        targetPort: 6379          # Pod的端口 
    

    无头Service (Headless Service)

    无头Service没有ClusterIP。直接将Service名称解析到后端Pod的IP。
    在定义无头Service时,只需要将clusterIP设为None即可。

    清单文件内容如下:

    [root@k8s-master manifests]# cat myapp-headless-svc.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-headless-svc
      namespace: default
    spec:
      clusterIP: None            # 关键点,将clusterIP设为None
      selector:
        app: myapp
        release: canary
      ports:
      - name: http
        port: 80
        targetPort: 80
    

    创建:kubectl apply -f myapp-headless-svc.yaml

    查看创建成功的无头Service


    image.png

    利用dig命令去解析myapp-headless-svc,最终解析到的是五个后端Pod的IP
    命令:dig -t A myapp-headless-svc.default.svc.cluster.local. @10.96.0.10

    image.png

    命令:kubectl get pods -l app=myapp,release=canary -o wide

    image.png

    相关文章

      网友评论

          本文标题:Kubernetes学习笔记(五)--- Service

          本文链接:https://www.haomeiwen.com/subject/etqxgqtx.html