1. 什么是service(服务的发现和负载均衡)
①集群内的容器升级或故障下线产生新的pod时,容器ip是不断变化的,service在这中间提供vip地址和服务发现的作用,无论容器ip如何变化,service总能通过虚拟机地址找到对应的pod容器提供服务。
②当一个应用服务有多个容器提供服务时,service可自动的将外部请求合理的,按照比例分发到所有的容器上,实现负载均衡。
2.service与pod容器如何关联
与前面controller和pod的关联模式一样,通过labels标签建立关联, key.value键值对标识,例如:
selector:
app:nginx
labels:
app:nginx
3.service常用的三种类型
kubectl expose --help #执行这条命令末尾位置能看到下面一行内容。
--type='': Type for this service: ClusterIP, NodePort, LoadBalancer, or ExternalName. Default is 'ClusterIP'.
① ClusterIP :默认参数,供集群内部使用
② NodePort : 对外访问集群内部应用使用
③ LoadBalancer : 对外访问集群内部应用使用,使用公有云中的LB负载均衡器提供服务。
示例:
①分别创建一个clusterip和nodeport的yaml模板
创建默认的clusterip的service
kubectl expose deployment web --port=80 --target-port=80 --name=clusteripp --dry-run -o yaml > clusteripp.yaml
创建类型为nodeport的service
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=nodeportt --dry-run -o yaml > nodeportt.yaml
②查看内容
nodeport仅声明了类型,k8s会自动分配一个随机端口,如需自定义端口,在-port 下面加一行nodeport: 36666 即可,注意对齐
3.分别创建这两个svc,查看效果
nodeport端口类型可以外部访问,使用任意K8S节点ip:31588端口即可访问。