service

创建service

service 用来将一组pod抽象成为网络服务。

通过

expose 命令可快速创建service

1
2
3

kubectl expose deploy nginx-deployment --port=8081 --target-port=80

查看

1
kubectl get svc

可以看到为此部署生成了一个服务。并且生成了一个ClusterIP

通过curl 使用clusterIp 将能够访问服务

1
2
3
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的地址.