zoukankan      html  css  js  c++  java
  • Kubernetes之Service

      Service存在的意义

    • 防止Pod失联
    • 定义一组Pod访问策略
    • 支持ClusterIp,NodePort以及LoadBalancer三种类型

      Pod与Service的关系

    • 通过label-selector相关联
    • 通过Service实现Pod的负载均衡(TCP/UDP 4层)

      示例

      svc.yaml

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: java-demo
      name: java-demo
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: java-demo
      type: NodePort
    

      selector根据标签关联一组资源

      service类型

      ClusterIP在集群内部访问,相当于一个VIP虚拟IP,访问VIP转发到后端不同的Pod

      NopePort在每个Node上面创建一个端口,访问端口转发到后端不同的Pod,端口是随机的默认是从30000开始,用户访问Node ip加随机端口

      LoadBalancer主要应用于公有云,工作原理类似于NopePort,访问Lb转发到Node通过Node再转发到后端Pod

      查看当前命名空间下的service

    kubectl get svc
    

       任何类型都会产生内部的cluster ip

      Service NopePort对外暴露应用

      需要访问以下三个Pod

       创建Service 改pod使用deploy.yaml创建

    kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort
    

      指定类型为deployment 

      指定名称为java-demo 如果不知道名字可以通过kubectl get deploy查看

      --port=80集群内部访问的端口是80

      --target-port=8080内部应用实际端口,因为是tomcat所以是8080端口

      可以使用参数--name指定名称 不指定名称和deploy是一样的

      --type指定类型

      Service已经存在,之前已经创建过了

       加参数不执行创建yaml文件

    kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort --dry-run -o yaml
    

       导出至svc2.yaml

    kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort --dry-run -o yaml>>svc2.yaml
    

      应用

    kubectl apply -f svc2.yaml
    

       访问任何Node加随机端口即可访问该项目

      怎么创建cluster ip把yaml文件里面的type类型改成ClusterIP即可

      修改svc2.yaml

     

       不指定type的话默认就是ClusterIP及只能在集群内部访问

      删除刚刚应用的svc2

    kubectl delete -f svc2.yaml
    

      再创建一次

    kubectl apply -f svc2.yaml
    

      查看

    kubectl get svc
    

      

       在任何一个节点使用ClusterIP访问

     curl 10.1.187.157:80
    

      要使用LoadBanlancer也是定义的

      最常用的是ClusterIP和NodePort 

      CLusterIP只能在集群内部访问,只能在节点访问

      NopePort分配一个集群IP会在每个Node启用一个端口,可以在集群外部访问

      LoabBanlancer 分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务

      

      Service可以实现负载均衡,是怎么实现多个Pod负载均衡的呢

      通过Iptables创建的规则转发到Pod 

      使用kube-proxy实现实现service功能

  • 相关阅读:
    对于dll(动态链接库)的理解
    Java中异常发生时代码执行流程
    使用Gitea搭建git服务
    python-grpc
    Docker环境变量设置
    pandas操作excel
    docker笔记
    flask笔记
    索引原理
    视图、触发器、事务、存储过程
  • 原文地址:https://www.cnblogs.com/minseo/p/12170529.html
Copyright © 2011-2022 走看看