K8S之Service

对于K8S整个集群来说,Pod地址是可变的。一个Pod因某些原因退出了,而其设置了副本数replicas大于1那么该Pod就会在集群的任意节点重新启动。重新启动后的Pod的IP与原IP地址不同,这样就不能根据Pod的IP来进行调度。于是K8S引入了Service概念,它为Pod提供了一个入口,主要通过Labels标签来选择后端Pod,不论Pod地址如何变更,只要Pod的Labels标签没变,那么就可以通过service来调度

三种模式

user space、 iptables、 ipvs

Service类型

  1. Cluster IP 通过集群内部IP暴露服务,只能通过集群内部访问,默认类型
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    nginx-service
spec:
  type: ClusterIP
  selector:   ##定义标签选择器,代理后端nginx-service的pod
    name: nginx-service    
  ports:
  - port: 8080  
  1. LoadBalance 使用云提供商的负载均衡器,可以向外部暴露服务。外部的负载均衡器可以路由到NodePort服务和Cluster IP服务
apiVersion: v1
kind: service
metadata:
  name: xx-service
spec:
  selector:
    app: APP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9378
  clusterIP: xx.xx.xx.xx
  loadBalancerIP: x.x.x.x  
  type: LoadBalancer
status:
  loadBalance:
    ingress:
    - ip: a.a.a.a      
  1. NodePort node的基本的port,service可以通过NodeIP:NodePort访问service服务,NodePort会路由到ClusterIP 服务,这个ClusterIP 会通过请求自动创建
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    nginx-service
spec:
  type: NodePort
  selector:   ##定义标签选择器,代理后端nginx-service的pod
    name: nginx-service    
  ports:
  - port: 8080  
  1. ExternalName 通过返回CNAME和它的值,可以将服务映射到externalName字段的内容,没有任何类型代理被创建,用于访问集群内其他没有labels的Pod,也可以访问其他NameSpace里的service
apiVersion: v1
kind: Service
metadata:
  name: xx-service
  namespace: prod
spec:
  type: ExternalName
  externalName: xx.xx.xx.xx.com  
posted @ 2024-08-23 14:13  秋水秋色  阅读(3)  评论(0编辑  收藏  举报