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类型
- 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
- 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
- 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
- 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