根据标签label和selector标签使pod和service建联。只支持4层负载,7层负载需要使用ingress,ingress本身不会自动创建负载均衡器,集群中需要运行一个ingress controller 来根据ingress的定义来管理负载均衡器。
service常用三种类型:
- ClusterIp(集群内部使用)
- NodePort(对外访问应用使用)
- LoadBalancer(对外访问应用使用,公有云)
集群外部访问服务怎么办?
- 使用nodeport服务再每台机器上绑定一个端口,可以通过nodeIP:nodeport来访问服务
- 使用loadbalancer服务借助cloud provider 创建一个外部的负载均衡器,并将请求转发到nodeIP:nodeport,该方法适用于运行再云平台之中的kubernetes集群。
- 使用ingress controller 再service之上创建7层负载均衡并对外开放。
- 使用ECMP将service clusterip 网段路由到每个node,这样可以直接通过clusterip来访问服务,甚至可以直接再集群外部使用kube-dns,这一版在物理机部署的情况下
备注:
Port:service端口
targetPort:pod端口(应用访问端口)
创建svc命令:
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort -o yaml > service.yaml
kubectl apply -y service.yaml