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:使用云提供商的负载均衡器公开服务
    
  • 相关阅读:
    《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
    .NET Core中文分词组件jieba.NET Core
    .NET Core 2.0及.NET Standard 2.0
    Visual Studio 2017 通过SSH 调试Linux 上.NET Core
    Visual Studio 2017 ASP.NET Core开发
    Visual Studio 2017正式版离线安装及介绍
    在.NET Core 上运行的 WordPress
    IT人员如何开好站立会议
    puppeteer(二)操作实例——新Web自动化工具更轻巧更简单
    puppeteer(一)环境搭建——新Web自动化工具(同selenium)
  • 原文地址:https://www.cnblogs.com/hsyw/p/14195074.html
Copyright © 2011-2022 走看看