外网如何访问 Service?- 每天5分钟玩转 Docker 容器技术(139)

外网如何访问 Service?- 每天5分钟玩转 Docker 容器技术(139)

原创 CloudMan CloudMan 2018-03-09

第139篇

外网如何访问 Service?

除了 Cluster 内部可以访问 Service,很多情况我们也希望应用的 Service 能够暴露给 Cluster 外部。Kubernetes 提供了多种类型的 Service,默认是 ClusterIP。

ClusterIP 
Service 通过 Cluster 内部的 IP 对外提供服务,只有 Cluster 内的节点和 Pod 可访问,这是默认的 Service 类型,前面实验中的 Service 都是 ClusterIP。

NodePort 
Service 通过 Cluster 节点的静态端口对外提供服务。Cluster 外部可以通过 <NodeIP>:<NodePort> 访问 Service。

LoadBalancer 
Service 利用 cloud provider 特有的 load balancer 对外提供服务,cloud provider 负责将 load balancer 的流量导向 Service。目前支持的 cloud provider 有 GCP、AWS、Azur 等。

下面我们来实践 NodePort,Service httpd-svc 的配置文件修改如下:

添加 type: NodePort,重新创建 httpd-svc

Kubernetes 依然会为 httpd-svc 分配一个 ClusterIP,不同的是:

  1. EXTERNAL-IP 为 nodes,表示可通过 Cluster 每个节点自身的 IP 访问 Service。

  2. PORT(S) 为 8080:323128080 是 ClusterIP 监听的端口,32312 则是节点上监听的端口。Kubernetes 会从 30000-32767 中分配一个可用的端口,每个节点都会监听此端口并将请求转发给 Service。

下面测试 NodePort 是否正常工作。

通过三个节点 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

Docker容器技术是一种轻量级的虚拟化技术,可以快速搭建和部署应用程序。每天花5分钟玩转Docker容器技术,可以充分利用碎片化的时间,提高工作和学习效率。 首先,我们需要了解Docker容器技术的基本概念和原理。可以每天读取Docker容器的相关书籍或者阅读官方文档,逐步掌握其中的关键概念和技术细节。 接下来,在学习过程中,可以每天尝试使用Docker命令行工具来进行实践。比如,运行一个简单的Hello World容器,下载一个Docker镜像并在容器中运行一个简单的应用程序等。通过实际操作,可以更好地理解Docker容器技术的工作原理。 此外,深入学习Docker容器技术的最好方式之一是参与项目实战。可以每天尝试运行一些具有挑战性的容器化项目,比如部署一个多容器的Web应用程序,搭建一个容器化的开发环境等。通过实际的项目实践,可以更加深入地掌握和应用Docker容器技术。 另外,要善于利用网络资源,比如每天浏览相关的Docker容器技术博客、论坛或者社区,了解最新的技术发展和应用案例。可以关注Docker官方博客或者加入Docker用户社区,与其他Docker技术爱好者交流学习经验。 最后,坚持每天花5分钟玩转Docker容器技术,持之以恒。通过每天的实践和学习,逐渐提升自己的技术能力,深入理解和运用Docker容器技术,为个人的工作和学习带来便利和提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值