除了 Cluster 内部能够访问 Service,不少状况咱们也但愿应用的 Service 可以暴露给 Cluster 外部。Kubernetes 提供了多种类型的 Service,默认是 ClusterIP。html
ClusterIP
Service 经过 Cluster 内部的 IP 对外提供服务,只有 Cluster 内的节点和 Pod 可访问,这是默认的 Service 类型,前面实验中的 Service 都是 ClusterIP。 node
NodePort
Service 经过 Cluster 节点的静态端口对外提供服务。Cluster 外部能够经过 <NodeIP>:<NodePort>
访问 Service。 负载均衡
LoadBalancer
Service 利用 cloud provider 特有的 load balancer 对外提供服务,cloud provider 负责将 load balancer 的流量导向 Service。目前支持的 cloud provider 有 GCP、AWS、Azur 等。 ide
下面咱们来实践 NodePort,Service httpd-svc
的配置文件修改以下: 学习
添加 type: NodePort
,从新建立 httpd-svc
。 测试
Kubernetes 依然会为 httpd-svc
分配一个 ClusterIP,不一样的是: ui
EXTERNAL-IP
为 nodes
,表示可经过 Cluster 每一个节点自身的 IP 访问 Service。 spa
PORT(S)
为 8080:32312
。8080
是 ClusterIP 监听的端口,32312
则是节点上监听的端口。Kubernetes 会从 30000-32767 中分配一个可用的端口,每一个节点都会监听此端口并将请求转发给 Service。 code
下面测试 NodePort 是否正常工做。 orm
经过三个节点 IP + 32312 端口都可以访问 httpd-svc
。
接下来咱们深刻探讨一个问题:Kubernetes 是如何将 <NodeIP>:<NodePort>
映射到 Pod 的呢?
与 ClusterIP 同样,也是借助了 iptables。与 ClusterIP 相比,每一个节点的 iptables 中都增长了下面两条规则:
规则的含义是:访问当前节点 32312
端口的请求会应用规则 KUBE-SVC-RL3JAE4GN7VOGDGP
,内容为:
其做用就是负载均衡到每个 Pod。
NodePort 默认是的随机选择,不过咱们能够用 nodePort
指定某个特定端口。
如今配置文件中就有三个 Port 了:nodePort
是节点上监听的端口。port
是 ClusterIP 上监听的端口。targetPort
是 Pod 监听的端口。
最终,Node 和 ClusterIP 在各自端口上接收到的请求都会经过 iptables 转发到 Pod 的 targetPort
。
应用新的 nodePort
并验证:
nodePort: 30000
已经生效了。
本章咱们讨论访问应用的机制 Service,学习了如何建立 Service;Service 的三种类型 ClusterIP、NodePort 和 LoadBalancer,以及它们各自的适用场景。
下一节咱们开始学习 Rolling Update。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html