• 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:使用云提供商的负载均衡器公开服务
    
  • 相关阅读:
    hibernate关联关系
    数据结构之二叉树java实现
    队列java实现
    栈java实现
    原生JS结合cookie实现商品评分组件
    JAVA学习第一阶段(2)
    JAVA学习第一阶段(1)
    如何修改hosts并保存
    运行Apache时出现the requested operation has failed
    实现一元多项式
  • 原文地址:https://www.cnblogs.com/hsyw/p/14195074.html
Copyright © 2020-2023  润新知