zoukankan      html  css  js  c++  java
  • Kubernetes service资源-十

    1、service工作模式

        userspace、iptables、ipvs
         userspace:1.1-
         iptables: 1.10-
         ipvs: 1.11+

    资源清单的定义字段查询:

    [root@master ~]# kubectl explain svc
    [root@master ~]# kubectl explain svc.spec
        ...
        clusterIP    <string>            #service的IP
        ports    <[]Object>        #把哪个端口与后端容器建立关联关系
        selector    <map[string]string>        #关联到哪些pod资源上
        sessionAffinity    <string>        #ClientIP:将同一个客户端的请求,始终发往同一个pod;None: 不生效
        type    <string>
            ExternalName, ClusterIP, NodePort, and LoadBalancer
        ...
    
    类型:
    ExternalName, ClusterIP, NodePort, LoadBalancer
         ClusterIP:是k8s的默认服务。它给你一个集群内的服务,自动分配一个只能在集群内部访问的虚拟IP,集群内的其它应用都可以访问该服务。集群外部无法访问它。
         NodePort: 服务是引导外部流量到你的服务的最原始方式。NodePort在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务。
         LoadBalancer:服务是暴露服务到internet的标准方式。只能在Service上定义,它是一些特定公有云提供的负载均衡器,需要特定的云服务商支持(AWS、Azure)
    它将给你一个单独的 IP 地址,转发所有流量到你的服务。

    2、service资源清单定义

    1、ClusterIP类型:

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

    apiVersion: v1
    kind: Service
    metadata:
      name: redis                         #service的名字
      namespace: default
    spec:
      selector:
        app: redis                        #选择拥有此标签的Pod
        role: logstor
      clusterIP: 10.97.97.97             #service的IP,不指定的话会动态分配
      type: ClusterIP                    #type
      ports:
      - port: 6379                       #service地址上的端口
        targetPort: 6379                 #容器上的端口

    [root@master manifests]# kubectl apply -f redis-svc.yaml

    2、NodePort类型

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp
      namespace: default
    spec:
      selector:
        app: myapp
        release: canary
      clusterIP: 10.99.99.99
      type: NodePort                    #type
      ports: 
      - port: 80                        #service地址上的端口                  
        targetPort: 80                  #容器上的端口
        nodePort: 30080                 #node节点的端口,不指定的话会动态分配

    [root@master manifests]# kubectl apply -f myapp-svc.yaml


    [root@master manifests]# kubectl get svc
    NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
    kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        10d
    myapp        NodePort    10.99.99.99   <none>        80:30080/TCP   25s
    redis        ClusterIP   10.97.97.97   <none>        6379/TCP       43m

    然后再集群外就可以通过service访问pod了;

    为service打补丁:

    #为service打补丁,"sessionAffinity":"ClientIP":将同一个客户端的请求,始终发往同一个pod
    [root@master manifests]# kubectl patch svc myapp -p '{"spec":{"sessionAffinity":"ClientIP"}}'

    3、

    无头service(headless):
    无头service,客户端直接访问的是pod的地址;
    有头service,客户端访问的是service的地址;


    [root@master manifests]# cat myapp-svc-headless.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-svc
      namespace: default
    spec:
      selector:
        app: myapp
        release: canary
      clusterIP: None             #clusterIP写为None,就表示无头;
      ports: 
      - port: 80                                      
        targetPort: 80
  • 相关阅读:
    IDEA快捷键命令
    win命令
    jwt《token》
    批量注释与快速顶底部命令
    springboot邮通知553错误和
    git《一》
    twemproxy《一》
    reids在linux上的安装《四》
    linux安装jdk
    长沙和广州软件开发之我见
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/12714224.html
Copyright © 2011-2022 走看看