zoukankan      html  css  js  c++  java
  • 10.service 详解

    10.service 详解

    什么是service:
    Kubernetes中的Service 是一个抽象的概念,它定义了Pod的逻辑分组和一种可以访问它们的策略,这组Pod能被Service访问,使用YAML (优先)或JSON 来定义Service,Service所针对的一组Pod通常由LabelSelector实现


    service是依赖于dns。 CoreDNS,kube-dns。
    node network service network pod network

    service的实现有三种工作模型
    1.userspace 效率低 1.10及之前的k8s版本使用
    2.iptables 1.10之后
    3.ipvs 1.11开始默认使用,如果没有ipvs,则降级使用iptables,要启用需要在部署过程中指定KUBE_PROXY_MODE=ipvs ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh,nf_conntrack_ipv4 这几个内核模块需要安装

    service类型:

    ClusterIP 集群内部访问,私网地址,可以被各个节点及pod访问,无法被外部访问。
    NodePort 集群外部访问
    ExternalName 访问集群之外部服务,例如调用外部的api等
    FQDN
    CNAME-->FQDN
    LoadBalancer 暂时做不了,需要共有云环境,要支持LBaas
    Headless 无头service,没有clusterIP。 #设置 CluserIP=None 

      使用场景: 1. 自主选择权,有时候client想自己来决定使用哪个Real Server,可以通过查询DNS来获取Real Server的信息。

             2. Service的对应的每一个Endpoints,即每一个Pod,都会有对应的DNS域名;这样Pod之间就可以互相访问。(这样对于一些集群类型的应用就可以解决互相之间身份识别的问题)

      


    service是属于4层代理,属于osi模型四层模型,对于https不支持

    使用清单来定义service:
    ClusterIP类型:

    [root@k8s-master manifests]# vim svc.ClusterIP.yaml

    apiVersion: v1
    kind: Service
    metadata:
    name: redis
    namespace: default
    spec:
    selector: #注意 这里的selector下面没有matchLabels等字段
    app: redis
    role: logstor
    clusterIP: 10.97.97.97 #这个选项一般不设置,使用控制器自动会分配
    type: ClusterIP
    ports:
    - port: 6379 #service port
    targetPort: 6379 #pod port


    NodePort类型:

    [root@k8s-master manifests]# cat svc.NodePort.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: myapp-nginx
    namespace: default
    spec:
    selector: #注意 这里的selector下面没有matchLabels等字段
    run: nginx-deploy
    clusterIP: "" #这个选项一般不设置,使用控制器自动会分配
    type: NodePort
    ports:
    - port: 80 #service port
    targetPort: 80 #pod port
    nodePort: 30080 #这个端口如果不指定30000 到32767之间的端口会被随机分配出来。

    ===
    nodePort: 可以不用指定,会自动分配
    ===
    ExternalName类型:
    eg:
    配置方式同前两种

    Session Affinity: ClienIP #这个值设置为Clientip后会会话保持,让同一个ip的访问到的后端pod为同一个,默认值是None,为None时候是负载均衡,随机到各个后端pod

    Headless类型:
    eg:
    [root@k8s-master manifests]# cat svc.headless.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: myapp-svc
    namespace: default
    spec:
    selector: #注意 这里的selector下面没有matchLabels等字段
    app: myapp
    role: canary
    clusterIP: None #在Headless类型中,这里值设置为None
    ports:
    - port: 80 #service port
    targetPort: 80 #pod port


    ===
    资源记录:SVC_NAME.NS.DOMAIN.LTD.
    svn.cluster.local
    redis.default.svc.cluster.local


  • 相关阅读:
    Missing Number
    python乱码,讲得比较好,
    公司搬家,拿了个费机器,没root密码,又忘了怎么搞了,
    mylyn
    eclipse shortcut binding
    jdk8 eclipse luna market crashed
    openjdk
    download plugin update site for offline installation
    armstrong's programming erlang 2nd
    sdf SimpleDateFormat 不是线程安全的,
  • 原文地址:https://www.cnblogs.com/heaven-xi/p/11312602.html
Copyright © 2011-2022 走看看