zoukankan      html  css  js  c++  java
  • Service介绍

    一、什么是Service?

    	Service可以简单的理解为逻辑上的一组Pod。一种可以访问Pod的策略,而且其他Pod可以通过这个Service访问到这个Service代理的Pod。相对于Pod而言,它会有一个固定的名称,一旦创建就固定不变。
    	可以简单的理解成访问一个或者一组Pod的时候,先访问service再去访的IP的,service的名称的固定的,不管你怎么重启Pod,Pod的IP怎么改变,都不影响用户的使用
    

    二、创建一个简单的Service

    [root@k8s-master01 ~]# cat nginx-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx-svc    #service 标签名字
      name: nginx-svc	  #service 固定名字
    spec:
      ports:
      - name: http 		# Service端口的名称
        port: 80 	    # Service自己的端口, servicea --> serviceb http://serviceb,  http://serviceb:8080 
        protocol: TCP   # UDP TCP SCTP default: TCP
        targetPort: 80  # 后端应用的端口
      - name: https     
        port: 443
        protocol: TCP
        targetPort: 443
      selector:
        app: nginx
      sessionAffinity: None
      type: ClusterIP
      
    # 创建一个service
    [root@k8s-master01 ~]# kubectl create -f nginx-svc.yaml  
    

    三、使用Service代理k8s外部应用

    使用场景:

    希望在生产环境中使用某个固定的名称而非IP地址进行访问外部的中间件服务
    希望Service指向另一个Namespace中或其他集群中的服务
    某个项目正在迁移至k8s集群,但是一部分服务仍然在集群外部,此时可以使用service代理至k8s集群外部的服务
    
    # 创建一个类型为external的service(svc),这个svc不会自动创建一个ep
    [root@k8s-master01 ~]# vim nginx-svc-external.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx-svc-external
      name: nginx-svc-external
    spec:
      ports:
      - name: http # Service端口的名称
        port: 80 # Service自己的端口, servicea --> serviceb http://serviceb,  http://serviceb:8080 
        protocol: TCP # UDP TCP SCTP default: TCP
        targetPort: 80 # 后端应用的端口
      sessionAffinity: None
      type: ClusterIP
    
    # create svc
    [root@k8s-master01 ~]# kubectl create -f nginx-svc-external.yaml 
    service/nginx-svc-external created
    
    # 查看svc
    [root@k8s-master01 ~]# kubectl get svc
    NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    kubernetes           ClusterIP   10.96.0.1       <none>        443/TCP          6d4h
    nginx-svc            ClusterIP   10.96.141.65    <none>        80/TCP,443/TCP   4d3h
    nginx-svc-external   ClusterIP   10.109.18.238   <none>        80/TCP           16s
    
    # 手动创建一个ep,跟上面创建的svc关联起来
    [root@k8s-master01 ~]# vim nginx-ep-external.yaml 
    apiVersion: v1
    kind: Endpoints
    metadata:
      labels:
        app: nginx-svc-external   #名字要跟svc的一致
      name: nginx-svc-external
      namespace: default
    subsets:
    - addresses:
      - ip: 220.181.38.148 
      ports:
      - name: http
        port: 80
        protocol: TCP
       
    # create ep
    [root@k8s-master01 ~]# kubectl create -f nginx-ep-external.yaml
    endpoints/nginx-svc-external created
    
    # 查看ep
    [root@k8s-master01 ~]# kubectl get ep
    NAME                 ENDPOINTS                                                               AGE
    kubernetes           192.168.1.100:6443,192.168.1.101:6443,192.168.1.102:6443                6d4h
    nginx-svc            172.161.125.15:443,172.162.195.15:443,172.169.244.194:443 + 9 more...   4d3h
    nginx-svc-external   220.181.38.148:80                                                       35s
    
    # 访问ep
    [root@k8s-master01 ~]# curl 220.181.38.148:80 -I
    HTTP/1.1 200 OK
    Date: Sat, 26 Dec 2020 16:00:57 GMT
    Server: Apache
    Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
    ETag: "51-47cf7e6ee8400"
    Accept-Ranges: bytes
    Content-Length: 81
    Cache-Control: max-age=86400
    Expires: Sun, 27 Dec 2020 16:00:57 GMT
    Connection: Keep-Alive
    Content-Type: text/html
    

    四、使用Service反代域名

    cat > nginx-externalName.yaml  << EOF
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx-externalname
      name: nginx-externalname
    spec:
      type: ExternalName
      externalName: www.baidu.com
    EOF
    
    # create svc
    [root@k8s-master01 ~]# kubectl create -f nginx-externalName.yaml
    service/nginx-externalname created
    
    # 查看svc
    [root@k8s-master01 ~]# kubectl get svc
    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
    kubernetes           ClusterIP      10.96.0.1       <none>          443/TCP          6d4h
    nginx-externalname   ExternalName   <none>          www.baidu.com   <none>           27s
    nginx-svc            ClusterIP      10.96.141.65    <none>          80/TCP,443/TCP   4d3h
    nginx-svc-external   ClusterIP      10.109.18.238   <none>          80/TCP           18m
    

    五、SVC类型

    ClusterIP:在集群内部使用,也是默认值
    
    ExternalName:通过返回定义的CNAME别名
    
    NodePort:在所有安装了kube-proxy的节点上打开一个端口,此端口可以代理至后端Pod,然后集群外部可以使用节点的IP地址和NodePort的端口号访问到集群Pod的服务。NodePort端口范围默认是30000-32767
    
    LoadBalancer:使用云提供商的负载均衡器公开服务
    
  • 相关阅读:
    Java基础(十四)——API(Calendar类、System类、StringBuilder类、包装类)
    异常
    Java基础(十三)——权限修饰符和内部类
    知识点总结
    Java基础(十二)— —多态
    Java基础(十一)— —继承、抽象类和接口
    java基础(十)——继承
    小程序外部向组件内部传递externalClasses -- 传入样式wxss
    小程序组件交互 -- 传入js
    promise封装小程序的请求类(request,清爽易懂)
  • 原文地址:https://www.cnblogs.com/hsyw/p/14195074.html
Copyright © 2011-2022 走看看