zoukankan      html  css  js  c++  java
  • k8s之service

     K8s三种网络: node network

    pod network

    cluster network --> virtual ip --> service 规则

    service:  kube-proxy监控api-server,api-server数据发生改变,相应的kube-proxy就会改变service规则,

    service有三种工作模式:userspace, 1.1版本之前

                                         iptables, 1.10之前

                                         ipvs 1.11版本之后

    kubectl delete svc redis

                        service  service

    kubectl explain service

    kubectl explain service.spec

    service类型:

    ExternalName, 集群外的服务引用到集群内 外部服务名称

    ClusterIP, 仅用于集群内通信

    NodePort, 用于与集群外通信

    LoadBalancer,部署到虚拟机,虚拟机工作在环境中,云环境支持负载均衡,lbaas, 类似nodeport负载均衡

    清单文件创建service

    ClusterIP, 仅用于集群内通信  访问时service先指向clusterip,在指向pod ip

    kubectl explain service.spec.ports

    vim redis-svc.yaml

    apiVersion: v1

    kind: Service

    metadata:

      name: redis  service名称

      namespace: default

    spec:

      selector:  选取的pod标签 关联到pod

        app: redis 

        role: logstor

      clusterIP: 10.97.97.97 设定clusterip

      type: ClusterIP 选取clusterip类型的service

      ports:

      - port: 6379  service端口 引用的service端口与后端pod建立关系

        targetPort: 6379  指定的pod的端口

    kubectl apply -f redis-svc.yaml 创建service

    kubectl get svc 查询service

    kubectl describe svc redis   service-redis的详细信息

    Endpoints:         10.244.1.66:6379  后端地址,即关联的pod地址

    资源记录:SVC_NAMe.NS_NAME.DOMAIN.LTD.

              服务名  名称空间    集群域名后缀

           集群域名默认后缀  svc.cluster.local.

          比如:刚创建的service 名为redis,  那么域名为:

               redis.default.svc.cluster.local.

           直接访问域名就可以访问服务了,并解析pod地址了

    nodeport默认分配端口 30000-32797

    创建nodeport服务

    引用前面deploy控制器myapp-deploy创建的pod

    cp redis-svc.yaml myapp-svc.yaml

    vim myapp-svc.yaml

    apiVersion: v1

    kind: Service

    metadata:  service属性

      name: myapp

      namespace: default

    spec:

      selector:

        app: myapp 关联pod

        release: canary

      clusterIP: 10.99.99.99 指定clusterip

      type: NodePort  指定service类型

      ports:

      - port: 80  service端口

       targetPort: 80 关联的pod端口

       nodePort: 30080  外部访问node的端口

      

    kubectl create -f myapp-svc.yaml  创建service

    kubectl get svc

    80:30080/TCP

    service端口80  映射  node端口30080

    测试

    在外面访问任一节点 比如192.168.81.10:30080

    while true; do curl http://192.168.81.30:30080/hostname.html;sleep 1;done

    ExternalName

    集群内的pod访问集群外的资源,

    kubectl explain svc.spec.externalName

    sessionAffinity

    kubectl explain svc.spec

     sessionAffinity <string>  保持会话IP 同一个IP请求始终发往同一个后端pod

    kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}'

    kubectl describe svc myapp 查看是否加上sessionAffinity

    kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"None"}}' 改回None,就不会始终发往一个pod

    headless  无头service 无头服务 service直接指向pod IP

    cp myapp-svc.yaml myapp-headless.yaml

    vim myapp-headless.yaml

    apiVersion: v1

    kind: Service

    metadata:

      name: myapp-svc

      namespace: default

    spec:

      selector:

        app: myapp

        release: canary

      clusterIP: None

      ports:

      - port: 80

    targetPort: 80

     kubectl apply -f myapp-headless.yaml

    kubectl get svc

    安装dig命令 yum install bind-utils -y

    查询coreDns

    kubectl get svc -n kube-system

    解析service

        dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.10

                        服务域名             @指定coredns

    解析的结果为后端podip

            

    对于前面service类型为clusterip

    dig -t A myapp.default.svc.cluster.local. @10.96.0.10

    解析结果为CLUSTER-IP

  • 相关阅读:
    闲来无事,编写一个数据迁移小工具
    Moq基础
    探索逻辑事务 TransactionScope
    IntelliJ IDEA安装及jsp开发环境搭建
    数据结构整理(二) 树
    数据结构整理(一) 线性结构
    梳理delegate相关概念
    02_Android应用界面编程_01_视图(View)组件
    01_Android应用开发环境_05_签名android应用程序
    01_Android应用开发环境_04_Android常用开发工具的用法
  • 原文地址:https://www.cnblogs.com/leiwenbin627/p/11300746.html
Copyright © 2011-2022 走看看