k8s(六) 使用service控制集群访问控制
service
创建service
service 用来将一组pod抽象成为网络服务。
通过
expose 命令可快速创建service
1 |
|
查看
1 | kubectl get svc |

可以看到为此部署生成了一个服务。并且生成了一个ClusterIP
通过curl 使用clusterIp 将能够访问服务
1 | curl 10.105.110.239 |

service 如何访问的
Service定义中的关键字段是ports和selector。
selector 定义的是选择特定标签的一类pod;
ports 用来定义端口信息
port 指的是service的port
targetPort 对应的pod的port
nodePort 节点上暴露的port
通过访问service 的地址 会通过内置的负载均衡策略访问到选中的多个pod上。
此策略也是可以配置的,比如轮训或会话保持。
service 的类型
- ClusterIP 默认的service 类型
通过内部的集群ip进行访问。
- NodePort 类型
如果执行类型为NodePort 并且配置了外部端口,那么将能够通过 nodeIp+ nodePort 访问到ClusterIP:port 再访问到 podIp:targetPort
- LoadBalancer 类型
此选项要与云服务商提供的服务进行配合,可以通过此服务 将直接重定向到后端 Pod 上。
外部服务service
如果集群内部想要访问外部的服务,可以定义一个空的service,未选择pod的service 关联一个自定义的endpoint。
当访问service的时候,service指向endpoint
一般用于内部服务访问 不在集群中的服务时使用。

Headless Service
Headless Service 指的是没有ClusterIP的service,对service 访问的时候会返回所有的pod的列表,由调用者
来定义负载均衡的相关策略。
Headless service 就是ClusterIP = none 的service
访问一个headless service, 其实是随机且直接访问到后端Pod, 比如多次ping redis-service, 你会发现解析出来的地址是不同的, 而这些地址都是Pod的地址.


